Excel VBA(エクセル マクロ) そのC ファイルのオープン、クローズ

外部Excelファイルのコピーの落とし穴。
コピーする場合はファイルを開いておかなければ為らない。。

前回では外部ファイルからコピーを試みた。

しかし、前回の方法を使用すると、外部ファイルを開いた状態でないとコピーされずエラーとなってしまう現象が判明した。

Workbooks("データ.xls").Worksheets("データ").Range("1:65536").Copy Worksheets("データまとめ").Range("A1")


そこで、ファイルを開く、閉じる動作を入れることとした。

'ファイルのオープン
Workbooks.Open Filename:=ChDir ThisWorkbook.Path & "\データ.xls", UpdateLinks:=0

'コピー、フィルタ
Workbooks("データ.xls").Worksheets("データ").Range("1:65536").Copy Worksheets("データまとめ").Range("A1")

'ファイルのクローズ
With Workbooks(データ.xls)
.Saved = True
.Close
End With


ChDir ThisWorkbook.Pathで現在実行中のExcelのフォルダを参照し、
Workbooks.Openでファイルをオープン。

この方式だとファイルが開けないときがあるのでChDirは使用しないこととした。
ThisWorkbook.Pathだと最後に「¥」が付かないので、このまま、「***.xls」と続けてしまうと、パスが正しく設定されずエラーとなる。

よって、

Workbooks.Open Filename:=ThisWorkbook.Path & "¥データ.xls", UpdateLinks:=0

とFilenameに直接パスを設定する。データ.xlsの前に「¥」をつける。


UpdateLinks:=0はリンクを更新せずに開く指定。
他のファイルはリンクを使用して作成され、リンク切れになっている物であるので、このように指定した。

With構文は

Workbooks(データ.xls).Savsd = True
Workbooks(データ.xls).Close

の2行を書くとみにくくなるし、Workbooks(データ.xls)を変更したとき全て書き直すのが面倒なので、

With Workbooks(データ.xls)として、
 .Savsd = True
 .Close
End With

とまとめた。

.Savsd = Trueはファイルを閉じる時、「セーブしますか」とダイアログが表示され一つのファイル毎に「OK」をクリックしなければ為らないため、強制的にSave状態にして、ダイアログを表示させないために書いている。

今度こそオートフィルタをかけよう!!
忍者Admaxのテキスト広告で収入UP!

実践!ExcelデータベースTOP