[英]Match function error excel vba
嗨,我正在尝试使用or语句执行一组条件,这些条件将决定函数是否执行Index(match)属性。 但是,当有一个myindex = 1的combobox(表单控件)时,它可以正确执行代码,但还会显示一条错误消息“无法获取匹配属性。”有人可以帮忙吗?
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
您的代码调试起来非常复杂,因为一行上发生了太多事情。 我们无法确定是哪个部分导致了问题。 因此,我建议您进行分解,以便了解发生了什么。
替换为:
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单步执行代码。 仔细查看查找值,并确保它们在match函数的限制内。 然后仔细查看m1和m2,以确保它们在索引函数的范围内。
使用此方法可使代码更易于阅读和调试。 您仍然会收到错误,但是现在您可以确切地看到错误的位置。 希望您能够自己修复它。 如果没有,请告诉我问题出在哪里以及变量的值是多少。
另外,请确保进行Loannis建议的更改: myindex = 2 Or myindex = 3 Or myindex = 4
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.