• ベストアンサー

OLE又はDDEを使うVISUAL BESICモジュールを実行している時は…と表示されます

以前、下記の質問をさせていただいた者です。 教えていただいた方法を実行中に、別の問題が発生したため 新規に質問スレを立てさせていただきました。 バッチ処理をすると(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だからです。

質問者が選んだベストアンサー

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答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"」  にする、と)

rurineko
質問者

お礼

> 1)「test.mdb」を起動させることで、AutoExecマクロが起動し、 > 2)その最中に、コマンドラインスイッチの指定により、 >  再度AutoExecマクロが起動する すっかり見落としてました。 ご指摘いただいたとおり、「/x AutoExec」を削除したところ 通常起動→終了→ldbファイル残らず という結果にたどり着くことができました。 ありがとうございます!! Batファイルも奥が深いなぁ…としみじみ勉強になりました。

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答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よりは難しいです。

rurineko
質問者

お礼

No3の方のお礼にも書かせていただきましたが AoutExecの二重起動が原因だったようです。 ただ、ご指摘のとおり、batファイルとはいえ階層が深くなるのは あまり良いことではないかも知れないので (部署内での統一した作り方ルールで、階層化が深いのですが…) できるだけ見直していきたいと思います。 WshはBatよりも色々なことができそうですね。 勉強していきたいと思います。 ありがとうございました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答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)プログラムは、ほとんど忘れてしまいました。

rurineko
質問者

お礼

>…Access を起動してから、行ってしまえばよい… Access自体あまり得意でないので… VBAでゴリゴリ書くのは避けたかったのです。 また、職場の伝統(?)というかDOSコマンドに詳しい方は多く 色々な作業がbatファイルで組まれている状態なのです。 それ自体どうなの?とは思いますが… “いざ引継”という状況で全部をオジサマ方に説明しきれません。 このため、皆様の方式に合わせてbat処理なんです。

rurineko
質問者

補足

<タスク処理している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)に実行するように登録してるだけなのに…。

関連するQ&A

  • バッチ処理をすると(Accessの)ldbが残ってしまいます

    ≪ 質問 ≫ batファイルをタスクで動かして、早朝にAccessを動かしファイル生成しています。 ファイル自体は、正しく生成されているのですが [Accessファイルの名称].ldb というldbが残ってしまいます。 不要なldbなので削除しようとしても、 「誰かがAccessを利用中」という理由で削除できません。 (タスクマネージャでプロセスを終了し、削除しています) Batファイルから、AutoExecで起動したAccessを正しく終了させるには どうすれば良いですか? ≪ 動かしているサーバ ≫ ・Windows Sever 2003 R2 ・Microsoft Office Access 2003 ≪ 処理内容 ≫ 1. 別サーバからAccessで使うデータをコピーする 2. Accessを起動し、ファイル読込→CSV出力 という一連の処理をする 3. 出力されたCSVファイルをバックアップフォルダにコピー&リネームする 4. バックアップフォルダの中身を最新2週間分残して削除する ※1~4の処理はそれぞれ別のbatファイルに記述していますが  タスクに登録する都合上、1個のbatファイル内で「call」で順番に  呼び出して処理しています。 ≪ 心当たり? ≫ Accessを動かしているサーバにインストールされているのは Access2003なのですが、このmdb自体はAccess2000で作成しました。 このため、「Access 2000 ファイル形式」のままで Access2003で動かしています。

  • MDBファイルをCSV出力したい

    こんばんは。 環境: OS:WINDOWS2000 VB6.0 sp5 アクセス2000 VBからアクセスのMDBデータをCSV形式で出力させようとしています。  mdbファイルが実行中にVBのexeを起動してcsvファイルを取得したいのですが、いい方法が分かりません。 閉じているMDBファイルのデータをCSVで出力することは可能です。  MDBファイルが開いているとexeを実行した時に「実行時エラー7866 データベースが開いています」というようなメッセージが出て処理ができません。 なにかいい方法はないでしょうか よろしくお願いいたします。

  • バッチでmdbを最適化したいのですが、ldbファイルが存在した場合の処

    バッチでmdbを最適化したいのですが、ldbファイルが存在した場合の処理キャンセルが分かりません。 親フォルダ ├子フォルダ1 │├AA.mdb │└BB.mdb ├子フォルダ2 ・・・ 現在は下記を実行しています。 set backdate=%date:~-10,4%%date:~-5,2%%date:~-2,2% set logfile=\\192.168.10.15\d\ACCESSBackup\log\copyall_%backdate%.log date /T >> %logfile% time /T >> %logfile% xcopy "\\192.168.10.14\ACCESS_SYSTEM" "\\192.168.10.15\d\ACCESSBackup\ACCESS_SYSTEM\" /C /D /E /R /Y >> %logfile% for /f %%A in ('dir /b /s C:\ACCESS_SYSTEM\*.mdb') do "C:\Program Files\Microsoft Office\Office\MSACCESS.EXE" %%A /compact 上記で 親フォルダ丸ごとバックアップ ログファイルを出力 親フォルダからmdbを全て検索し最適化 ↑ この最適化の前に%%Aのファイルのldbが存在したら最適化をキャンセルさせたいのですがやり方がわかりません。 %%A→C:\ACCESS_SYSTEM\子フォルダ\AA.mdbだったら C:\ACCESS_SYSTEM\子フォルダ\AA.ldbの存在をチェックし、あれば最適化しない。 mdbが多いので、VBAで個別に組み込まずタスクで夜中にでも一気にバックアップ・最適化したいと考えています。 どなたか知恵をお貸し下さい。 宜しくお願いいたします。

  • DOSバッチのコピーについて

    フォルダ内の複数ファイルを、別フォルダにコピーするバッチを作りたいと考えています。 具体的には、コピー元ファイルは、オリジナルファイル名+日付.CSVの法則で、100ファイル程度が毎日コピー元フォルダに出力されます。 コピーしたいファイルは、その都度、日付単位で変わるので、バッチ実行時に任意のコピーしたい日付を指定(入力)して、別フォルダに コピーさせたいのですが、何か方法ありますでしょうか? 尚、昔の馴染みがあり、理解しやすいので、DOSのバッチで実現できないでしょうか? 例 sample1_20081124.CSV sample2_20081124.CSV sample1_20081125.CSV sample2_20081125.CSV sample1_20081126.CSV sample2_20081126.CSV ↓ 20081125のファイルだけコピーする sample1_20081125.CSV sample2_20081125.CSV 宜しくお願い致します。

  • Access2003VBA・MDBファイルの容量をVBAで知りたいです。

    Access2003VBAで質問です。 (1)VBA実行中(自分自身)のMDBファイルの容量を、VBAで知ることはできますか? CSVファイルを読み込む処理ですが、1.9ギガくらいで、処理をとめたいのです。 (2)VBA実行中(自分自身)のMDBファイルのディレクトリを取得する方法を教えて下さい。 (3)自分自身のMDBファイルは、最適化できませんよね。 DAOで、閉じてるMDBファイルをコピーするしかないのかな?

  • タスク実行時のウィンドウを非表示にしたい

    お世話になります。 Windows2000のマシンを使用しています。 約10分おきにバッチファイルを実行するようなタスクを 設定しています。バッチファイルの内容は簡単な ファイルコピーコマンドです。 そこでタスクを実行されるときDOS窓みたいなウィンドウが一瞬 表示されてすぐ消えるのですが、毎回表示されるのは見苦しいので 非表示にする方法を探しています。 バッチファイルのショートカットを作成してそのプロパティで 画面サイズなどを変更しましたが変わりませんでした。 ご存知の方居られましたらご教授願います。

  • ACCESS2000のマクロについて質問です。

    タイトルの通り、ACCESS2000のマクロで アプリケーションの実行で困っています。 ACCESSで作成したdb1.mdbでCSVファイルを取り込んで 加工したいと思っています。 しかし、CSVファイルがLAN内の他のPCにあるので 取り込みができませんでした。 そこで、CSV_COPY.DATというMS-DOSバッチファイル を作成して取り込み前に指定したフォルダにCSVファイルを コピーするというものを作りました。 できればdb1.mdbのフォームのボタンをクリック 1回で   1、CSV_COPY.DATの実行   2、マクロでCSVファイルのインポート    (多数のクエリで加工) を行いたいのでぜひ、アプリケーションの実行 のコマンドラインの指定について教えてください。 ちなみに、以前他の方が質問された内容・回答を 参考にして、   c:\windows\system32\cmd.exe"d:\csv_copy.dat" として試してみましたがだめでした。 ※windowsXPを使用しています。 お手数ですが、みなさんよろしくお願いします。

  • MSアクセスのマクロ・モジュールを実行

    MSアクセスのマクロ/モジュールを.batバッチファイル、もしくは.vbsのVBスクリプトでキックさせたいと思っています。 こういった方法は可能でしょうか?ぜひ教えて下さい、よろしくお願いします。

  • dosでのファイルリスト取得について

    初歩的な質問ですいません。 以下のバッチファイルを作成しようと思っています。 ・特定のフォルダ配下にあるcsvファイルをバッチファイルの引数に設定したいと思っています。 例) フォルダに A.csv B.csv C.txt があるとすると バッチファイル A.csv バッチファイル B.csv を実行する。 いまいち、ファイルリストを取得してるループ処理させる方法がわかりません。

  • 実行時にVBのモジュールファイルを読み込んで実行する方法

    VB.netで作成したプログラムで、実行時に、ユーザが作成した*.vbファイル(VB.netのモジュールファイル)を読み込んで実行するというものを見たことがあります。 モジュールファイルにはいろいろな関数が記述されておりました(関数名等は決まりがあるのかもしれません)。どのように処理しているのかさっぱり見当がつきません。自分で調べた範囲では「リフレクション」というキーワードが出てきましたがいまいちピンときませんでした。これができればプログラムを再コンパイルしなくても動作(の一部)を換えることができ便利です。参考になるようなサイトなどご存知でしたら教えてください。

専門家に質問してみよう