Frage

Code I haben:

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

Dieser Code funktioniert nicht. Wer weiß, wie dies zu tun? Ich habe einfach keine Ahnung, mit VB oder VBA.

War es hilfreich?

Lösung

Ich glaube, Ihr Problem ist, dass in VBA String-Indizes auf 1 und nicht bei 0 beginnen Versuchen Sie Folgendes:

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

Andere Tipps

Mit VBA, VB6 Sie können nur ein Byte-Array deklarieren und einen String Wert zuweisen und es wird für Sie umgewandelt werden. Dann können Sie einfach durchlaufen sie wie eine regelmäßige Anordnung.

z.

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

Ihr Beispiel modfied werden soll, damit es nicht externe Abhängigkeiten hat, es hängt jetzt von Nz und addLog.

Wie auch immer, das Problem hier scheint zu sein, dass Sie von 0 bis len sind Looping () - 1. In VBA dies 1 bis n wäre.

 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

Haben Sie es debuggen? ;) Sind Sie sicher, dass die cell_val nicht leer ist? Auch brauchen Sie nicht den ‚Schritt 1‘ in dem For-Schleife, da es standardmäßig. Auch was erwarten Sie mit Ihrem Code zu erledige? Es protokolliert, wenn irgendwelche ascii-Werte über 127 sind? Aber das ist es - es gibt keine Verzweigung auf das Ergebnis je ist

?

Versuchen AscW ()

  

Haben Sie es debuggen? ;) Sind Sie sicher, dass die   cell_val nicht leer ist? Auch nicht wahr   müssen die ‚Schritt 1‘ in der for-Schleife   da es standardmäßig. Auch das, was tun Sie   erwarten mit Ihrem Code zu erledige? Es   Protokolle, wenn irgendwelche ascii Werte liegen über   127? Aber das ist es - es gibt keine   Verzweigung in Abhängigkeit vom Ergebnis?

Ich habe debuggen es nicht, ich habe keine Ahnung, wie vba oder eines der Werkzeuge, die zusammen mit ihm zu gehen. Ja, ich bin sicher, dass cell_val nicht leer ist. Der Code war repräsentativ, ich war die Verzweigungsbedingung Arbeiten zu gewährleisten, bevor die Branche selbst zu schreiben.

  

Ich glaube, Ihr Problem ist, dass in VBA String-Indizes bei 1 und nicht bei 0 beginnen.

Ah, die genaue Art der Sache, die zusammen mit vba geht, die ich vermissen musste, danke.

VB / VBA-Strings basieren von einem eher als Null ist, so müssen Sie verwenden:

For iter = 1 To Len(cell_val)

Ich habe auch die step 1 aufhörte, da dies der Standard ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top