2008-09-17 85 views
5

代码,我有:如何遍历一个字符串并检查每个字符的字节值?

 cell_val = CStr(Nz(fld.value, "")) 
     Dim iter As Long 
     For iter = 0 To Len(cell_val) - 1 Step 1 
     If Asc(Mid(cell_val, iter, 1)) > 127 Then 
      addlog "Export contains ascii character > 127" 
     End If 
     Next iter 

此代码不能正常工作。有人知道怎么做吗?我根本不知道用VB或VBA。

回答

12

我相信你的问题是,在VBA字符串指数在1,而不是从0开始尝试以下操作:

For iter = 1 To Len(cell_val) 
    If Asc(Mid(cell_val, iter, 1)) > 127 Then 
     addlog "Export contains ascii character > 127" 
    End If 
Next 
0

你调试呢? ;)你确定cell_val不是空的吗?你也不需要For循环中的'Step 1',因为它是默认的。你还希望用你的代码来实现吗?它记录任何ascii值是否高于127?但就是这样 - 根据结果没有分支?

+0

我怀疑他提供了一个关于该问题的简单示例。虽然“步骤1”是默认设置,但将其留在那里可以让读者更清楚地了解代码,这并没有什么坏处。 – ahockley 2008-09-17 06:13:54

0

尝试ASCW()

0

VB/VBA字符串基于从一而不是零,所以你需要使用:

For iter = 1 To Len(cell_val) 

我也不放过step 1因为这是默认的。

2

你的例子应该被修改,所以它没有外部依赖,它现在取决于Nz和addLog。

无论如何,这里的问题似乎是你从0循环到len() - 1。在VBA中,这将是1到n。

Dim cell_val As String 
cell_val = "øabcdæøå~!#%&/()" 
Dim iter As Long 
For iter = 1 To Len(cell_val) 
    If Asc(Mid(cell_val, iter, 1)) > 127 Then 
     'addlog "Export contains ascii character > 127" 
     Debug.Print iter, "Export contains ascii character > 127" 
    End If 
Next iter 
0

你调试呢? ;)你确定 cell_val不是空的吗?因为它是默认值,所以您不需要 需要For循环 中的'步骤1'。还有什么你 期望与你的代码完成?它 日志如果任何ASCII值超过 127?但就是这样 - 根据结果没有 分支?

我没有调试它,我不知道如何使用vba或任何与之配合的工具。 是的,我确定cell_val不是空的。 该代码具有代表性,我在确保分支条件在编写分支之前工作。

我相信你的问题是,在VBA字符串索引从1开始,而不是从0

啊,确切的那种事情,与我注定要错过VBA一起去的,谢谢您。

3

使用VBA,VB6,您可以声明一个字节数组并为其分配一个字符串值,并且它会为您进行转换。然后你可以像普通数组一样遍历它。

例如

Dim b() as byte 
Dim iter As Long 
b = CStr(Nz(fld.value, "")) 

For iter = 0 To UBound(b) 
    if b(iter) > 127 then 
     addlog "Export contains ascii character > 127" 
    end if 
next