如果没有,则无法找出下一个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
beforeNext 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的值不相等,就运行循环。我将寻找一个更好的方法来做到这一点。谢谢