[英]Find Function in Loop VBA
我有以下 VBA 代码。 我想做一个计算,但这只有在满足 IF 语句的情况下才能完成。 这意味着 5 个不同工作表中的日期在某个单元格中应该相同,而客户名称在另一个单元格中应该相同。 日期和名称沿工作表以不同方式显示。 如果我使用第一个代码,那么代码就可以工作。 但是在 if 语句代码中使用的前两行没有找到正确的值,因为这些的格式/显示在使用的不同工作表中是不同的。 所以我认为有必要使用 find 函数,找到计算所需的正确值。 使用 find 函数的代码显示在提供的第二个宏中。当我尝试运行此代码时,出现错误 91。因此假设我创建的 find 函数有问题,但我找不到我犯的错误。 有人知道第二个代码出了什么问题吗?
Option Explicit
Sub DoSomething1()
'Declare Variables
Dim i As Long, r As Long, c As Long
Dim count as Double, lastColData as Double, LastRowData as Double, lastRowInput as Double, StartSearch2 As Double
Dim shtData As Worksheet, shtInput As Worksheet, shtInputI As Worksheet, shtInputII As Worksheet, shtInputIII As Worksheet, shtInputIV As Worksheet, shtInputV As Worksheet, shtInputVI As Worksheet, shtCopy As Worksheet
Set shtData = Sheets("Data")
Set shtInput = Sheets("INPUT")
Set shtInputI = Sheets("INPUTP")
Set shtInputII = Sheets("INPUTR")
Set shtInputIII = Sheets("INPUTF")
Set shtInputIV = Sheets("INPUTQ")
Set shtInputV = Sheets("INPUTPF")
LastColData = shtData.Cells(4, shtData.Columns.count).End(xlToLeft).Column
LastRowData = shtData.Cells(shtData.Rows.count, "A").End(xlUp).row
LastRowInput = shtInput.Cells(shtInput.Rows.count, "A").End(xlUp).row
'Search starting from which row?
StartSearch2 = InputBox("Vanaf welke rij wil je zoeken?", "Start", Default:=6)
'Loop Code
For r = StartSearch2 To LastRowData
For c = 2 To LastColData
count = 0
For i = 2 To LastRowInput
If shtInput.Cells(i,10).Value = shtData.Cells(r,1).Value And _
shtInputI.Cells(r, 1).Value = shtData.Cells(r, 1).Value And _
shtInputIV.Cells(r, 1).Value = shtData.Cells(r, 1).Value And _
shtInputIII.Cells(r, 1).Value = shtData.Cells(r, 1).Value And _
shtInputII.Cells(r, 1).Value = shtData.Cells(r, 1).Value Then 'Dates are equal in different sheets
If shtInput.Cells(i,32).Value = shtData.Cells(4,c).Value And _
shtInputI.Cells(4, c).Value = shtData.Cells(4, c).Value And _
shtInputV.Cells(4, c).Value = shtData.Cells(4, c).Value And _
shtInputIV.Cells(4, c).Value = shtData.Cells(4, c).Value And _
shtInputIII.Cells(4, c).Value = shtData.Cells(4, c).Value And _
shtInputII.Cells(4, c).Value = shtData.Cells(4, c).Value Then 'Names are equal in different sheets
count = count + (shtInputI.Cells(r, c).Value + shtInputII.Cells(r, c)) * shtInputV.Cells(5, c).Value * shtInputIV.Cells(r, c).Value * shtInputIII.Cells(r, c).Value
End If
End If
Next i
shtData.Cells(r, c).Value = count
Next c
Next r
End Sub
Option Explicit
Sub DoSomething2()
'Declare Variables
Dim i As Long, r As Long, c As Long
Dim count as Double, lastColData as Double, LastRowData as Double, lastRowInput as Double, StartSearch2 As Double
Dim shtData As Worksheet, shtInput As Worksheet, shtInputI As Worksheet, shtInputII As Worksheet, shtInputIII As Worksheet, shtInputIV As Worksheet, shtInputV As Worksheet, shtInputVI As Worksheet, shtCopy As Worksheet
Set shtData = Sheets("Data")
Set shtInput = Sheets("INPUT")
Set shtInputI = Sheets("INPUTP")
Set shtInputII = Sheets("INPUTR")
Set shtInputIII = Sheets("INPUTF")
Set shtInputIV = Sheets("INPUTQ")
Set shtInputV = Sheets("INPUTPF")
LastColData = shtData.Cells(4, shtData.Columns.count).End(xlToLeft).Column
LastRowData = shtData.Cells(shtData.Rows.count, "A").End(xlUp).row
LastRowInput = shtInput.Cells(shtInput.Rows.count, "A").End(xlUp).row
'Search starting from which row?
StartSearch2 = InputBox("Vanaf welke rij wil je zoeken?", "Start", Default:=6)
'Loop Code
For r = StartSearch2 To LastRowData
For c = 2 To LastColData
count = 0
For i = 2 To LastRowInput
If shtInput.Cells.Find(What:=shtInput.Cells(i, 10).Value, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext) = shtData.Cells(r, 1).Value And _
shtInputI.Cells.Find(What:=shtInputI.Cells(r, 1).Value, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext) = shtData.Cells(r, 1).Value And _
shtInputIV.Cells(r, 1).Value = shtData.Cells(r, 1).Value And _
shtInputIII.Cells(r, 1).Value = shtData.Cells(r, 1).Value And _
shtInputII.Cells(r, 1).Value = shtData.Cells(r, 1).Value Then
If shtInput.Cells.Find(What:=shtInput.Cells(i, 32).Value, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext) = shtData.Cells(4, c).Value And _
shtInputI.Cells.Find(What:=shtInputI.Cells(4, c).Value, LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext) = shtData.Cells(4, c).Value And ?
shtInputV.Cells(4, c).Value = shtData.Cells(4, c).Value And _
shtInputIV.Cells(4, c).Value = shtData.Cells(4, c).Value And _
shtInputIII.Cells(4, c).Value = shtData.Cells(4, c).Value And _
shtInputII.Cells(4, c).Value = shtData.Cells(4, c).Value Then
count = count + (shtInputI.Cells(r, c).Value + shtInputII.Cells(r, c)) * shtInputV.Cells(5, c).Value * shtInputIV.Cells(r, c).Value * shtInputIII.Cells(r, c).Value
End If
End If
Next i
shtData.Cells(r, c).Value = count
Next c
Next r
End Sub
首先,至少有 1 个错字: shtData.Cells(4, c).Value And
? 而不是_
然后,如果是我,我会把这个 find 放在一个变量中,然后评估这个变量......可以更容易地跟踪任何问题,尤其是当找不到值时。
Sub DoSomething2()
'Declare Variables
Dim i As Long, r As Long, c As Long
Dim count As Double, lastColData As Double, LastRowData As Double, lastRowInput As Double, StartSearch2 As Double
Dim shtData As Worksheet, shtInput As Worksheet, shtInputI As Worksheet, shtInputII As Worksheet, shtInputIII As Worksheet, shtInputIV As Worksheet, shtInputV As Worksheet, shtInputVI As Worksheet, shtCopy As Worksheet
Set shtData = Sheets("Data")
Set shtInput = Sheets("INPUT")
Set shtInputI = Sheets("INPUTP")
Set shtInputII = Sheets("INPUTR")
Set shtInputIII = Sheets("INPUTF")
Set shtInputIV = Sheets("INPUTQ")
Set shtInputV = Sheets("INPUTPF")
lastColData = shtData.Cells(4, shtData.Columns.count).End(xlToLeft).Column
LastRowData = shtData.Cells(shtData.Rows.count, "A").End(xlUp).Row
lastRowInput = shtInput.Cells(shtInput.Rows.count, "A").End(xlUp).Row
'Search starting from which row?
StartSearch2 = InputBox("Vanaf welke rij wil je zoeken?", "Start", Default:=6)
'Loop Code
For r = StartSearch2 To LastRowData
For c = 2 To lastColData
count = 0
For i = 2 To lastRowInput
If shtInput.Cells.Find(What:=shtInput.Cells(i, 10).Value, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext) = shtData.Cells(r, 1).Value And _
shtInputI.Cells.Find(What:=shtInputI.Cells(r, 1).Value, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext) = shtData.Cells(r, 1).Value And _
shtInputIV.Cells(r, 1).Value = shtData.Cells(r, 1).Value And _
shtInputIII.Cells(r, 1).Value = shtData.Cells(r, 1).Value And _
shtInputII.Cells(r, 1).Value = shtData.Cells(r, 1).Value Then
If shtInput.Cells.Find(What:=shtInput.Cells(i, 32).Value, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext) = shtData.Cells(4, c).Value And _
shtInputI.Cells.Find(What:=shtInputI.Cells(4, c).Value, LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext) = shtData.Cells(4, c).Value And _
shtInputV.Cells(4, c).Value = shtData.Cells(4, c).Value And _
shtInputIV.Cells(4, c).Value = shtData.Cells(4, c).Value And _
shtInputIII.Cells(4, c).Value = shtData.Cells(4, c).Value And _
shtInputII.Cells(4, c).Value = shtData.Cells(4, c).Value Then
count = count + (shtInputI.Cells(r, c).Value + shtInputII.Cells(r, c)) * shtInputV.Cells(5, c).Value * shtInputIV.Cells(r, c).Value * shtInputIII.Cells(r, c).Value
End If
End If
Next i
shtData.Cells(r, c).Value = count
Next c
Next r
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.