我假设您希望工作表/范围的名称位于变量中,而不是硬编码。实际上,您的字符串中间有变量的名称,但它将被视为字符串,而不是包含字符串的变量。
我建议您执行以下操作:
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"
然后从那里拿走。