Pregunta

Código que tengo:

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

Este código no funciona.Alguien sabe cómo hacer esto?Simplemente no tengo idea de VB o VBA.

¿Fue útil?

Solución

Creo que su problema es que en VBA los índices de cadenas comienzan en 1 y no en 0.Pruebe lo siguiente:

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

Otros consejos

Con VBA, VB6 puede simplemente declarar una matriz de bytes y asignarle un valor de cadena y se convertirá por usted.Luego puedes simplemente iterarlo como una matriz normal.

p.ej.

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

Su ejemplo debe modificarse para que no tenga dependencias externas; ahora depende de Nz y addLog.

De todos modos, el problema aquí parece ser que estás haciendo un bucle de 0 a len()-1.En VBA esto sería 1 an.

 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

¿Lo depuraste?;) ¿Estás seguro de que cell_val no está vacío?Además, no necesita el 'Paso 1' en el bucle For ya que es el valor predeterminado.Además, ¿qué esperas lograr con tu código?¿Registra si algún valor ascii está por encima de 127?Pero eso es todo: ¿no hay ramificación según el resultado?

Pruebe AscW()

¿Lo depuraste?;) ¿Estás seguro de que el Cell_Val no está vacío?Además, no necesita el 'Paso 1' en el bucle for ya que es predeterminado.Además, ¿qué espera que acomode con su código?¿Registra si hay valores ASCII por encima de 127?Pero eso es todo, ¿no hay ramificaciones dependiendo del resultado?

No lo depuré, no tengo idea de cómo usar vba ni ninguna de las herramientas que lo acompañan.Sí, estoy seguro de que cell_val no está vacío.El código era representativo, me aseguraba de que la condición de la rama funcionara antes de escribir la rama misma.

Creo que su problema es que en VBA los índices de cadenas comienzan en 1 y no en 0.

Ah, el tipo exacto de cosas que acompañan a vba y que seguramente me perdería, gracias.

Las cadenas VB/VBA se basan en uno en lugar de cero, por lo que es necesario utilizar:

For iter = 1 To Len(cell_val)

También he dejado fuera el step 1 ya que ese es el valor predeterminado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top