Domanda

Codice che ho:

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

Questo codice non funziona.Qualcuno sa come farlo?Semplicemente non ho idea di VB o VBA.

È stato utile?

Soluzione

Credo che il tuo problema sia che negli indici di stringa VBA iniziano da 1 e non da 0.Prova quanto segue:

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

Altri suggerimenti

Con VBA, VB6 puoi semplicemente dichiarare un array di byte e assegnargli un valore stringa e verrà convertito per te.Quindi puoi semplicemente scorrerlo come un normale array.

per esempio.

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

Il tuo esempio dovrebbe essere modificato in modo che non abbia dipendenze esterne, ora dipende da Nz e addLog.

Ad ogni modo, il problema qui sembra essere che stai eseguendo il loop da 0 a len()-1.In VBA sarebbe da 1 a 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

Hai eseguito il debug?;) Sei sicuro che cell_val non sia vuoto?Inoltre non è necessario il "Passaggio 1" nel ciclo For poiché è predefinito.Inoltre, cosa ti aspetti di ottenere con il tuo codice?Registra se i valori ASCII sono superiori a 127?Ma questo è tutto: non ci sono ramificazioni a seconda del risultato?

Prova AscW()

Hai eseguito il debug?;) Sei sicuro che il cell_val non sia vuoto?Inoltre, non è necessario il "passaggio 1" nel ciclo for poiché è predefinito.Inoltre, cosa ti aspetti di accompagnare il tuo codice?Registra se i valori ASCII sono superiori a 127?Ma è tutto - non c'è ramificazione a seconda del risultato?

Non ho eseguito il debug, non ho idea di come utilizzare vba o gli strumenti che lo accompagnano.Sì, sono sicuro che cell_val non sia vuoto.Il codice era rappresentativo, mi assicuravo che la condizione del ramo funzionasse prima di scrivere il ramo stesso.

Credo che il tuo problema sia che negli indici di stringa VBA iniziano da 1 e non da 0.

Ah, esattamente il tipo di cose che vanno di pari passo con vba che sicuramente mi sarebbero mancate, grazie.

Le stringhe VB/VBA si basano su uno anziché su zero, quindi è necessario utilizzare:

For iter = 1 To Len(cell_val)

Ho anche lasciato fuori il file step 1 poiché questa è l'impostazione predefinita.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top