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一无所知。

4

7 回答 7

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
于 2008-09-17T06:10:15.410 回答
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
于 2008-09-17T06:27:07.180 回答
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
于 2008-09-17T06:17:45.517 回答
0

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

于 2008-09-17T06:10:47.063 回答
0

试试 AscW()

于 2008-09-17T06:11:09.060 回答
0

VB/VBA 字符串是从 1 而非 0 开始的,因此您需要使用:

For iter = 1 To Len(cell_val)

我也放弃了,step 1因为这是默认设置。

于 2008-09-17T06:13:19.787 回答
0

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

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

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

啊,我一定会错过的与 vba 相关的确切类型,谢谢。

于 2008-09-17T06:27:06.260 回答