
こんばんは。
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も見ています
-
ファイルを処理中に次の処理に移ってしまうようなのですが、、
Visual Basic(VBA)
-
Excelのセルにユーザー名を表示する方法
Excel(エクセル)
-
マクロで、次のコードへ行く前に時間をおくにはどうしたらいいのでしょうか?
その他(Microsoft Office)
-
-
4
アクセスVBAで既に開いているエクセルを閉じたい
Yahoo!ショッピング
-
5
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
6
Application.Runエラー(1004)
Excel(エクセル)
-
7
vba クリップボードクリアについて教えてください
その他(プログラミング・Web制作)
-
8
Access VBA [リモートサーバーがないか使用できる状態ではありません]
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Flash動画が再生されない
-
大学1年生のパソコン初心者なん...
-
保存した「一太郎12」の文書...
-
Outlook アドレス(連絡先)の...
-
文書がCDに保存できない
-
ワードで作成したものをCD-...
-
Excelファイルをダウロードして...
-
ワードのズーム変更が保存でき...
-
Wordの文書ファイルの「名前を...
-
解凍後の.zipファイルは消して...
-
Geek Uninstaller と Revo Unin...
-
ファイルを閉じても開いている...
-
【初心者です】izhというファイ...
-
ファイルを開くのが遅い。ただ...
-
VCSファイルをCSVファイル に変...
-
拡張子をtxtからdatに
-
“.vbs”のファイルが実行できない
-
LANの共有フォルダ内の実行ファ...
-
圧縮ファイルの解凍前と後の容...
-
先日ぬきたし2を購入したのです...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ワードで作成したものをCD-...
-
Wordの文書ファイルの「名前を...
-
ワードのズーム変更が保存でき...
-
文書がCDに保存できない
-
VBAでExcelの保存終了を取得したい
-
確定申告に利用する医療費明細...
-
ワード別名保存で元の文書まで...
-
Excelファイルをダウロードして...
-
Windows ZIPファイルを解凍して...
-
再生されるのに保存できないwmv...
-
ファイル名に"con"は使えない?
-
起動してるソフトは終了してか...
-
ファイルのコピー禁止の方法
-
ファイルアクセス権のエラーの...
-
●「遅延書き込みデータの紛失」...
-
「名前を付けて保存」が常に・・・
-
Live mail2011添付ファイル保存...
-
Word 2010文書がデスクトップに...
-
Windowsメールのアドレス帳保存...
-
Vistaへメールデーターを移植
おすすめ情報