2016-12-27 76 views
0

我想在循環中使用相對引用。我的目標是使用索引和匹配組合來查找獨立於文件中存在多少行和列的值。這是我迄今創建的,但它不起作用。數據存儲在兩張不同的紙上。VBA:循環中的相對單元格引用

Error msg: Run-time error '1004': 

無法獲取WorksheetFunction類的匹配性能

  1. 次測試()

    Dim ActSor As Long, ActOsz As Long 
    
    ActSor = ActiveSheet.UsedRange.Rows.Count 
    ActOsz = ActiveSheet.UsedRange.Columns.Count 
    
    Dim ws1 As Worksheet, ws2 As Worksheet 
    
    Set ws1 = Sheets("Sheet1") 
    Set ws2 = Sheets("Sheet2") 
    
    Dim Rg As Range 
    
    Set Rg = ws2.Range("B2", Cells(ActSor, ActOsz)) 
    
    Dim RgActOsz As Long 
    
    RgActOsz = Rg.Columns.Count 
    
    Dim i As Long , sor As Long 
    
    For i = 2 To RgActOsz 
        For sor = 2 To ActSor 
         Cells(sor, i).Value = Application.WorksheetFunction.Index(ws1.Columns(i), 
         Application.WorksheetFunction.Match(Cells(sor, 1), Rg.Columns(1), 0)) 
        Next sor 
    Next i 
    
    End Sub 
    
+2

如果您沒有成功匹配,您需要捕獲錯誤匹配 –

+0

感謝您的幫助。 2張是相同的,它只是爲了測試目的而創建的,這意味着所有的值都可以在兩張紙上找到。我是否也需要在這種情況下捕捉錯誤? –

+0

不是真的,只要你的代碼中有某個邏輯錯誤。在我的代碼中,無論如何我都會陷入困境,以防文本末尾有額外的空間,或者我可能已經做了其他一些錯誤 –

回答

1
Set Rg = ws2.Range("B2", Cells(ActSor, ActOsz)) 

這是被禁止的。正確語法:

Set Rg = Range(ws2.Range("B2"), ws2.Cells(ActSor, ActOsz)) 

這有幫助嗎?

+0

感謝您的幫助。不,還是一樣的錯誤味精。 –

0

每次使用Range()對象時,都會使用隱含的ActiveSheet.Range()命令。如果要從中提取值的工作表未處於活動狀態,則Range()命令將給出錯誤的結果。

我的建議:

  1. 所有符合條件Range()功能與適當的工作表對象,像ws1.Range()
  2. 選取帶有範圍的表格中左上角的單元格,然後使用Resize()命令擴展到表格。例如,要選取單元格A2和接下來的100行和20列,請使用ws1.Range("A2").Resize(100,20)
  3. 而不是使用也有隱式活動工作表的Cells()使用現有範圍並使用Offset()命令。要選擇一個表的行第20列從細胞A2使用Range("A2").Offset(i-1,0).Resize(1,20)
  4. 使用named ranges開始回升單元格引用,因爲它們與電池的舉動。例如Range("AccountsTable").Offset(i-1,0).Resize(1,20)
+0

感謝您的幫助@ Ja72用戶可以修改原始工作表 - 可以添加更多列 - 這就是爲什麼我不想使用偏移量或調整大小,因爲這樣我就需要每次修改代碼。是否有可能編寫使用vloopup或index&match的循環代碼 - 我知道errror陷印仍然缺失 - 它檢查列A中的值,然後返回列的值,並且如果有10列,它會帶回第10列值,如果有100,那麼第100列? –

+0

處理此問題的方法使用[命名範圍](https://support.office.com/en-us/article/Define-and-use-names-in-formulas-4d0f13ac-53b7-422e-afd2 -abd7ff379c64),這樣你永遠不會引用絕對位置,但總是相對的。我會編輯我的答案。 – ja72

+0

我會看看我是否可以這樣解決它。謝謝你的提示。 –

相關問題