2017-08-17 96 views
-1

我有一個Vlookup VBA腳本,當我去運行它,給我一個編譯錯誤:下一個沒有For。我搜索了這個網站和其他人,發現類似的帖子,但似乎無法找到我的解決方案。VBA for vlookup給編譯錯誤

我的主要目標是在單元格T8:T50中VLookup帳單科目,並且如果範圍L8:L50爲空,則填寫該帳戶負責人的姓名。

Sub lookup() 
Dim r As Range 
Set r = Sheet1.Range("L8:L50") 

    If r = "" Then 
     Range("L8") = Application.WorksheetFunction.VLookup(Sheets("Sheet1").Range("T8:T50"), Sheets("Sheet3").Range("A:B"), 2, False) 
    End If 
    Next r 

End Sub 
+0

刪除'Next r' ... – Hackerman

+1

'Next'只有在與'For'一起使用時纔有意義。 – jmoon

+3

下一頁:VLOOKUP無法評估第一個參數時不可避免的1004錯誤,該錯誤不能是數組/範圍。 –

回答

2

For Each需要Next(其又不能與For EachFor使用)。您需要在列L中的單元格範圍內啓動一個循環。使用Application.Vlookup取而代之的原因是,它允許返回錯誤值而不會將其提升至過程,因此您可以使用IsError來檢查潛在的錯誤,並在工作表中放置一個佔位符值代替。

偏移功能說「在細胞中使用值8列到當前迭代r的右側」(這是在列L),因此,如果我的數學是正確的,L + 8 = T

Dim val, r As Range 
Dim lookupRange as Range, accountRange as Range 
Set lookupRange = Sheets("Sheet3").Range("A:B") 
Set accountRange = Sheets("Sheet1").Range("L8:L50") 
For Each r in accountRange.Cells 
    If r.Value = "" Then 
     val = Application.VLookup(r.Offset(0,8).Value, lookupRange, 2, False) 
     If IsError(val) Then 
      r.Value = "Error!" 
     Else 
      r.Value = val 
     End If 
    End If 
Next r 
+0

我得到一個編譯錯誤:變量未定義爲'r' – Emartin1863

+1

您是否定義了'r' 「暗淡」的陳述? –

+1

啊,我沒有。現在運行。非常感謝! – Emartin1863