【问题标题】:Find Function in Loop VBA在循环 VBA 中查找函数
【发布时间】:2018-11-23 14:59:19
【问题描述】:

我有以下 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

【问题讨论】:

  • 查找函数不会只返回shtInput.Cells(i, 10).Value吗?
  • 这个错误可能是因为它没有找到搜索词。

标签: excel vba loops find


【解决方案1】:

首先,至少有 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-12
    • 2016-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    • 1970-01-01
    相关资源
    最近更新 更多