Question

Code que j'ai:

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

Ce code ne fonctionne pas. Quelqu'un sait-il comment faire ça? Je n'ai tout simplement aucune idée avec VB ou VBA.

Était-ce utile?

La solution

Je pense que votre problème est que, dans VBA, les index de chaîne commencent par 1 et non par 0. Essayez ce qui suit:

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

Autres conseils

Avec VBA, VB6, vous pouvez simplement déclarer un tableau d'octets et lui attribuer une valeur de chaîne qui sera convertie pour vous. Ensuite, vous pouvez simplement le parcourir comme un tableau normal.

par exemple

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

Votre exemple doit être modifié pour ne pas avoir de dépendances externes, il dépend maintenant de Nz et de addLog.

Quoi qu’il en soit, le problème ici semble être que vous passez de 0 à len () - 1. En VBA, ce serait 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

L'avez-vous débogué? ;) Êtes-vous sûr que cell_val n'est pas vide? De plus, vous n'avez pas besoin de l'étape 1 dans la boucle For car c'est la valeur par défaut. Aussi, qu'espérez-vous accomplir avec votre code? Il enregistre si des valeurs ascii sont supérieures à 127? Mais c'est tout - il n'y a pas de branchement en fonction du résultat?

Essayez AscW ()

  

L'avez-vous débogué? ;) Êtes-vous sûr que le   cell_val n'est pas vide? Aussi tu ne   besoin de l'étape 1 de la boucle For   puisque c'est par défaut. Aussi qu'est-ce que vous   attendez-vous à accomplir avec votre code? Il   journaux si des valeurs ascii sont au-dessus   127? Mais c'est tout - il n'y a pas   branchement en fonction du résultat?

Je ne l'ai pas débogué, je ne sais pas comment utiliser vba ni aucun des outils qui vont avec. Oui, je suis sûr que cell_val n'est pas vide. Le code était représentatif, je m'assurais que la condition de la branche fonctionnait avant d'écrire la branche elle-même.

  

Je pense que votre problème est que, dans VBA, les index de chaînes commencent à 1 et non à 0.

Ah, le genre de chose qui va avec vba et qui me manquera, merci.

Les chaînes VB / VBA sont basées sur un plutôt que sur zéro, vous devez donc utiliser:

For iter = 1 To Len(cell_val)

J'ai également oublié la étape 1 car c'est la valeur par défaut.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top