2016-03-03 110 views
0

我正在处理一个具有生成子文件的宏操作的Excel文件。我被指示要做的是为某些领域创建选择列表。我在父文件中创建了一个新的参考表以容纳下拉值。然后我为这些列创建了命名范围。更改命名范围参考

的问题出现时,我执行子文件的导出操作。 “引用到”字符串更改为包含父文件的路径。我不希望这样,因为如果父母关闭,子文件中的选择列表功能会中断。

有没有办法阻止“是指”从通过出口过程中不断变化的字符串?收集所有选择列表信息的参考表格从父母到孩子复制。

我试过指细胞直接范围以及相同的结果:

如果主文件引用:=“外部参照” A2:A11 然后子文件指的是:=” [C:.... xlsm] Xref'!A2:A11

+1

类似'= INDIRECT(“'外部参照'!A2:A11“,1)'会做什么? –

+0

我看到了两种可能性:1)复制整个工作簿,然后创建孩子的任何东西,或者2)在新工作簿中查找并替换所有名称。 –

+0

Dirk,谢谢你摆脱我的头痛,因为不得不整天和这个问题混淆! 您的方法适用于两种参考案例。我结束了与命名的范围选项。我输入= INDIRECT(“'Xref'!A2:A11”)。 – BarryMahnly

回答

1

了解新工作簿是一个副本并包含所有名称,如原始文件,您只需运行一个For Each循环(在源代码工作簿中用作宏):

Dim xName As Variant, wb As Workbook 
Set wb = Workbooks("the child workbook") 
For Each xName In ThisWorkbook.Names 
    wb.Names(xName.Name).RefersToR1C1 = xName.RefersToR1C1 
Next 

如果不是所有的名字都存在,只需使用On Error Resume Next在循环:)

前如果您还有任何问题,只是问。

编辑 如果在新的WB存在不是所有的名字,那么这将是更好的/快(用作源工作簿宏):

Dim xName As Variant, wb As Workbook 
Set wb = Workbooks("the child workbook") 
For Each xName In wb.Names 
    xName.RefersToR1C1 = ThisWorkbook.Names(xName.Name).RefersToR1C1 
Next