在VBA错误中匹配索引

我正在尝试使用索引和匹配工作表函数将用户窗体(ItemNum.value)中combobox的项目编号与工作表上的产品列表(“产品定价”)进行匹配。 然后从该工作表(“产品定价”)中拉出匹配相同行的单元格,并将其复制到input数据工作表(“查看照明数据”)上的单元格(“i4”)。 问题是我每次运行macros它给我错误“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 

我已经将项目编号input到combobox(itemnum)中,没有空格或任何东西。 我甚至尝试删除“每个数字周围的标记,但这也不起作用。我已经尝试输出(MatchRow)到一个MsgBox试图捕捉错误,但它之前打破。

问题是当Match在范围中没有find值时,它返回错误。 你可以使用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 

一个好的做法是适当地限定一切。 这使代码更易于阅读和debugging。 此外,你必须使用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和我也处理类似。

好吧,尝试了一堆不同的方式来获得匹配索引在用户表单中工作,我决定“作弊”一点,只是在单元格中使用常规匹配索引function。 非常感谢你的帮助!