我假設你希望表單/範圍的名稱在變量中,而不是硬編碼。就像它一樣,變量的名稱在字符串中間,但它將被視爲字符串,而不是包含字符串的變量。
我建議你做一些這樣的:
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"
並從那裏拿它。