2017-02-16 65 views
3

我來到這種類型的錯誤,直到現在不能解決它。當我在VBA中使用VLookUp函數時會發生這種情況。VLookUp到另一個打開工作簿錯誤

「無法獲取WorksheetFunction類的VLOOKUP財產」錯誤

這是我的完整代碼:

Dim wbSLW as Workbook 
Dim wbSLWDir as String 

wbSLWDir = "C\Documents\test.xlsx" 'not constant directory 
set wbSLW = Workbooks.Open(wbSLWDir) 

Thisworkbook.Activate 
With Thisworkbook.Sheets(1) 
    ' line Error 
    .Range("AE2").Formula = _ 
     WorksheetFunction.vlookUp(.Range("I2").Value, wbSLW.FullName & "Sheet3!E:F", 2, 0) 
End With 

能否請你幫我指點迷津?

+0

檢查了這一點:http://stackoverflow.com/questions/15658334/vba-vlookup-across-workbooks – Abhi

回答

2
Dim wbSLW As Workbook 
Dim wbSLWDir As String 

wbSLWDir = "C\Documents\test.xlsx" 'not constant directory 
Set wbSLW = Workbooks.Open(wbSLWDir) 

ThisWorkbook.Activate 
With ThisWorkbook.Sheets(1) 
    '''To get only the value 
    .Range("AE2").Value = _ 
     WorksheetFunction.VLookup(.Range("I2").Value, wbSLW.Sheets("Sheet3").Range("E:F"), 2, 0) 

    '''----OR----- 
    '''To insert the formula 

    ''' Syntax : .Formula = _ 
     "=VLOOKUP(Range-of-the-value-to-find" & _ 
        ",'Path[FileName.xl*]SheetName'!Range-of-Array-To-Search" & _ 
        ",Column-in-Array-to-output, FALSE)" 

    '''With a Range reference using .Address (btw If you change 0 to 1, you'll have a $) 
    .Range("AE2").Formula = _ 
     "=VLOOKUP(" & .Range("I2").Address(0,0) & ",'" & wbSLW.Path & "\[" & wbSLW.Name & "]" & "Sheet3'!E:F, 2, FALSE)" 

    '''Or directly with address of the Range 
    .Range("AE2").Formula = _ 
     "=VLOOKUP(I2,'" & wbSLW.Path & "\[" & wbSLW.Name & "]" & "Sheet3'!E:F, 2, FALSE)" 
End With 
+0

唯一獲得價值的作品,但插入時的公式,它不工作。謝謝。 – ramedju

+0

@ramedju:VBA或Excel中是否有錯誤?哪個錯誤? – R3uK

+0

在Excel中:'#NAME' – ramedju

1

我用VBA輸入公式它有助於實際上在Excel中輸入公式首先要確認它工作時發現。如果test.xlsx是開放的,然後在Sheet1 AE2你會

=VLOOKUP(I2,[test.xlsx]Sheet3!$E:$F, 2, 0) 

如果test.xlsx被關閉的公式將是:

=VLOOKUP(I2,'C:\Documents\[test.xlsx]Sheet3'!$E:$F, 2, 0) 

由於有公式,你可以簡單地內沒有雙引號複製並粘貼到你的代碼爲:

.Range("AE2").Formula = "=VLOOKUP(I2, [test.xlsx]Sheet3!$E:$F, 2, 0)" 

現在,我們需要改變查找範圍內引用您的wbSLW對象:

.Range("AE2").Formula = "=VLOOKUP(I2, [" & wbSLW.Name & "]Sheet3!$E:$F, 2, 0)" 

請注意,您不需要引用wbSLW.FullName或wbSLW.Path,因爲test.xlsx仍處於打開狀態。當您關閉test.xlsx時,Excel將插入路徑。

所以全碼:

Sub lookup() 

Dim wbSLW As Workbook 
Dim wbSLWDir As String 

    wbSLWDir = "C\Documents\test.xlsx" 'not constant directory 
    Set wbSLW = Workbooks.Open(wbSLWDir) 

    ThisWorkbook.Activate 
    With ThisWorkbook.Sheets(1) 
     .Range("AE2").Formula = "=VLOOKUP(I2,'[" & wbSLW.Name & "]Sheet3'!$E:$F, 2, 0)" 
    End With 
End Sub 
+0

不客氣! ;) – R3uK

相關問題