Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel vba中某个范围内的长度限制_Excel_Vba - Fatal编程技术网

Excel vba中某个范围内的长度限制

Excel vba中某个范围内的长度限制,excel,vba,Excel,Vba,我还是VBA新手,正在尝试创建VBA代码,在该代码中,用户在每个指定列中都被限制为特定的字符长度。如果字符长度更大,则会显示错误消息。代码从B列第10行开始,取决于用户输入数据的行数。我不确定出了什么问题,因为我已经尝试调试了一段时间,但运气不好。下面是我的代码,我希望有人能帮我找出我做错了什么。谢谢 Sub LenValid() Dim sht As Worksheet Dim wrk As Workbook Dim lrow As Long Dim rng1 As

我还是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

试试这个。只要找到长文本,代码仍将退出,但至少应显示消息框

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)
如果Len(rng1.范围(“A”&i.值)>15,则


如果
i=10
这是检查rng1中的第10个单元格,因为它是相对的,即它从B20开始。

试试这个。只要找到长文本,代码仍将退出,但至少应显示消息框

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)
如果Len(rng1.范围(“A”&i.值)>15,则


如果
i=10
这是检查rng1中的第10个单元格,因为它是相对的,即它从B20开始。

到底是什么问题?错误消息?当您找到长度超过10的单元格时,您的代码将立即结束。此外,
rng1.Range(“a”&i)
是一个相对引用,可能不是您想要的。当我测试它时,代码没有拾取无效长度。例如,第一个“IF”语句用于检测“B”列中大于“15”的字符长度,并显示一个指示无效长度的消息框,以便用户可以相应地编辑数据。但是,即使数据大于指定的条件,代码仍会继续循环下一列,而不会弹出消息。@tkod-因为这是您第一次使用此网站,如果有帮助,请随时将答案标记为正确。答案旁边的绿色复选标记表示接受-cf。然后进行(巡回)[.标记答案将帮助其他开发人员避免进入这个问题,因为它已经解决,并将注意力集中在其他问题上。谢谢!问题到底是什么?错误消息?当您找到长度超过10的单元格时,您的代码将立即结束。此外,
rng1.Range(“a”&i)
是一个相对引用,可能不是您想要的。当我测试它时,代码没有检测到无效长度。例如,第一个“IF”语句是检测“B”列中大于“15”的字符长度带有一个指示无效长度的消息框,以便用户可以相应地编辑数据。但是,即使数据大于指定的条件,代码仍会继续循环下一列,而不会弹出消息。@tkod-因为这是您第一次使用此网站,如果答案是正确的,请随意标记为正确答案lpful.答案旁边的绿色复选标记表示接受-cf..并参加(参观)[.标记答案将有助于其他开发人员避免进入这个问题,因为它已经解决,并专注于其他问题。谢谢!成功了!我现在可以看到问题了。非常感谢您向我解释问题并帮助我调试。希望您过得愉快!!成功了!我现在可以看到问题了。非常感谢您的解释把它交给我,帮我调试。希望你有一个美好的一天!!