[英]VBA Index Match Error
我目前有一個評分表,其中包含成行的行/列(產品名稱在左側,評分器在頂部,評分在此范圍內的每個單元格中)。 我想做的是在同一工作簿的另一張紙上僅創建其中一些行和列的導出/快照。
我正在嘗試找出最簡單的方法來刷新此工作表中每個單元格中的分數,到目前為止,已經達到了使用索引/匹配的目的。 我想對其進行編碼,以使此過程輕松/自動化。 理想情況下,我想匹配產品/列的名稱,以便可以更改導出表上的訂單,數量等。
我一直在嘗試這段代碼:
Sub KEY()
Dim Ratings As Range
Set Ratings = Worksheets("EXPORT").Range("B7:R33")
Dim iCell As Range
Worksheets("EXPORT").Activate
For Each iCell In ActiveSheet.Range("B7:R33")
iCell.Formula = Application.Index(Worksheets("Master Scores").Range(Cells.Find(iCell.Value).EntireColumn), Application.Match(Sheets("EXPORT").Range(Cells(iCell.Row, 1)), Sheets("Master Scores").Range("A1:A500")))
Next
End Sub
並收到“運行時錯誤'1004':應用程序定義的錯誤或對象定義的錯誤”
有人可以幫我這個忙嗎? 我以前從未嘗試使用代碼運行帶有VBA的公式。 我已經有一個常規的索引匹配項可以粘貼到每個單元格中,但是想要保留我創建的“ iCell”變量,以便在有意義的情況下按行/列名稱進行引用。
如果有更好的方法來完成我要完成的任務,請告訴我-到目前為止我還沒有找到。
99%的時間1004錯誤是因為您草率地定義了范圍對象。
請記住 ,每當您不將范圍對象限定為其父級Sheet
,編譯器將默認假定該范圍屬於ActiveSheet
。 當您試圖在另一個工作表上未定義范圍時嘗試在另一個工作表上定義范圍時,這尤其成問題。
例如:如果Sheet1處於活動狀態,則將引發錯誤:
Worksheets("Sheet2").Range(Cells(1,1),Cells(1,2))._ANY_METHOD_
您當然會將其作為潛在的錯誤:
Worksheets("Master Scores").Range(Cells.Find(iCell.Value).EntireColumn
這將引發錯誤,因為另一個工作表是通過以下方式激活的:
Worksheets("EXPORT").Activate
有兩種方法可以解決此問題:我不推薦的基本方法是單調乏味地跟蹤哪個工作表處於“活動”狀態並完全限定所有條件。 但這是一個麻煩,並導致草率,難以理解的代碼。 也可以看看:
解決此問題的另一種方法是適當地限定范圍。 對於簡單的情況,可以使用With塊:
With Worksheets("Master Scores")
iCell.Formula = .Range(.Cells.Find(iCell.Value)...
End With
但是,由於您至少有兩個不同的圖紙引用,因此將不可能。 你必須定義一個有資格的某一范圍的變量,並使用這些替代,你試圖做復雜的級聯。
Dim INDEX_ARRAY As Range
Dim INDEX_COLUMN As Range
Dim INDEX_ROW As Range
With Worksheets("Master Scores")
Set INDEX_ARRAY = .Range(.Cells.Find(iCell.Value).EntireColumn))
Set INDEX_COLUMN = .Range("A1:A500"))
End With
With Worksheets("EXPORT")
Set INDEX_ROW = .Range(.Cells(iCell.Row,1))
End WIth
然后您可以執行以下操作:
iCell.Formula = Application.Index(INDEX_ARRAY, INDEX_ROW, INDEX_COLUMN)
注意也
您正在公式字符串中使用.Find
方法和.Match
函數。 如果其中任何一個導致錯誤,則整個語句將出錯。 我建議您調試它們,考慮分別評估每個部分,檢查錯誤,然后僅在確保不會出錯的情況下為.Formula
構建字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.