簡體   English   中英

匹配VBA錯誤中的索引

[英]Match Index in VBA error

我正在嘗試使用索引和匹配工作表函數將項目編號從用戶表單中的組合框(ItemNum.value)與工作表上的產品列表表(“產品定價”)相匹配。 然后拉出與該工作表中相同行匹配的單元格(“產品定價”),並將它們復制到輸入數據工作表上的單元格(“i4”)(“查看照明數據”)。 問題是每次我運行宏它給我錯誤“1004無法獲取WorksheetFunction類錯誤的匹配屬性”

我的代碼是:

Private Sub InputLight_Click()
With Sheets("Review Lighting Data")
    .Range("i4").Value = Application.WorksheetFunction.Index(Sheets("Product Pricing").Range("c7:c102"), Application.WorksheetFunction.Match(ItemNum.Value, Sheets("Product Pricing").Range("b7:b102"), 0))
End With
End Sub

我已經嘗試開始一個新的工作簿,試圖簡化一些事情。 到目前為止,這是我的完整代碼:

Private Sub inputbutton_Click()
Dim MatchRow As Long
Dim WS0 As Worksheet, WS1 As Worksheet
Dim R0 As Range, R1 As Range
With ThisWorkbook
    Set WS0 = .Sheets("Review Lighting Data")
    Set WS1 = .Sheets("Product Pricing")
End With
With WS1
    Set R0 = WS1.Range("B7:B11")
    Set R1 = WS1.Range("C7:C11")
End With
MatchRow = Application.Match(itemnum.Value, R0, 0)
MsgBox MatchRow

End Sub


Private Sub UserForm_Initialize()

With Me.itemnum
.AddItem "1001"
.AddItem "1002"
.AddItem "1003"
.AddItem "1004"
.AddItem "1005"
End With

End Sub

我已將項目編號輸入組合框(itemnum),沒有任何空格或任何內容。 我甚至嘗試刪除“每個數字周圍的標記,但這也不起作用。我已經嘗試輸出(MatchRow)到MsgBox中試圖捕獲錯誤但它在它之前中斷。

問題是當Match未在范圍內找到值時,它會返回錯誤。 您可以使用IsError處理這種情況:

Private Sub InputLight_Click()
    Dim matchRes

    With Sheets("Review Lighting Data")
        matchRes = Application.Match(ItemNum.Value, Sheets("Product Pricing").Range("b7:b102"), 0)
        If Not IsError(matchRes) Then
            .Range("i4").Value = Application.Index(Sheets("Product Pricing").Range("c7:c102"), matchRes)
        End If
    End With
End Sub

一個好的做法是正確地確定一切。 這使代碼更易於閱讀和調試。 此外,您必須使用Application.Match而不是Application.WorksheetFunction...

Private Sub InputLight_Click()
    Dim MatchRow
    Dim WS0 As Worksheet, WS1 As Worksheet
    Dim R0 As Range, R1 As Range
    With ThisWorkbook
        Set WS0 = .Sheets("Review Lighting Data")
        Set WS1 = .Sheets("Product Pricing")
    End With
    With WS1
        Set R0 = .Range("B7:B102")
        Set R1 = .Range("C7:C102")
    End With
    MatchRow = Application.Match(ItemNum.Value, R0, 0)
    If Not IsError(MatchRow) Then
        WS0.Range("I4").Value = Application.Index(R1, MatchRow)
    End If
End Sub

一個非常類似的問題在這里找到: 匹配不工作Excel:錯誤1004無法獲得匹配屬性 ,其中@simoco和我也同樣處理它。

好吧,在嘗試了一系列不同的方法讓匹配索引在userform中工作后,我決定“欺騙”一點,只是在單元格中使用常規匹配索引函數。 非常感謝你的幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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