こんばんは。
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Excel(エクセル) Excelのマクロについてご教授ください 2 2023/02/25 09:43
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
- Visual Basic(VBA) 【VBA】Excelの特定範囲のセルを画像で保存したい 2 2023/01/25 13:06
- PowerPoint(パワーポイント) エクセルのマクロについて教えてください。 1 2022/03/25 17:03
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/21 13:29
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Excel(エクセル) マクロの付いたExcelが開けません 3 2023/02/01 10:54
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
このQ&Aを見た人はこんなQ&Aも見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
ファイルを処理中に次の処理に移ってしまうようなのですが、、
Visual Basic(VBA)
-
マクロで、次のコードへ行く前に時間をおくにはどうしたらいいのでしょうか?
その他(Microsoft Office)
-
アクセスVBAで既に開いているエクセルを閉じたい
Yahoo!ショッピング
-
-
4
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
5
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
6
Application.ScreenUpdating = Falseが効きません
Visual Basic(VBA)
-
7
特定のPCだけ動作しないVBAマクロがあります。その理由は?
Visual Basic(VBA)
-
8
VBA シートをコピーする際に Copyメソッドは失敗しましたのエラーが出てしまいます
Visual Basic(VBA)
-
9
VBAでの Replace関数で、ワイルドカードは使えないのでしょうか?
Visual Basic(VBA)
-
10
DATE型変数を初期化する方法
Visual Basic(VBA)
-
11
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
12
エクセルVBAで作成した別ブックにVBAを記述したい
Access(アクセス)
-
13
Excelファイルのマクロによる排他制御
Excel(エクセル)
-
14
VB6でのファイルコピーの終了検知について
Visual Basic(VBA)
-
15
EXCELのVBAで作業ファイルを閉じてもメモリの解放をしなくて困っています
Excel(エクセル)
-
16
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
17
《エクセルVBA》「他の人が該当ファイルを使用中の場合」の処理
Excel(エクセル)
-
18
アクセスのフィールド表示を2段にする方法・抽出の方法
Access(アクセス)
-
19
ExcelVBAで質問です。Workbook_openイベントが発生し
その他(Microsoft Office)
-
20
ACCESSからexcelブックを開いて保存したい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ワードで作成したものをCD-...
-
ワードのズーム変更が保存でき...
-
ファイルのコピー禁止の方法
-
文書がCDに保存できない
-
ワード別名保存で元の文書まで...
-
ファイルアクセス権のエラーの...
-
Wordの文書ファイルの「名前を...
-
ワード2003。読み取り専用でな...
-
●「遅延書き込みデータの紛失」...
-
VBAでExcelの保存終了を取得したい
-
Windows ZIPファイルを解凍して...
-
スクリプトでエラーが発生
-
「DVDshrinkで吸い出し→isoの保...
-
解凍後の.zipファイルは消して...
-
ワードのデータをUSBに保存した...
-
LOL Replayで試合を再生しよう...
-
Excelで「同じ名前のファイルが...
-
拡張子をtxtからdatに
-
エクセルのVBAでクリップボード...
-
誤ってAdobe ReaderでZIPファ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ワードで作成したものをCD-...
-
確定申告に利用する医療費明細...
-
文書がCDに保存できない
-
ワード2003。読み取り専用でな...
-
ファイルアクセス権のエラーの...
-
起動してるソフトは終了してか...
-
ワードのズーム変更が保存でき...
-
Wordの文書ファイルの「名前を...
-
VBAでExcelの保存終了を取得したい
-
ファイルのコピー禁止の方法
-
Windows ZIPファイルを解凍して...
-
Excelファイルをダウロードして...
-
ワード別名保存で元の文書まで...
-
ファイルの中の更新日時が変わ...
-
Word 2010文書がデスクトップに...
-
リモートデスクトップの履歴を...
-
「名前を付けて保存」が常に・・・
-
●「遅延書き込みデータの紛失」...
-
「DVDshrinkで吸い出し→isoの保...
-
フロッピーが、書き込み禁止に...
おすすめ情報