Ограничение длины в диапазоне в VBA - PullRequest
1 голос
/ 21 марта 2019

Я все еще новичок в VBA и пытаюсь создать код VBA, в котором пользователи ограничены определенной длиной символов в каждом указанном столбце.Если длина символа больше, появится сообщение об ошибке.Код начинается в столбце B Строка 10 и в зависимости от количества строк пользователь вводит данные.Я не уверен, что не так, так как я пытался отладить какое-то время безуспешно.Ниже мой код, я надеюсь, что кто-то может помочь мне понять, что я делаю неправильно.Спасибо!

Sub LenValid()
Dim sht     As Worksheet
Dim wrk     As Workbook
Dim lrow    As Long
Dim rng1    As Range
Dim rng2    As Range
Dim i       As Integer
Dim finprod As Variant
Dim subprod As Variant

Set wrk = ActiveWorkbook
Set sht = wrk.Worksheets(1)

For Each sht In wrk.Worksheets

    lrow = sht.Range("B" & Rows.Count).End(xlUp).Row
    Set rng1 = sht.Range("B10:B" & lrow) 'CUSTOMER ACCT
    Set rng2 = sht.Range("C10:C" & lrow) 'CUSTOMER NAME
    i = 1
    For i = 10 To lrow

        If Len(rng1.Range("A" & i).Value) > 15 Then
            MsgBox "Customer Acct limited to 15 characters." & vbNewLine & "Please review and correct.", vbExclamation
            Exit Sub
        End If

        If Len(rng2.Range("B" & i).Value) > 10 Then
            MsgBox "Customer Name limited to 10 characters." & vbNewLine & "Please review and correct.", vbExclamation
            Exit Sub
        End If

    Next i    
Next sht

'Error Handler
NothingFound:
MsgBox "Character length in required fields are valid.", vbInformation
End Sub

1 Ответ

0 голосов
/ 21 марта 2019

Попробуй это.Код будет по-прежнему выходить, как только будет найден длинный текст, но по крайней мере должно появиться окно сообщения.

Sub LenValid()

Dim sht As Worksheet
Dim wrk As Workbook
Dim lrow As Long
Dim rng1 As Range
Dim rng2 As Range
Dim i As Long
Dim finprod As Variant
Dim subprod As Variant

Set wrk = ActiveWorkbook

For Each sht In wrk.Worksheets
    lrow = sht.Range("B" & Rows.Count).End(xlUp).Row
    Set rng1 = sht.Range("B10:B" & lrow) 'CUSTOMER ACCT
    Set rng2 = sht.Range("C10:C" & lrow) 'CUSTOMER NAME
    For i = 1 To rng1.Count
        If Len(rng1.Cells(i).Value) > 15 Then
            MsgBox "Customer Acct limited to 15 characters." & vbNewLine & "Please review and correct.", vbExclamation
            Exit Sub
        End If
        If Len(rng2.Cells(i).Value) > 10 Then
            MsgBox "Customer Name limited to 10 characters." & vbNewLine & "Please review and correct.", vbExclamation
            Exit Sub
        End If
    Next i
Next sht

'Error Handler
NothingFound:
MsgBox "Character length in required fields are valid.", vbInformation

End Sub

Ваша проблема, вероятно, заключается в следующем:

Set rng1 = sht.Range("B10:B" & lrow) If Len(rng1.Range("A" & i).Value) > 15 Then

Если i=10, это проверяет 10-ю ячейку в rng1 как относительную, т.е. она начинается в B20.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...