こんばんは。
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も見ています
-
誕生日にもらった意外なもの
みなさんがもらった誕生日プレゼントで面白いものがあったらぜひ教えてください!
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
VBAでユーザーフォームの表示を確認
Visual Basic(VBA)
-
-
4
名前をつけて保存した後、元のファイルに戻るには
その他(コンピューター・テクノロジー)
-
5
ファイルを処理中に次の処理に移ってしまうようなのですが、、
Visual Basic(VBA)
-
6
VBA ユーザーフォームのChangeイベントを停止したい
Access(アクセス)
-
7
エクセルVBAが途中で止まります
Visual Basic(VBA)
-
8
VBA シートをコピー後、ボタンにマクロ登録
Excel(エクセル)
-
9
バックグラウンドのプロセスのエクセルを閉じる方法
Visual Basic(VBA)
-
10
ListView 項目の選択/選択解除について
Visual Basic(VBA)
-
11
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
12
ブック名、シート名を他のモジュールからも参照可能にする方法
Access(アクセス)
-
13
Excelのセルにユーザー名を表示する方法
Excel(エクセル)
-
14
《エクセルVBA》「他の人が該当ファイルを使用中の場合」の処理
Excel(エクセル)
-
15
【Excel VBA】マクロでExcel自体を終了させたい
Excel(エクセル)
-
16
VBAを一度起動するとずっと出てきます。
Access(アクセス)
-
17
メッセージボックスを前面に表示させるには?
Visual Basic(VBA)
-
18
マクロで、次のコードへ行く前に時間をおくにはどうしたらいいのでしょうか?
その他(Microsoft Office)
-
19
ExcelVBAで質問です。Workbook_openイベントが発生し
その他(Microsoft Office)
-
20
Excel VBA でExcelを終了したいのですが・・
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ワードで作成したものをCD-...
-
Excelファイルをダウロードして...
-
ファイルのコピー禁止の方法
-
文書がCDに保存できない
-
ファイル名に"con"は使えない?
-
ファイルアクセス権のエラーの...
-
起動してるソフトは終了してか...
-
Word 2010文書がデスクトップに...
-
CSVファイルの保存方法をお教え...
-
消えた「メモ帳」の中身
-
フロッピーへの保存方法
-
VBAでExcelの保存終了を取得したい
-
XPから98へファイルを書き...
-
メモ帳で上書きしてしまった
-
名前をつけて保存ができない…
-
エクセルの保存の仕方について
-
Microsoft Word 2007
-
Outlook2003のメッセージ保存方法
-
Word2003で作成した文書を2007...
-
解凍後の.zipファイルは消して...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ワードで作成したものをCD-...
-
文書がCDに保存できない
-
ワードのズーム変更が保存でき...
-
「DVDshrinkで吸い出し→isoの保...
-
ファイルアクセス権のエラーの...
-
Wordの文書ファイルの「名前を...
-
VBAでExcelの保存終了を取得したい
-
ワード別名保存で元の文書まで...
-
起動してるソフトは終了してか...
-
ファイルのコピー禁止の方法
-
メモ帳で上書きしてしまった
-
Word文書を同じ名前・同じ場所...
-
再生されるのに保存できないwmv...
-
ファイルを「名前を付けて保存...
-
Windows ZIPファイルを解凍して...
-
ファイル名に"con"は使えない?
-
フロッピーへの保存方法
-
Word 2010文書がデスクトップに...
-
Word2003で作成した文書を2007...
-
筆王の住所録を保存できない
おすすめ情報