문자열을 반복하고 모든 문자의 바이트 값을 확인하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/80427

문제

내가 가지고 있는 코드:

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

이 코드는 작동하지 않습니다.이 작업을 수행하는 방법을 아는 사람이 있나요?저는 VB나 VBA에 대해 전혀 모릅니다.

도움이 되었습니까?

해결책

귀하의 문제는 VBA 문자열 인덱스가 0이 아닌 1에서 시작한다는 것입니다.다음을 시도해 보세요:

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

다른 팁

VBA, VB6에서는 바이트 배열을 선언하고 여기에 문자열 값을 할당하면 자동으로 변환됩니다.그런 다음 일반 배열처럼 반복할 수 있습니다.

예를 들어

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

귀하의 예제는 외부 종속성이 없도록 수정되어야 하며 이제 Nz 및 addLog에 종속됩니다.

어쨌든 여기서 문제는 0에서 len()-1로 반복한다는 것입니다.VBA에서는 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

디버깅하셨나요?;) cell_val이 비어 있지 않은 것이 확실합니까?또한 For 루프에는 '1단계'가 기본값이므로 필요하지 않습니다.또한 귀하의 코드로 무엇을 달성할 것으로 기대하시나요?ASCII 값이 127을 초과하면 기록됩니까?하지만 그게 전부입니다. 결과에 따라 분기가 없나요?

AscW()를 사용해 보세요.

디버깅하셨나요?;) cell_val이 비어 있지 않다고 확신합니까?또한 기본값이므로 FOR 루프에서 '1 단계'가 필요하지 않습니다.또한 코드를 어떻게 압도 할 것으로 예상됩니까?ASCII 값이 127 이상인 경우 로그가 있습니까?그러나 그게 다야 - 결과에 따라 분기가 없습니까?

나는 그것을 디버깅하지 않았으며 vba 또는 이와 함께 제공되는 도구를 사용하는 방법을 모릅니다.예, cell_val이 비어 있지 않다고 확신합니다.코드는 대표적이며 분기 자체를 작성하기 전에 분기 조건이 작동하는지 확인했습니다.

귀하의 문제는 VBA 문자열 인덱스가 0이 아닌 1에서 시작한다는 것입니다.

아, 제가 놓칠 수밖에 없었던 vba와 관련된 정확한 내용, 감사합니다.

VB/VBA 문자열은 0이 아닌 1을 기반으로 하므로 다음을 사용해야 합니다.

For iter = 1 To Len(cell_val)

나도 그만뒀어 step 1 그게 기본값이니까.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top