2011-02-03 27 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 

を。

ここでは、シートの1つに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: 次のtryは=INDIRECT("Other_Sheet!"&CELL("address"))と他のシートのセルにアクセスすることでしたが、それはすべてのセルが同じ値が表示されますエクセル2007でバグを引き起こすようです。あなた自身のためにそれを試してください:)

私は同じブック内のテーブルを参照する対象ドキュメントのシートが必要です。どうすればいい?

私はこれを試してみてください、あまりにも

答えて

1

私の最後の必死の試みは、検索&を超えるすべて置換]を使用して[source.xls]を削除する数式。

同僚が使用して提案したときです:

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

を私が探していたまさに!

0

VBA以外のソリューションのための開いている:私はちょうど自分自身をそれを考え出し

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

関連する問題