2011-02-03 2 views
3

У меня есть документ 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 слишком

ответ

1

Я просто понял это сам:

Моя последняя отчаянная попытка с помощью Поиска & Заменить по всем формулы для удаления [source.xls].

Вот когда напарница предложил использовать:

wb.ChangeLink Name:=source.xls NewName:=wb.Name Type:=xlExcelLinks 

Именно то, что я искал!

0

Попробуйте это:

Sub CopyFormula() 
Dim R1,R2 As Range 

Set R1 = Workbooks("wb2.xls").Sheets(1).Range("A1") 
Set R2 = Workbooks("wb1.xls").Sheets(1).Range("A1") 

R1.Formula = R2.Formula 
End Sub 
+0

Хотя это может сработать, я боюсь, что это не будет хорошо масштабироваться. Мне нужно скопировать тысячи ячеек на 10 листов в несколько тысяч документов ... – chris

+0

@chris Диапазон может быть любым ... т.е. «A1: Z99» –

+0

А, это может ускорить работу! – chris

Смежные вопросы