VBA将函数VLOOKUP插入范围,在其他工作簿中查找范围



VBA将函数VLOOKUP插入范围,在其他工作簿中查找范围。包含查找表的文件是使用filename_AcctMgr = Application.GetOpenFilename(, , "Select Acct Mgr File", "Select")实现的,然后打开该文件。让我们称之为工作簿2。

在工作簿1中,我将VLOOKUP公式添加到"F2"中,并在工作簿2中的A:C列中查找"A"列的值。I然后将公式复制到列"F"的所有行。

在A:C列中找不到正确引用工作簿2范围所需的语法。

ActiveCell.Formula = _
    "=VLOOKUP(activecell.offset(0,-5).address,'ws.name'!A:C,3,FALSE)"

有人能建议正确的语法吗?

试试这个:

Range("F2").Resize(10).Formula = "=VLOOKUP(A2,[Book2]Sheet1!$A:$C,3,FALSE)"

Range("F2:F10").Formula = "=VLOOKUP(A2,[Book2]Sheet1!$A:$C,3,FALSE)"

编辑:对不起,我忘记了关于文件名作为变量的文章:

Dim MyFile As String
Dim vSplit As Variant
Dim iCnt As Integer
MyFile = Application.GetOpenFilename(, , "Select Acct Mgr File", "Select")
vSplit = Split(MyFile, "")
iCnt = UBound(vSplit)
vSplit(iCnt) = "[" & vSplit(iCnt) & "]"
MyFile = Join(vSplit, "")
Range("F2:F10").Formula = "=VLOOKUP(A2,'" & MyFile & "Sheet1'!$A:$C,3,FALSE)"    

您需要添加错误处理,以防有人单击"取消"。此外,我怀疑您是否希望将公式添加到f列的所有行中,因此只需定义所需的范围即可。我的例子是第2行到第10行。

我假设您希望工作表/范围的名称在变量中,而不是硬编码。实际上,变量的名称位于字符串的中间,但它将被视为字符串,而不是包含字符串的变量。

我建议你做以下事情:

Dim sheetName, lookupFrom, myRange           ' always declare your variables
sheetName = "This is the sheet name"         ' note I added some spaces to make it challenging
lookupFrom = ActiveCell.Offset(0, -5).address
myRange = "'" & sheetName & "'!A:C"          ' putting quotes around the string so it's always valid
ActiveCell.Formula = "=VLOOKUP(" & lookupFrom & "," & myRange & ", 3, FALSE)"

你当然可以一次完成这一切——看起来会很混乱:

ActiveCell.Formula = "=VLOOKUP(" & ActiveCell.Offset(0, -5).Address & ", '" & sheetName & "'!A:C, 3, TRUE)"

请注意,sheetName当然可以包含其他工作簿的名称,但您需要工作簿的名称和工作表。。。所以

sheetName = "[Book2]Sheet1"

那就好了。

在您的示例中,您使用了ws.name(没有正确的引号),但这不会给您完整的路径,因为您需要工作簿和工作表名称来确保引用正确的数据。最好明确一点——如果Excel能对你想要的东西做出错误的假设,它会的——你会挠头。。。

由于您实际显示您已经打开了这本书,因此您在变量filename_AcctMgr中有了文件(工作簿)的名称。然后你应该能够使用:

sheetName = "[" & filename_acctMgr & "]Sheet1"

然后从那里拿走。

最新更新