У меня есть документ Excel 2007 с несколькими листами, назовем его source.xls
. Я бы хотел скопировать некоторые листы во все документы Excel внутри папки, скажем C:\some_folder
.копировать листы Excel со ссылками на таблицы
Я понял, как цикл по каталогу:
Dim file As String
file = dir("C:\some_folder\*.xlsx")
Do While file <> ""
Rem do_stuff
file = dir()
Loop
И как копировать листы между тетрадями:
For Each ws in ActiveWorkbook.Worksheets
Dim wb as Workbook
Set wb = Workbook.Open(file)
ws.Copy , wb.sheets(w.sheets.Count)
wb.Close SaveChanges:=True
Next ws
До сих пор так хорошо.
Теперь один из листов содержит таблицу с внешними данными с SQL Server. Копирование работает хорошо.
Другие листы ссылаются на данные в этой таблице как Table_MYSERVER_MYDB[[row][col]]
. Когда я скопировать его, ссылки автоматически превратились в source.xls!Table_MYSERVER_MYDB[[row][col]]
UPDATE: Я просто пытался ссылаться на данные в таблице с помощью листа и клетки, например, =Other_Sheet!A1
. По-прежнему та же проблема, ссылка магически превращается в =[source.xls]Other_Sheet!A1
.
UPDATE 2: Следующая попытка была к ячейкам в другой лист с =INDIRECT("Other_Sheet!"&CELL("address"))
, но это, кажется, чтобы вызвать ошибку в Excel 2007. Все клетки будут показывать одинаковое значение. Попробуйте сами:
Я хотел бы, чтобы листы в целевом документе ссылались на таблицу в той же книге. Как мне это сделать?
Я открыт для других решений, чем VBA слишком
Хотя это может сработать, я боюсь, что это не будет хорошо масштабироваться. Мне нужно скопировать тысячи ячеек на 10 листов в несколько тысяч документов ... – chris
@chris Диапазон может быть любым ... т.е. «A1: Z99» –
А, это может ускорить работу! – chris