我有代码:

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。

有帮助吗?

解决方案

我相信你的问题是在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

其他提示

使用 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

您的示例应该进行修改,使其没有外部依赖项,它现在依赖于 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

你调试了吗?;) 您确定 cell_val 不为空吗?此外,您不需要 For 循环中的“步骤 1”,因为它是默认的。另外,您希望通过您的代码完成什么?它会记录是否有任何 ASCII 值高于 127?但就是这样 - 没有根据结果进行分支?

尝试 AscW()

你调试了吗?;)您确定cell_val不是空的吗?另外,您不需要for循环中的“步骤1”,因为默认值是默认值。另外,您期望对您的代码进行什么?如果任何ASCII值高于127,它会记录吗?但这就是这样 - 没有分支,具体取决于结果吗?

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

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

啊,正是与 vba 相关的东西,我一定会错过,谢谢。

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

For iter = 1 To Len(cell_val)

我也离开了 step 1 因为这是默认的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top