我有一个包含许多工作表的工作簿,其中一个实质上是一个登录表。每一行都有一个名称单元格,其中有一个数据有效性下拉列表,引用一个单独的工作表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