我的代码:
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。
答案 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一样,谢谢你。