如何遍历字符串并检查每个字符的字节值?

时间:2008-09-17 06:03:06

标签: string excel-vba for-loop vba excel

我的代码:

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。

7 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

使用VBA,VB6,您只需声明一个字节数组并为其指定一个字符串值,它就会为您转换。然后你可以像常规数组一样迭代它。

e.g。

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

答案 2 :(得分: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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

尝试AscW()

答案 5 :(得分:0)

VB / VBA字符串基于一个而不是零,因此您需要使用:

For iter = 1 To Len(cell_val)

我也离开了step 1,因为这是默认设置。

答案 6 :(得分:0)

  

你调试了吗? ;)你确定吗?   cell_val不是空的?你也没有   需要For循环中的'Step 1'   因为它是默认的。还有什么   期望用你的代码来完成?它   记录是否有任何ascii值高于   127?但就是这样 - 没有   分支取决于结果?

我没有调试它,我不知道如何使用vba或随之而来的任何工具。 是的我确定cell_val不是空的。 代码是代表性的,我在写分支本身之前确保分支条件有效。

  

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

啊,与我一定会想念的vba一样,谢谢你。