2013-11-22 121 views
2

VBA在其他工作簿中插入VLOOKUP範圍,查找範圍。包含查找表的文件使用filename_AcctMgr = Application.GetOpenFilename(, , "Select Acct Mgr File", "Select")實現,然後打開文件。我們稱之爲工作簿2。VBA將VLOOKUP插入範圍,在其他工作簿中查找範圍

在工作簿1中,我將VLOOKUP公式添加到「F2」中,並在工作簿2列A:C中查找列「A」值。然後將公式複製到列「F」的所有行。

我無法找到在列A:C中正確引用workbook2範圍所需的語法。

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

任何人都可以提出正確的語法嗎?

回答

2

試試這個:

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行。

0

我假設你希望表單/範圍的名稱在變量中,而不是硬編碼。就像它一樣,變量的名稱在字符串中間,但它將被視爲字符串,而不是包含字符串的變量。

我建議你做一些這樣的:

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" 

並從那裏拿它。