2017-02-16 60 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

相关问题