2017-05-03 60 views
2

我有一個收到「對象不支持該屬性或方法錯誤下面的線,但我沒有看到任何問題。Run0time錯誤「438」

Dim compliance As Worksheet 
Dim report As Worksheet 
Dim completeList As Worksheet 

Sub getcompliance() 
    Dim i As Long 
    Dim n As Long 
    Dim Source As String 
    Set compliance = ActiveWorkbook.Worksheets("Compliance") 
    Set report = ActiveWorkbook.Worksheets("Report") 
    For i = 3 To report.UsedRange.Rows.Count 
     For n = 2 To compliance.UsedRange.Rows.Count 
     report(i, 19) = Application.WorksheetFunction.VLookup(report("i, 3"), compliance("A1:AC2400"), 29, False) 
     Next n 
    Next i 
End Sub 
+0

謝謝,當然我意識到缺少細胞和範圍後,我的文章,但附加信息確實幫助。然而,它現在運行,但當我知道值在那裏時,我得到一個#N/A值。 –

+0

是否有類型問題,例如一個工作表包含作爲數字的值,另一個工作表將其作爲文本包含它? – YowE3K

回答

3

你行說

report(i, 19) = Application.WorksheetFunction.VLookup(report("i, 3"), compliance("A1:AC2400"), 29, False) 

或許應該說

report.Cells(i, 19) = Application.WorksheetFunction.VLookup(report.Cells(i, 3), compliance.Range("A1:AC2400"), 29, False) 

但是,如果是這樣,你爲什麼這樣做,在For n循環?

也許你的意思是你的代碼是:

Dim compliance As Worksheet 
Dim report As Worksheet 
Dim completeList As Worksheet 

Sub getcompliance() 
    Dim i As Long 
    Set compliance = ActiveWorkbook.Worksheets("Compliance") 
    Set report = ActiveWorkbook.Worksheets("Report") 
    For i = 3 To report.UsedRange.Rows.Count 
     report.Cells(i, 19) = Application.WorksheetFunction.VLookup(report.Cells(i, 3), compliance.Range("A1:AC" & compliance.UsedRange.Rows.Count), 29, False) 
     'Or, simply using the full columns: 
     'report.Cells(i, 19) = Application.WorksheetFunction.VLookup(report.Cells(i, 3), compliance.Range("A:AC"), 29, False) 
    Next i 
End Sub 
+0

我可能只是使用'compliance.Range(「A:AC」)'。使用完整列引用作爲vlookup的查找範圍無論是在工作表上還是在VBA中,似乎都沒有顯着的損害。然而,我*會使用'Application.VLookup'而不是'Application.WorksheetFunction.VLookup'或使用'application.match'來檢索行號,然後'單元格(#from match,29)'。 – Jeeped

+0

我通常會自己使用「A:AC」,但是我正在設法解決如何在代碼中加入'n',所以我只能假設他們認爲他們可以用它來限制VLookup中的行。至於'Application.VLookup'' Application.WorksheetFunction.VLookup'',我認爲我在最近的回答中使用了'Application.VLookup',另一個更「高級」(即更高的rep)回答者指出它更好使用早期綁定而不是後期綁定。我贏不了! :D – YowE3K

+0

我不得不具體檢查一下vlookup,但是你可以將'application.match'傳回一個變體,然後用IsError測試變體。你不能用'Application.WorksheetFunction.Match'做同樣的事情(所以我從不使用它)。 – Jeeped

2
'  vvvvv           vvvvvvvvvvvvv 
report.Cells(i, 19) = WorksheetFunction.VLookup(report.Cells(i, 3), compliance.Range("A1:AC2400"), 29, False) 
'                    ^^^^^^