
こんばんは。
Accessから、Excelへデータを渡し、保存をして終了というものを作っています。
*************Access側
Set Excel = New Excel.Application
Set book = Excel.Workbooks.Open("c:\Sample.xls") '一時的にデータをためるExcelファイル
Set Sheet = book.Worksheets(1)
・・・・・データを吐き出し、書式を変更する処理・・・・・
Excel.Run book.Name & "!Macro_Go" 'Sample.xlsからAドライブのExcelファイルへシートコピー
book.Save
Excel.Quit
*************************
Access側でExcelファイルのマクロを操作し、Excelのファイルは、Aドライブ(フロッピー)へ保存することとなります。
保存の際に、非常に時間がかかり、完了時にメッセージを出したいのですが、
保存が完了する前に、完了メッセージが出てしまいます。
そこで、Excelで保存が完了したという状態を取得できないかと考えています。
どういう方法を使えば、Excelの保存完了状態を取得できますでしょうか?
No.2ベストアンサー
- 回答日時:
こんばんは。
>>で、保存して終了で、解放されます。解放されれば、完了したことが確認できます。
>ここでいう解放とは、プログラム上で、どう取得するのでしょうか?
実際にやってみると分かるのですが、
Book.Save '保存している最中は、ここの部分はそのまま
Book.Close 'ブックを閉じる
'*
というように、時系列(上から順に)でマクロが動いているわけです。
つまり、私は、それをまとめて、
Book.Close True 'と保存と、終了を同時にしてしまうのです。
'*
つまり、だいたいのマクロの命令というのは、時系列でひとつずつ行われていくわけで、
例えば、* の部分に、
MsgBox "終了", vbInformation
などすれば、その終了と、ブックが解放されたことが分かるわけです。
>保存が完了する前に、完了メッセージが出てしまいます。
たぶん、これは、保存は、[メモリ]-> [物理的な媒体]に、別に動いているようですね。
メモリが残っていて、それが働いているので、マクロは素通り出来るのだと思います。
それで、元の質問文のマクロに戻ってみてみると、
book.Save 'メモリ -> 物理的媒体
'この間がない
Excel.Quit
'ここで、ロジック自体をみると、Book のオブジェクトは解放されていないのです。
'もちろん、実体はもうありません。
これでも、間違いはないのですが、一旦、ブックをClose してあげるというのが一般的のようです。本当かどうか、ちょっと試してみてください。私は、今回、慣例的なプロシージャの書き方を説明していますので、逆にイレギュラーな方法を試していません。
それと、最後ですが、
多くのVBA教科書をみると、
最初に、オブジェクトを設定したら、
>Set Excel = New Excel.Application
>Set book = Excel.Workbooks.Open("c:\Sample.xls") '一時的にデータをためるExcelファイル
>Set Sheet = book.Worksheets(1)
としたものは、全てが終わった後に、
Set Sheet = Nothing
Set book = Nothing
Set Excel = Nothing
とオブジェクトをナシ(Nothing)にしています。これは、決まった方法ではないのですが、通例のような気がします。この種のマクロを作ったときには、必ず、Windows タスクマネージャー(Ctrl + Alt + Del) でプロセスが残っているかどうか確認してみてください。残っている場合は、本当の解放はされていないことになっています。
お礼が遅くなり申し訳ありません。
結局、結果として、処理のフロー自体を変えて対応しました。
Wendy02さんに教えていただいたので、
>つまり、だいたいのマクロの命令というのは、時系列でひとつずつ行われていくわけで、
>例えば、* の部分に、
>MsgBox "終了", vbInformation
>
>などすれば、その終了と、ブックが解放されたことが分かるわけです。
という処理も記述してみましたが、処理が終了する前にMsgBoxが出てしまうという結果でした。
今後は、個人的なタスクとして追っかけて行きたいと考えています。
ありがとうございました。
No.1
- 回答日時:
こんばんは。
>どういう方法を使えば、Excelの保存完了状態を取得できますでしょうか?
Book.Save
Book.Close
Excel.Quit
で、保存して終了で、解放されます。解放されれば、完了したことが確認できます。
(※ Set Excel = New Excel.Application :;;;本来は、変数名はExApp とかしたほうがよいです。)
しかし、以下の場合は、
>Access側でExcelファイルのマクロを操作し、Excelのファイルは、Aドライブ(フロッピー)へ保存することとなります。
>保存の際に、非常に時間がかかり、完了時にメッセージを出したいのですが、
>Excel.Run book.Name & "!Macro_Go" 'Sample.xlsからAドライブのExcelファイルへシートコピー
ここの中身がどうなっているかは分かりませんが、HDDの中で処理をしておいて、それを、
Set objFso = CreateObject("Scripting.FilesystemObject")
objFso.Copyfile コピー元, "A:\" &Book.Name
Set objFso = Nothing
としたほうが速いです。または、Shell で、コマンドプロンプトのCopyで、A:\にファイルを送ってしまうほうがよいです。ExcelのApplicationで、コピーしたり保存したりすると、FDDですと、かなり遅くなります。
Wendy02さん、ご回答ありがとうございます。
>で、保存して終了で、解放されます。解放されれば、完了したことが確認できます。
ここでいう解放とは、プログラム上で、どう取得するのでしょうか?
>(※ Set Excel = New Excel.Application :;;;本来は、変数名はExApp とかしたほうがよいです。)
命名ルールは、全く考えていませんでした。
この辺りも、意識するようにしてみます。
ソースもありがとうございます。試してみます。
HDDで処理したほうが早いですよね。気付けませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
ファイルを処理中に次の処理に移ってしまうようなのですが、、
Visual Basic(VBA)
-
VBA プロシージャの名前の取得
その他(Microsoft Office)
-
-
4
マクロで、次のコードへ行く前に時間をおくにはどうしたらいいのでしょうか?
その他(Microsoft Office)
-
5
エクセルVBAでUserFormを起動した時
Excel(エクセル)
-
6
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
7
アクセスVBAで既に開いているエクセルを閉じたい
Yahoo!ショッピング
-
8
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
-
9
vba クリップボードクリアについて教えてください
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Word文書を同じ名前・同じ場所...
-
word2003 文書保存時のトラブル
-
解凍後の.zipファイルは消して...
-
CドライブのAPSETUPフォルダは...
-
保存したcsvがエクセルにな...
-
パソコン内の全ファイル数を調...
-
よく分からない
-
VBA「別のプログラムでOLEの操...
-
「開く」ダイアログなどでのフ...
-
XLMファイルをメモ帳で開く...
-
Geek Uninstaller と Revo Unin...
-
リアルプレイヤー→メディアプレ...
-
誤ってAdobe ReaderでZIPファ...
-
エクセルファイルをショートカ...
-
4.7GB以上のデータをDVDに書き...
-
HL-DT-ST DVDRAM GH24NS50 のド...
-
PC-9821Na12のWindows 95再イン...
-
誤って変更した拡張子を元に戻...
-
Excelで「同じ名前のファイルが...
-
pikazipでrarファイルのパスワ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ワードで作成したものをCD-...
-
Wordの文書ファイルの「名前を...
-
ファイルのコピー禁止の方法
-
文書がCDに保存できない
-
VBAでExcelの保存終了を取得したい
-
ワード別名保存で元の文書まで...
-
Windows ZIPファイルを解凍して...
-
ワードのズーム変更が保存でき...
-
ファイルアクセス権のエラーの...
-
Word文書を同じ名前・同じ場所...
-
PC初心者です
-
youtubeの映像を
-
word2010と2007の互換性について
-
ワード・エクセルのファイル保...
-
【エクセル】
-
エクセルの保存の仕方について
-
フロッピィの内容が…
-
Wordで、保存や上書きができな...
-
Jw_cad Ver. 5.00e 「DXF形式で...
-
起動してるソフトは終了してか...
おすすめ情報