質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

3回答

16485閲覧

AccessのVBAでExcelファイル操作を行った際のクローズについて

syncrock

総合スコア209

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2016/01/20 00:36

現在Accessで以下のことを行おうとしております。
1.既存のExcelファイルをコピーする。
2.コピーしたエクセルファイルにセル指定で値を入力する。
3.プロセスが残らないようにクローズを行う。

正常に処理が終わればやりたいことが出来るようにロジックは組めていますが、
指定したセルに値を入力している時に以上終了した場合にExcelをクローズ出来ずに困っております。
クローズ出来ないというのは、デバッグをするとクローズを行う箇所にはいくのですが、そこから全然進まなくなります。
どうにかして、異常終了時にプロセスが残らないようにクローズをしたいのですが、良い方法ありませんでしょうか。

色々と端折っている部分(objectの解放とか)はありますが、以下のようなロジックです。

vb

1On Error GoTo Error 2 3Set fileOperation = CreateObject("Scripting.FileSystemObject") 4fileOperation.CopyFile "コピー元ファイルのパス", "コピーするファイルのパス" 5 6Set excelObj = CreateObject("Excel.Application") 7Set copyExcel = excelObj.workbooks.Open("コピーしたファイルのパス") 8' ワークブックの指定 9Set inputSheet = copyExcel.Worksheets("シート1") 10 11' 転記 12inputSheet.cells(1, 1).Value = "何か文字列" 13inputSheet.cells(2, 2).Value = "何か文字列" 'このあたりで異常終了するとする(移送する文字列が数値変換でエラーになるとか) 14inputSheet.cells(3, 3).Value = "何か文字列" 15inputSheet.cells(4, 4).Value = "何か文字列" 16 17' 終了処理 18copyExcel.Save 19copyExcel.Close 20excelObj.Quit 21 22Error: 23 24copyExcel.Close '異常終了時にここまで来るがこの処理が終わらず進まない 25excelObj.Quit 26コード

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

VBA

1copyExcel.Close '異常終了時にここまで来るがこの処理が終わらず進まない

ここで、ファイル保存のダイアログが出ているのかもしれません。
「'XXXXX.xlsm' の変更内容を保存しますか?」というやつです。

copyExcel.Closeの前に

VBA

1copyExcel.Saved = True

を入れて、保存済み扱いにしてみるとどうでしょうか。

投稿2016/01/20 02:09

alg

総合スコア2019

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

alg

2016/01/20 02:10

あれ、解決済みでしたか。 失礼しました。
guest

0

自己解決

すいません、簡単に解決してしまいました。
結果、質問内容にも書いたエラー処理「copyExcel.Close」の前に、
「copyExcel.Save」で一旦保存するとクローズ処理がすんなり通りました。
なのでプロセスも残ることもありませんでした。
お騒がせいたしました。

投稿2016/01/20 01:37

syncrock

総合スコア209

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

On Error等を使用して例外処理をしてみてはいかがでしょうか?
例外(エラー)が発生する処理の部分にOn Errorを記述する感じです。

投稿2016/01/20 00:38

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

syncrock

2016/01/20 00:53

一応上記にもロジック例を記載していますが、On Errorで例外に飛ばして、 飛ばした上でクローズしようとしています。 ただ、入力中に(?)エラーになった場合はうまくクローズ出来ません。 (質問内容の通り、クローズの箇所から処理が進まない)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問