UCase для каждого утверждения - PullRequest
0 голосов
/ 06 августа 2020

Я пытаюсь преобразовать строку, которая может содержать числа, в UpperCase, используя UCase. Когда я использовал такую ​​строку

For Each vLetter In UCase(lName)

, я обнаружил ошибку, когда переменная lName в качестве примера равна "Yasser51". Как я могу это преодолеть?

Ответы [ 3 ]

4 голосов
/ 06 августа 2020

Вы не можете использовать For Each так. For Each может выполнять итерацию только по коллекции или массиву. A String не является ни тем, ни другим.

Один из вариантов для l oop посимвольно - Mid$ и обычный For l oop. ( Хотя до сих пор неясно, что вы на самом деле пытаетесь сделать, и требуется ли вообще al oop ):

Sub Test()
    Dim lName As String
    lName = "Yasser51"
    
    Dim i As Long
    For i = 1 To Len(lName)
        Dim letter As String
        letter = Mid$(UCase(lName), i, 1)
        
        Debug.Print letter
    Next
End Sub
3 голосов
/ 06 августа 2020

Дополнение

Как уже упоминалось, строка не является ни коллекцией , ни массивом , , однако вы можете назначить строка в массив ► Byte, который можно легко итерировать с помощью For Each l oop.

Обратите внимание, что массив Byte всегда содержит пары байтов со значениями numeri c; так, например, цифры 0-9 отображаются как числовые c Asc значения между 48-57 (вместе со значением 0 в качестве дополнительного сопутствующего значения), аналогично обычным буквенным символам A-Z и a-z.

Sub IterateByte()
Dim s   As String: s = "Yasser51"
Dim b() As Byte: b = s

Debug.Print " i", "Asc Value ", "ch| IsDigit" & vbNewLine & String(50, "-")

Dim i As Long, ch As String, vNum As Variant
For Each vNum In b
    ch = Chr(vNum)
    If vNum Then Debug.Print i, "Asc " & vNum, ch & " | " & (ch Like "#")
    i = i + 1
Next
End Sub

Пример результата в непосредственном окне редактора VB

' i            Asc Value     Ch| IsDigit
'--------------------------------------------------
' 0            Asc 89        Y | False
' 2            Asc 97        a | False
' 4            Asc 115       s | False
' 6            Asc 115       s | False
' 8            Asc 101       e | False
' 10           Asc 114       r | False
' 12           Asc 53        5 | True
' 14           Asc 49        1 | True
3 голосов
/ 06 августа 2020

Чтобы преобразовать в верхний регистр, вы просто используете UCase. Если вы хотите повторить попытку, см. Ответ @ BigBen.

Dim sName as String
Dim sUpper as String

sName = "Yasser51"
sUpper = UCase(sName)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...