以前、下記の質問をさせていただいた者です。
教えていただいた方法を実行中に、別の問題が発生したため
新規に質問スレを立てさせていただきました。
バッチ処理をすると(Accessの)ldbが残ってしまいます
⇒ http://okwave.jp/qa5148407.html
-------------------------------------------------------------------
OLE又はDDEを使うVISUAL BESICモジュールを実行している時は
モジュールの実行を中断する必要があります
-------------------------------------------------------------------
というエラーメッセージが表示されてしまいます。
(1)AccessのMDBファイルを直接叩く
→ AoutExecで起動~作成~終了まで動作し、問題なく終了しました。
(2)元ネタのコピー~AccessのMDB起動までを含むBatファイルを叩く
→ 「OLE又はDDEを使うVISUAL BESICモジュールを実行している時は
モジュールの実行を中断する必要があります」
と表示され途中で止まりました。
(2)の症状の場合
・新規にMDBを作成しデーブル等をインポートし直す
・最適化する
などの方法があるようですが…。
(1)ではエラーメッセージが表示されることもなく
終了できているので原因が不明です。
モジュールで途中停止することがなくなれば
先に質問させていただいた「ldbが残ってしまう」問題も
解決できそうな気がします。
゜。.o。─* 補足 *─。o.゜。─**─゜。.o。─**─。o.゜。
●前提
Accessバージョン: MS Access 2003
サーバのOS: Windows Sever 2003 R2
MDBファイルについて
サイズ: 2,772KB
最適化: 閉じるときに最適化(ツール→オプションで設定済)
-----
●前回の質問と変更した点
1.バッチファイル内の処理順番
<変更前>
(1)別サーバからAccessで使うデータをコピーする
(2)Accessを起動し、ファイル読込→CSV出力 という一連の処理をする
(3)出力されたCSVファイルをバックアップフォルダにコピー&リネームする
(4)バックアップフォルダの中身を最新2週間分残して削除する
↓
<変更後>
(3)前日に出力されたCSVファイルをバックアップフォルダにコピー&リネームする
(4)バックアップフォルダの中身を最新2週間分残して削除する
(1)別サーバからAccessで使うデータをコピーする
(2)Accessを起動し、ファイル読込→CSV出力 という一連の処理をする
としました。
Accessの処理が終わらないうちに次のバッチ処理が始まるからでは?
という指摘を受けたからです。
2.ファイル形式の変更
Accessのファイル形式を「2000」→「2002-2003」に変更しいました。
実際に動かしているサーバにインストールされているのが、Access2003だからです。
No.3ベストアンサー
- 回答日時:
バッチファイルのことは全くわからないのですが・・・(汗)
> OLE又はDDEを使うVISUAL BESICモジュールを実行している時は
> モジュールの実行を中断する必要があります
実行するマクロが「AutoExec」ということですので、
そのファイルを実行すると、「自動的に」実行されます。
(これを停止させる場合は、Shiftキーを押しながら
起動する必要があるという、Access上、特殊なマクロ)
これを頭に入れた上で、以下のコマンドを見ますと、
> "C:\Program Files\Microsoft Office\Office11\MSACCESS.EXE" "D:\test\test.mdb" /x AutoExec
1)「test.mdb」を起動させることで、AutoExecマクロが起動し、
2)その最中に、コマンドラインスイッチの指定により、
再度AutoExecマクロが起動する
という流れになっているのではないかと思われます。
ですので、コマンドラインスイッチ「/x AutoExec」を削除して
みることをお勧めします。
(「"C:\Program Files\Microsoft Office\Office11\MSACCESS.EXE" "D:\test\test.mdb"」
にする、と)
> 1)「test.mdb」を起動させることで、AutoExecマクロが起動し、
> 2)その最中に、コマンドラインスイッチの指定により、
> 再度AutoExecマクロが起動する
すっかり見落としてました。
ご指摘いただいたとおり、「/x AutoExec」を削除したところ
通常起動→終了→ldbファイル残らず
という結果にたどり着くことができました。
ありがとうございます!!
Batファイルも奥が深いなぁ…としみじみ勉強になりました。
No.2
- 回答日時:
こんにちは。
Batプログラムの難しさは、その先が、特殊な環境になることが多いからです。
しかし、どうもBatから解決しなくてはならないような雰囲気ですね。
daily.batの
rem --Access起動-----
call d:\test\access.bat
goto :EOF
さらに「access.bat」の中身は…
└ @echo off
"C:\Program Files\Microsoft Office\Office11\MSACCESS.EXE" "D:\test\test.mdb" /x AutoExec
'-------------------------------------------
この部分
> call d:\test\access.bat
↓
"C:\Program Files\Microsoft Office\Office11\MSACCESS.EXE" "D:\test\test.mdb" /x AutoExec
と、daily.batから直接実行するようにしたら、どうなりますでしょうか?
>(3)access.batのみをタスク登録してタスク実行 →起動→エラー停止
この場合、Task 子(bat)--->孫(bat)--->ひ孫(Access)で実行されているわけですね。
一段階減らしたら、どうなのかなって思います。それと、タスクの使用者の確認が必要だと書いてある掲示板もあるようです。権限はAdministrator でないといけないようですが。
私自身は、タスクの自動実行は、Wsh で、CreateObject でオートメーション・オブジェクトをつくり、そこから実行します。VBAで行えるよなことはだいたいできるのがメリットです。ただ、VBAよりは難しいです。
No3の方のお礼にも書かせていただきましたが
AoutExecの二重起動が原因だったようです。
ただ、ご指摘のとおり、batファイルとはいえ階層が深くなるのは
あまり良いことではないかも知れないので
(部署内での統一した作り方ルールで、階層化が深いのですが…)
できるだけ見直していきたいと思います。
WshはBatよりも色々なことができそうですね。
勉強していきたいと思います。
ありがとうございました。
No.1
- 回答日時:
こんにちは。
ざっと読んでみましたが、異常終了していることでしょうか?
>(2)元ネタのコピー~AccessのMDB起動までを含むBatファイルを叩く
> → 「OLE又はDDEを使うVISUAL BESICモジュールを実行している時は
> モジュールの実行を中断する必要があります」
> と表示され途中で止まりました。
素朴な疑問なのですが、Bat ということは。Windows の場合は、Cmd.exe が介在しているわけで、Cmd.exe が起動した環境そのものから動作しますが、そこにOLE が入り込む余地があるのかなって思います。
まず、その辺りから固めていく必要があります。
Bat のコードはどうなっているのでしょうか。以下を、Bat で組んでいるのでしょうか?
>(3)前日に出力されたCSVファイルをバックアップフォルダにコピー&リネームする
>(4)バックアップフォルダの中身を最新2週間分残して削除する
>(1)別サーバからAccessで使うデータをコピーする
>(2)Accessを起動し、ファイル読込→CSV出力 という一連の処理をする
Batでそこまで組めるなら、今となっては「すごい!」とは思うのですが、これ自体は、Access を起動してから、行ってしまえばよいのではないでしょうか。あえて、そこまでするなら、Windows に組み込まれた、Wsh というものもあります。私は、Bat(Shell)プログラムは、ほとんど忘れてしまいました。
この回答への補足
<タスク処理しているbatファイル>
daily.batをタスク登録しており、中身は…
└ @echo off
rem --コピー&リネーム-----
call d:\test\a.bat
rem --不要なバックアップファイル削除-----
call d:\test\b.bat
rem --元データのコピー-----
call d:\test\c.bat
rem --Access起動-----
call d:\test\access.bat
goto :EOF
さらに「access.bat」の中身は…
└ @echo off
"C:\Program Files\Microsoft Office\Office11\MSACCESS.EXE" "D:\test\test.mdb" /x AutoExec
となっています。
<切り分け作業1>
(1)Access.mdbを直接ダブルクリック→ 正常起動&終了
(2)access.batを直接ダブルクリック→ 正常起動&終了
(3)access.batのみをタスク登録してタスク実行 →起動→エラー停止
<さらなる切り分け作業2>
呼び出しているAoutExecの中身を…
(a)終了コマンドのみ →正常終了
(b)CSVインポート用マクロ+終了 →正常終了
(c)CSVインポート用マクロ+処理用マクロ(ア)+終了 →「OLE又はDDEを使うVISU…」となる
(d)CSVインポート用マクロ+処理用マクロ((ア)以外のマクロすべて)+終了 →正常終了
-----
どうやら、エラー停止している原因は、処理用マクロ(ア)のようです。
処理用マクロ(ア)は、元CSVファイルのデータをDjoin関数で集計しCSV出力する内容です。
Access.mdbを直接ダブルクリックしても
Access起動用のbatファイルを直接ダブルクリックしても正常に起動&終了します。
タスク処理にした時のみ不具合が発生する理由が分かりません。
毎日(月~金/5:00)に実行するように登録してるだけなのに…。
>…Access を起動してから、行ってしまえばよい…
Access自体あまり得意でないので…
VBAでゴリゴリ書くのは避けたかったのです。
また、職場の伝統(?)というかDOSコマンドに詳しい方は多く
色々な作業がbatファイルで組まれている状態なのです。
それ自体どうなの?とは思いますが…
“いざ引継”という状況で全部をオジサマ方に説明しきれません。
このため、皆様の方式に合わせてbat処理なんです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- Visual Basic(VBA) vba メモリ節約 3 2022/09/16 21:45
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- その他(ソフトウェア) 特定のpremiere proのファイルが開けなくなりました。 1 2022/11/16 12:31
- その他(データベース) 20万行あるデータを動かしたい 2 2023/06/13 15:21
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- Excel(エクセル) EXCELのグラフを画像(JPG形式)で保存、通常実行がうまく行かない。ステップインはうまく行く 3 2022/08/30 12:06
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
Accessが不良です
その他(データベース)
-
アクセスのファイルが壊れた!!!!!!
その他(データベース)
-
途中で処理を中断させたい (アクセスVBA)
Access(アクセス)
-
-
4
ACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ
Access(アクセス)
-
5
Accessのマクロでモジュールを実行させたい。
Access(アクセス)
-
6
アクセスのエラー「クエリには出力フィールドが1つ以上必要です。」
その他(Microsoft Office)
-
7
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
8
Accessでブレークポイントを設定してないのに一時停止してしまう
その他(データベース)
-
9
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
10
access2003 クエリSQL文について
その他(プログラミング・Web制作)
-
11
アクセスVBAで既に開いているエクセルを閉じたい
Yahoo!ショッピング
-
12
accessでクエリをExcelにエクスポートする時にファイル名に日付を追加したい
Access(アクセス)
-
13
Accessでデータシートに同じデータがいくつもでてしまいます。
その他(データベース)
-
14
Access2000VBAでOLE/DDEタイムアウトを設定したい。
Access(アクセス)
-
15
Accessの桁区切りについて教えてください。
Access(アクセス)
-
16
ACCESSでフォームを使って、テーブルを参照、データ入力、データ更新をしたいのです
Access(アクセス)
-
17
Access フォームのテキストボックスに半角英字のみで入力する設定は
Access(アクセス)
-
18
Chr(13)とChr(10)の違いは?
PowerPoint(パワーポイント)
-
19
Access 最後のレコードに到達するまでループ処理を行う方法
Access(アクセス)
-
20
アクセスでテキストボックスの値が空白だったら
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VC++から引数付きexeファイルの...
-
Access クエリ実行が急に非常に...
-
VBAでEXEファイルを動かす方法...
-
xismoについてです!開こうとす...
-
OLE又はDDEを使うVISUAL BESIC...
-
ローカルのHTMLからexeファイル...
-
LINK : fatal error LNK1104に...
-
VBS形式ファイル:ダブルクリッ...
-
Visual C++からMATLABを呼び出...
-
VBAでMP3を鳴らしたい
-
JavaScriptでコマンドプ...
-
MDBファイルをCSV出力したい
-
Web上からExeを実行する場合に...
-
エクセルの実行ファイルについ...
-
COMとユーザの対話型しりとりプ...
-
コマンドプロンプトにてスター...
-
javaの実行形式jarファイルでの...
-
WScript.Echo と msgbox
-
exeファイルをすぐに終了させな...
-
c/c++ ビルドしたにもかかわら...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Access クエリ実行が急に非常に...
-
JavaScriptでコマンドプ...
-
OLE又はDDEを使うVISUAL BESIC...
-
VC++から引数付きexeファイルの...
-
VBAでEXEファイルを動かす方法...
-
LINK : fatal error LNK1104に...
-
64bit環境で32bitのodbc参照
-
WScript.Echo と msgbox
-
batからexeを実行し戻り値を受...
-
VBAでMP3を鳴らしたい
-
コマンドプロンプトで外のexeや...
-
batからexeを起動した際の戻り...
-
VBS形式ファイル:ダブルクリッ...
-
jarファイル実行時の環境変数の...
-
JAVA .jarファイルに再圧縮する...
-
jarファイルとjava.exeの関連付...
-
VBSでEXCELのXLSTARTにあるマク...
-
コンポーネント`MSCOMM32.cox'...
-
ローカルのHTMLからexeファイル...
-
c/c++ ビルドしたにもかかわら...
おすすめ情報