强制相对表格参考?

时间:2016-04-22 19:34:42

标签: excel vba excel-vba

我有一个包含许多工作表的工作簿,其中一个基本上是一个登录表。每一行都有一个名称单元格,其中有一个数据验证下拉列表,该列表引用单独的表单列表填充程序。然后,相邻的小区使用VLOOKUP,引用名称单元格,并获取所需的值(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表。

基本上,我有两个问题。

1)VLOOKUP引用需要相对引用List Filler表,而不是在主工作簿中查找它。我可以用自定义函数解决这个问题(我在其他地方怎么做),但是这里的修复可能和(2)一样,这就是让我感到沮丧。

2)数据验证来源参考HAS指向" local"列出填充工作表,而不是主工作簿中的原始工作表。

对此的任何帮助将不胜感激。如果需要任何澄清,请告诉我,如果需要,我也很乐意提供更多代码段。

谢谢!

编辑1: 只是要添加,我想保留List Filler参考" local"因为登录表最终将被移动/复制回主工作簿。登录表将从主工作簿转到自己的工作簿,然后返回到主服务器,同时需要访问列表填充工作表,这将始终作为列表填充程序存在于任何工作簿登录工作表中。就像我们一样$ A $ 1总是参考A1,我想做' $ List Filler',如果这是有道理的。

2 个答案:

答案 0 :(得分:0)

代表@OpiesDad

发帖

而不是将范围引用为:

'List Filler'!A:M

或类似的东西,定义一个命名范围,只要引用存在于本地,如问题中所述,它将阻止引用外部工作簿。

最好有一个动态命名范围,只需在所需范围内插入一个表格,然后根据表格的参考文献命名,例如

Tablename[[SomeVar:AnotherVar]]

这允许您将条目添加到数据验证列表,而不会冒空白或遗漏数据的风险。

答案 1 :(得分:0)

一个想法是替换新工作簿中的链接。所以它可以工作,必须保存新的工作簿。如果工作簿已保存,您可以说它已保存。

    masterWB.Sheets("List Filler").Copy Before:=newWB.Sheets(1)
    ...
    newWB.Saved = True
    newWB.ChangeLink Name:=masterWB.Name, NewName:=newWB.Name, Type:=xlExcelLinks
    newWB.Saved = False

在Excel2013上它对我很好。