Pergunta

Código que tenho:

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 não funciona.Alguém sabe como fazer isto?Simplesmente não tenho ideia do VB ou do VBA.

Foi útil?

Solução

Acredito que o seu problema é que no VBA os índices de strings começam em 1 e não em 0.Experimente o seguinte:

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

Outras dicas

Com VBA, VB6 você pode simplesmente declarar uma matriz de bytes e atribuir um valor de string a ela e ela será convertida para você.Então você pode simplesmente iterá-lo como um array normal.

por exemplo.

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

Seu exemplo deve ser modificado para não ter dependências externas, agora depende de Nz e addLog.

De qualquer forma, o problema aqui parece ser que você está fazendo um loop de 0 para len()-1.No VBA, isso seria de 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

Você depurou?;) Tem certeza de que cell_val não está vazio?Além disso, você não precisa da 'Etapa 1' no loop For, pois é o padrão.Além disso, o que você espera realizar com seu código?Ele registra se algum valor ASCII está acima de 127?Mas é isso - não há ramificação dependendo do resultado?

Experimente AscW()

Você depurou?;) Tem certeza de que o cell_val não está vazio?Além disso, você não precisa do 'Passo 1' no loop For já que é padrão.Também o que você faz Espera cumprir com o seu código?Ela Logs se algum valor ASCII estiver acima 127?Mas é isso - não há ramificação dependendo do resultado?

Não depurei, não tenho ideia de como usar o vba ou qualquer uma das ferramentas que o acompanham.Sim, tenho certeza de que cell_val não está vazio.O código era representativo, eu estava garantindo que a condição do branch funcionasse antes de escrever o próprio branch.

Acredito que o seu problema é que no VBA os índices de strings começam em 1 e não em 0.

Ah, o tipo exato de coisa que acompanha o vba e que eu certamente sentiria falta, obrigado.

As strings VB/VBA são baseadas em um em vez de zero, então você precisa usar:

For iter = 1 To Len(cell_val)

Eu também deixei de lado step 1 já que esse é o padrão.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top