2017-05-03 61 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) 
'                    ^^^^^^