2016-03-03 4 views
0

Я работаю с файлом Excel, который имеет операцию макроса, которая генерирует дочерний файл. То, что мне было поручено сделать, - создать списки выбора для некоторых полей. Я создал новый ссылочный лист в родительском файле для размещения в выпадающих значениях. Затем я создал именованные диапазоны для этих столбцов.Изменение номера именованного диапазона Ссылка

Проблема возникает при выполнении операции экспорта дочернего файла. Строка «Ссылка на» изменяется, включая путь к родительскому файлу. Я не хочу этого, потому что если родитель закрыт, функция списка выбора в дочернем файле прерывается.

Есть ли способ предотвратить замену строки «Отсылает» на процесс экспорта? Справочный лист, содержащий всю информацию списка выбора, копируется с родительского на дочерний.

Я пробовал со ссылкой на ячейку в диапазоне непосредственно, а с теми же результатами:

Если мастер-файл ссылается: = «Xref» A2: A11 Тогда ребенок файл ссылается на это: =» [C: .... xlsm] Xref '! A2: A11

+1

Как '= INDIRECT (" 'Xref '! A2: A11 ", 1)' будет? –

+0

Я вижу две возможности: 1) скопировать всю книгу и затем сделать все, чтобы создать ребенка, или 2) найти и заменить все имена в новой книге. –

+0

Dirk, спасибо, что избавился от моей головной боли от необходимости проделывать эту проблему весь день! Ваш метод работает в обоих случаях. Я закончил работу с параметром named range. Я ввел = 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 перед петлей :)

Если у вас остались вопросы, просто спросите.

EDIT если не все имена существуют в новом ВБ, то это будет лучше/быстрее (используется в качестве макроса в исходном-книги):

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