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 の文字列インデックスが 0 ではなく 1 から始まることだと思います。次のことを試してください。

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 に基づいているため、次を使用する必要があります。

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の文字列インデックスが0ではなく1から始まることだと思います。

ああ、私が見逃していた vba とまったく同じ種類のもの、ありがとう。

于 2008-09-17T06:27:06.260 に答える