如果没有,则无法找出下一个VBA错误

如果没有,则无法找出下一个VBA错误,vba,excel,Vba,Excel,我正在处理一组更大的代码的子代码,当测试这一部分时,我会得到下一个错误。我看了,每一个为了都有下一个,每一个如果都有结束如果,每一段时间都有一个结局 你能帮我弄清楚吗 提前谢谢 Option Explicit Sub trueTotal() Dim ws As Worksheet Set ws = Worksheets("Sheet1") 'be more explicit than 'ActiveSheet Dim sPart As String Dim SearchRange As Ra

我正在处理一组更大的代码的子代码,当测试这一部分时,我会得到下一个错误。我看了,每一个为了都有下一个,每一个如果都有结束如果,每一段时间都有一个结局

你能帮我弄清楚吗

提前谢谢

Option Explicit

Sub trueTotal()

Dim ws As Worksheet
Set ws = Worksheets("Sheet1") 'be more explicit than 'ActiveSheet
Dim sPart As String
Dim SearchRange As Range
Dim FindRow As Range
Dim ReturnRowNumber As Integer
Dim currPickTotal As Integer
Dim totalPick As Integer
Dim scanRow As Integer
Dim scanQty As Integer
Dim cell As Range
Dim rng As Range

Set FindRow = Nothing

'Compare the range and loop until equal
While ws.Range("E6:E30") <> ws.Range("F6:F30")
    Set rng = ws.Range("E6:F30")
    For Each cell In rng
        If Not cell Is Empty Then
            ws.Range(rng).Interior.ColorIndex = 4
    Next cell
        While FindRow Is Nothing
            sPart = InputBox("Scan the first part number", "Part Number")  'Get Part Number
            'Set the search range to get the cell row for the part number.
            Set SearchRange = ws.Range("A6", ws.Range("A30").End(xlUp))
            Set FindRow = SearchRange.Find(sPart, LookIn:=xlValues, LookAt:=xlWhole)
            If Not FindRow Is Nothing Then ReturnRowNumber = FindRow.Row
        Wend
        scanRow = ReturnRowNumber
        'Error checking to ensure scanned amount is not greater than required amount
        If totalPick <= ws.Range("E" & scanRow) Then
            scanQty = InputBox("Scan the Quantity", "Quantity")    'Get Quantity
            currPickTotal = ws.Range("F" & scanRow).Value
            totalPick = currPickTotal + scanQty
            Range("F" & scanRow).Value = totalPick
            Set FindRow = Nothing
            If Range("E" & scanRow).Value = Range("F" & scanRow).Value Then
                Range("E" & cell.Row).Interior.ColorIndex = 3
                Range("F" & cell.Row).Interior.ColorIndex = 3
            End If
        Else
            scanQty = InputBox("Scan exceeds the required Quantity, please scan a lower quantity.", "Quantity")    'Get Quantity
            currPickTotal = ws.Range("F" & scanRow).Value
            currPickTotal = currPickTotal - scanQty 'Subtract last scanQty
            totalPick = currPickTotal + scanQty
            Range("F" & scanRow).Value = totalPick
            Set FindRow = Nothing
            If Range("E" & scanRow).Value = Range("F" & scanRow).Value Then
                Range("E" & cell.Row).Interior.ColorIndex = 3
                Range("F" & cell.Row).Interior.ColorIndex = 3
            End If
        End If
Wend
End Sub
选项显式
小计()
将ws设置为工作表
将ws=工作表(“Sheet1”)设置为比“ActiveSheet”更明确
暗晶石
将搜索范围变暗为范围
暗芬德罗射程
Dim ReturnRowNumber为整数
Dim currPickTotal为整数
Dim totalPick作为整数
将扫描行设置为整数
将扫描数量设置为整数
暗淡单元格作为范围
变暗rng As范围
设置FindRow=Nothing
'比较范围和循环,直到相等
而ws.Range(“E6:E30”)ws.Range(“F6:F30”)
设置rng=ws.范围(“E6:F30”)
对于rng中的每个单元
如果单元格不是空的,那么
ws.Range(rng).Interior.ColorIndex=4
下一个细胞
而芬德罗什么都不是
sPart=输入框(“扫描第一个零件号”、“零件号”)'获取零件号
'设置搜索范围以获取零件号的单元格行。
设置SearchRange=ws.Range(“A6”,ws.Range(“A30”)。结束(xlUp))
设置FindRow=SearchRange.Find(sPart,LookIn:=xlValues,LookAt:=xlWhole)
如果Not FindRow为Nothing,则ReturnRowNumber=FindRow.Row
温德
scanRow=ReturnRowNumber
'错误检查以确保扫描金额不大于所需金额

如果totalPick你错了结束如果

For Each cell In Rng
    If Not cell Is Empty Then
        ws.Range(Rng).Interior.ColorIndex = 4
    End If
Next cell

希望这有帮助

如果

For Each cell In Rng
    If Not cell Is Empty Then
        ws.Range(Rng).Interior.ColorIndex = 4
    End If
Next cell
希望这有帮助

我建议如下

...
While Not equal_E6_E30_to_F6_F30(ws)
...

Function equal_E6_E30_to_F6_F30(ws As Worksheet)
Dim i As Integer
equal_E6_E30_to_F6_F30 = True
For i = 6 To 30
    If ws.Range("E" + Trim(Str(i))).Value <> ws.Range("F" + Trim(Str(i))).Value Then
        equal_E6_E30_to_F6_F30 = False
        Exit For
    End If
Next
End Function
。。。
而不等于E6_E30_到F6_F30(ws)
...
功能等同于E6\ue30\u到F6\uf30(ws-As工作表)
作为整数的Dim i
与F6和F30相等=真
对于i=6到30
如果ws.Range(“E”+修剪(Str(i))。值ws.Range(“F”+修剪(Str(i)))。值,则
与F6和F30相等=假
退出
如果结束
下一个
端函数
我已经测试过了。

我建议如下

...
While Not equal_E6_E30_to_F6_F30(ws)
...

Function equal_E6_E30_to_F6_F30(ws As Worksheet)
Dim i As Integer
equal_E6_E30_to_F6_F30 = True
For i = 6 To 30
    If ws.Range("E" + Trim(Str(i))).Value <> ws.Range("F" + Trim(Str(i))).Value Then
        equal_E6_E30_to_F6_F30 = False
        Exit For
    End If
Next
End Function
。。。
而不等于E6_E30_到F6_F30(ws)
...
功能等同于E6\ue30\u到F6\uf30(ws-As工作表)
作为整数的Dim i
与F6和F30相等=真
对于i=6到30
如果ws.Range(“E”+修剪(Str(i))。值ws.Range(“F”+修剪(Str(i)))。值,则
与F6和F30相等=假
退出
如果结束
下一个
端函数

我已经测试过了。

缺少
End If
before
Next cell
您还需要在范围内循环<代码>而ws.Range(“E6:E30”)ws.Range(“F6:F30”)
将不起作用。或者将
If
语句放在
下一个单元格之前的
End If
行中。您还需要循环遍历您的范围<代码>而ws.Range(“E6:E30”)ws.Range(“F6:F30”)
将不起作用。或者将
If
语句转换为一行,我认为我不需要一行,因为我有另一个If Not语句,不需要End If。现在它说我在While ws.Range(“E6:E30”)ws.Range(“F6:F30”)上有一个类型不匹配,你不能测试2个数组/范围是否相等。Range(“E6:E30”)返回一个充满单元格的Range对象,Excel不知道如何检查它们是否相同。您可以定义一个函数,该函数循环遍历从E6到E30以及F6到F30的所有单元格,以检查它们是否相等,并返回一个布尔值,然后调用该函数,而不是
While ws.Range(“E6:E30”)ws.Range(“F6:F30”)
,这正是我试图用While实现的。我需要比较E6和F6,E7和F7,只要E30和F30的值不相等,就运行循环。我将寻找一个更好的方法来做到这一点。谢谢啊,我不认为我需要一个,因为我有另一个If-Not语句,不需要End-If。现在它说我在While ws.Range(“E6:E30”)ws.Range(“F6:F30”)上有一个类型不匹配,你不能测试2个数组/范围是否相等。Range(“E6:E30”)返回一个充满单元格的Range对象,Excel不知道如何检查它们是否相同。您可以定义一个函数,该函数循环遍历从E6到E30以及F6到F30的所有单元格,以检查它们是否相等,并返回一个布尔值,然后调用该函数,而不是
While ws.Range(“E6:E30”)ws.Range(“F6:F30”)
,这正是我试图用While实现的。我需要比较E6和F6,E7和F7,只要E30和F30的值不相等,就运行循环。我将寻找一个更好的方法来做到这一点。谢谢