Я создал код VBA, чтобы подсчитать значение символов внутри ячейки, а затем отобразить его в Msgbox.

Чтобы сделать его динамическим, я вставил цикл для чтения целых строк, пока ячейка не станет пустой. Цикл выполняется точное количество раз, но не читает следующую строку.

Public Sub Rs()

    Dim Text As String
    Dim NumChar As String
    Dim i As Integer
    Dim NumRows As Long
    Dim msg1 As String

    Application.ScreenUpdating = False
    'Get Cell Value
    'Get Char Length

    Text = Range("B2" & i).Value
    NumRows = Range("B2", Range("B2").End(xlDown)).Rows.Count
    Range("B2").Select

    For i = 1 To NumRows
        Text = Range("B" & i).Value
        NumChar = Len(Text)
        'Character length validation
        If Len(Text) >= 15 Then
            msg1 = msg1 & Chr(149) & "     SVC_DESC " & Text & " has " & NumChar & " characters " & " and Exceeded allowable number of characters!" & vbLf

        Else
            msg1 = msg1 & Chr(149) & "     SVC_DESC " & Text & " has " & NumChar & " characters " & " and it's Valid !" & vbLf

        End If
    Next i
    Application.ScreenUpdating = True

    MsgBox msg1

End Sub
0
Gabriel 23 Сен 2018 в 10:16

1 ответ

Лучший ответ

Переместите Text = Range("B2").Value внутри цикла и переберите ячейку, из которой он получает свое значение, если вы планируете использовать его в сообщении.

Option Explicit

Public Sub Rs()

    Dim txt As String, msg1 As String
    Dim numRows As Long, numChar As Long, i As Long

    Application.ScreenUpdating = False

    numRows = Cells(Rows.Count, "B").End(xlUp).Row

    For i = 2 To numRows
        txt = Cells(i, "B").Value2
        numChar = Len(txt)
        'Character length validation
        If numChar >= 15 Then
                msg1 = msg1 & Chr(149) & "     SVC_DESC " & txt & " has " & numChar & " characters " & " and it's Valid !" & vbLf
            Else
                msg1 = msg1 & Chr(149) & "     SVC_DESC " & txt & " has " & numChar & " characters " & " and Exceeded allowable number of characters!" & vbLf
        End If
      Next i
      Application.ScreenUpdating = True


      MsgBox msg1
End Sub

Как упоминалось в моем комментарии ниже, msg - это «Превышено допустимое количество символов», если numchars меньше 15? Это кажется нелогичным. Вы можете изменить критерии на If numChar < 15 Then или поменять местами два сообщения.

0
23 Сен 2018 в 07:46