我有一個包含許多工作表的工作簿,其中一個實質上是一個登錄表。每一行都有一個名稱單元格,其中有一個數據有效性下拉列表,引用一個單獨的工作表List Filler。相鄰的單元然後使用VLOOKUP,引用Name單元格,並獲取所需的值(ID,電話號碼等)。這工作得很好。強制相對圖紙參照?
我有一個宏將工作簿分成單獨的工作表。簡單的方法是將電子郵件發送給整個工作簿,而不是將其拆分並通過電子郵件發送登錄表單。爲了便於從登錄表單引用到列表填充程序,我將列表填寫表單複製到新的登錄表單工作簿中。
...
xWs.Copy
Application.ActiveWorkbook.SaveAs Filename:=xPath & "\" & xWs.Name & ".xlsm", FileFormat:=52
...
masterWB.Sheets("List Filler").Copy Before:=newWB.Sheets(1)
...
當我打開新的工作簿時,如預期的那樣,List Filler和Sign In Sheet都是可見的。但是,VLOOKUP引用和數據驗證源引用都指向了主簿:
數據驗證源改爲:
='[workbookname.xlsm]List Filler'!#REF!
VLOOKUP改爲:
=IFERROR(VLOOKUP(O14,'[workbookname.xlsm]List Filler'!A:M,12,FALSE),"")
所以VLOOKUP保持它的引用,但絕對引用了主工作簿中的List Filler表單。
基本上,我有2個問題。
1)VLOOKUP參考需要相對引用列表填充表,而不是在主工作簿中查找它。我可以用一個自定義函數來解決這個問題(我在別處怎麼做),但這裏的解決方法可能與(2)相同,這是使我癱瘓的原因。
2)數據有效性源引用HAS被定向到「本地」列表填充頁,而不是主工作簿中的原始頁。
任何幫助,將不勝感激。如果需要澄清,請告訴我,如果需要,我也很樂意提供更多的代碼片段。
謝謝!
編輯1: 只是要添加,我想保持列表填充引用「本地」,因爲登錄表最終將被移動/複製回主工作簿。登錄表將從主工作簿轉移到自己的工作簿,然後返回到主工作簿,同時需要訪問列表填充工作表,該工作表在任何工作簿登錄表中都會以列表填充符的形式存在。就像我們一樣$ A $ 1總是引用A1,我想做'$ List Filler',如果這是有道理的。
對於第二個問題,您可以對「[workbookname.xlsm]」進行查找替換並將其替換爲「」 – OpiesDad
對於第一個問題,我會在主工作簿中命名範圍,然後刪除新工作簿中的命名範圍,並在新工作簿中添加一個具有相同名稱的新範圍。然後在數據驗證中使用命名範圍,而不是列出單元格。我不知道這是否可行,但值得一試。 – OpiesDad
這可能會導致在執行副本時發出警告......類似於「您是否想使用初始工作簿中指定的範圍」,但您可能會禁止此警告並進行處理。 – OpiesDad