匹配函数错误excel vba

时间:2014-07-01 12:17:26

标签: excel vba excel-vba

嘿我正在尝试使用or语句执行一组条件,这些条件将决定函数是否执行Index(match)属性。但是当有一个带有myindex = 1的组合框(表单控件)时,它会正确执行代码,但也会出现错误,说“无法获取匹配属性......”有人可以帮忙吗?

Option Explicit
Dim ws As Sheets
Dim i As Integer, j As Integer, p As Integer, q As Integer
Dim myindex As Long, myitem As String


Public Function FEC(i, j)

 Set ws = Sheets(Array("S1 Fuel Consumption", "EF_Stat", "Summary"))
 myindex = ws(1).Shapes("Fuel " & j).ControlFormat.Value

 If myindex = 2 Or 3 Or 4 Then

   With Application.WorksheetFunction

     FEC = .Index(ws(2).Range("B2:D5"), .Match(ws(1).Range("A" & i), ws(2).Range("A2:A5"), 0), .Match(ws(1).Shapes("Fuel " & j).ControlFormat.List(ws(1).Shapes("Fuel " & j).ControlFormat.ListIndex), ws(2).Range("B1:D1"), 0))

   End With

     Else
        FEC = 0

 End If
 End Function

 Sub Xecute()
   Set ws = Sheets(Array("S1 Fuel Consumption", "EF_Stat", "Summary"))

 For i = 7 To 15 Step 4
    j = i - 6
     Do While j < i - 2
        ws(3).Range("D" & j).Value = FEC(i, j)
        j = j + 1
    Loop
 Next i

End Sub

1 个答案:

答案 0 :(得分:1)

您的代码调试起来非常复杂,因为在一行上发生了很多事情。我们无法分辨哪个部分导致了问题。所以我建议你把它分解出去,这样你才能看到发生了什么。

替换它:

With Application.WorksheetFunction
    FEC = .Index(ws(2).Range("B2:D5"), .Match(ws(1).Range("A" & i), ws(2).Range("A2:A5"), 0), .Match(ws(1).Shapes("Fuel " & j).ControlFormat.List(ws(1).Shapes("Fuel " & j).ControlFormat.ListIndex), ws(2).Range("B1:D1"), 0))
End With

有了这个:

With Application.WorksheetFunction

    Dim m1LookupValue As Variant
    Dim m2LookupValue As Variant
    Dim m1 As Variant
    Dim m2 As Variant

    m1LookupValue = ws(1).Range("A" & i)
    m2LookupValue = ws(1).Shapes("Fuel " & j).ControlFormat.List( _
                        ws(1).Shapes("Fuel " & j).ControlFormat.ListIndex)

    Debug.Print m1LookupValue
    Debug.Print m2LookupValue

    m1 = .Match(m1LookupValue, ws(2).Range("A2:A5"), 0)
    m2 = .Match(m2LookupValue, ws(2).Range("B1:D1"), 0)

    Debug.Print m1
    Debug.Print m2

    FEC = .Index(ws(2).Range("B2:D5"), m1, m2)

End With

现在您可以使用F8逐步执行代码。仔细查看查找值并确保它们在匹配函数的限制范围内。然后仔细查看m1和m2,以确保它们在索引函数的限制范围内。

使用此方法可以使代码更易于阅读,也更容易调试。您仍然会收到错误,但现在您可以确切地看到错误的位置。希望你能够自己修复它。如果没有,请告诉我问题的位置以及变量的价值。

另外请务必进行Loannis建议的更改:myindex = 2 Or myindex = 3 Or myindex = 4