簡體   English   中英

匹配函數錯誤Excel VBA

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM