最近、これまで使っていた手持ちのPCを全てWindows10に移行した。
WindowsXP(32bit)->Windows8(64bit)->Windows8.1(64bit)->Windows10(64bit)の順に更新していったのだが、XPから8に移行した時点で、これまで使用していたAccess2000で作成した.mdb形式のファイルを開くと、必ず「プログラムにコマンドを送信しているときに、エラーが発生しました」といったエラーメッセージがバックグラウンドに表示されてしまうようになった。
事象
- Access2000のアプリケーション本体から起動した場合は表示されない
- .mdb等のAccessが関連付けされているファイルを開いた場合に表示される
- Access2000のアプリケーション本体から起動し、ファイルを開くから.mdb等を開いても表示されない
起動オプションをいじっても解決せず。
ファイルに対するアプリケーションの関連付けをしなおしても解決せず。
セキュリティ項目の所有者等をいじくりまわしても解決せず。
ツール>オプションから「DDEの要求を無視する」のチェックを入れたり「DDE更新を有効にする」のチェックを外したりしてみても変わらず。
解決方法を探せど探せど見つからず・・・これはもう、あちゃぽぽぽな状態だ。
で、なんでかわかんないけど解決できた!!!
本来であれば新しいバージョンのAccessを使用すればよいのだが、どうしてもAccess2000で利用したいマクロであった為、Windows8からWindows10までを通してエラーメッセージに我慢しながら仕方なくこれまで使ってきた。
こんな悩みは企業であれば尚更よく聞く話で、OSを入れ替えるのに慎重になるのは当然だ。
それでも!僕含め、どうしてもWindows10環境で古いバージョンのAccessを動かしたいんだよ!って人の為に、今回の事象に対し沢山ある解決方法の内の一つを発見したのでメモとして残すことにした。
と、思いきや!実は根本的解決にはなっていなかった!追記:2016,02.24
下記方法によりエラーメッセージを表示しないようにはなったものの、この設定だとリンクテーブルを作成しようとしたときに結局エラーでこける。
この方法により恩恵を受けるのは、リンクテーブルを作成するような業務が発生せず用意されたマクロを使用する人ぐらいだと思う。そんな人は読み飛ばして後述の『「プログラムにコマンドを送信しているときに、エラーが発生しました」の解決法』を実施してみよう。
じゃあ、リンクテーブル貼る人はどうすればいいの?
それはしらない。
という投げやりな言い方になってしまったが、実はちょっとだけ努力した。何をどう使うかというと、
- “Restart On Crash” とかのプロセスを監視して発生したプロセスに対する動作を指定できるソフトを導入 – ダウンロードはここからできる
- “Restart On Crash” の設定で「プログラムに…」のエラーメッセージを監視させ検出したらそのプロセスを殺す
という作戦を考えた。のは良いんだけど残念ながらプロセスが特定できなかった。Windows Sysinternals の Process Monitor とかも使ってみたけど結局ぱっと見適当フィルタリングで見つからなかったのですぐやめた。
というわけで、結局僕はエラーメッセージを我慢して使っているが、もしかするとプロセスを殺す作戦でうまくいくかもしれないので、誰か挑戦してみて欲しい。そして上手くいったらご都合主義の僕に方法だけ教えてもらえるとありがたい。
僕のマシン・アプリケーション環境
- OS
- Windows10 Home 64bit
- Office
- Access 2000
- インストールパス(結構重要)
- C:Program Files x86Microsoft OfficeOffice
マシンといってもハードは未記載にしたので実際はシステム。ちなみにこの方法はWindows8,8.1等でも対応できるかもしれない。
インストールパスのお話し
インストールパスを記載したのにはちょっとした理由がある。実は、Windows10 の64bit版に32bit版Officeをインストールする場合、ちょっとそのあたりをコネコネしないと話が進まないのだ。そのあたりの話は○○○の記事を確認してほしい。
「プログラムにコマンドを送信しているときに、エラーが発生しました」の解決法
で、実は今回の問題もそのコネコネが原因だったりする。では早速やってみよう。
- 手順1
- Access2000のインストールパス(フォルダ)を開き、アプリケーション本体(MSACCESS.EXEとか)を右クリック->プロパティを選択。
- 手順2
- 「互換性」タブを選択->設定内にある「管理者としてこのプログラムを実行する」にチェックが入っていれば外し、「適用」->「OK」ボタンを押し設定完了。
- もし、グレーアウトしており押せない場合はその下にある「すべてのユーザーの設定を変更」ボタンを押し、「手順3」へ進む。
- 手順3
- 「すべてのユーザーの互換性」タブ内
- ①「互換モード」>「互換モードでこのプログラムを実行する」にチェックが入っていればチェックを外す。
- ②「設定」>「管理者としてこのプログラムを実行する」にチェックが入っていればチェックを外す。
- ③「適用」>「OK」を押して設定完了。
と、これだけです。
拍子抜けしてしまう程単純な作業ですが、本当にこれだけで僕の環境ではそれ以降エラーメッセージが表示されることは無くなった。
原因と盲点
結論から言うと、64bit版最新OSへの動作対象外アプリケーションのインストールやら何やらで躍起になっていた為に、設定をあれこれこねくり回した結果、今回のような状態になっていたようだ。
では具体的になんでこんな風になっていたのかというと、Windows8,Windows8.1,Windows10へのAccess2000のインストールは、素直に行っただけではまともに動かないことが多々あるようで、以下のようなインストール・設定を行ったからだと思う。
- インストールパスに()カッコが入っていてはいけない
- あらかじめ用意された64bit版Windowsの “C:Program Files (x86)” に素直にインストールするとエラーが頻発するので、新たに “C:Program Files x86” を自分で用意し、インストールした。
- インストーラは管理者として実行する
- インストーラは管理者として実行しないと進まない環境もあるようなので、管理者として実行した。
- アプリケーション(Access2000)管理者として実行しないとエラー頻発
- 前述の解決法で記載した、アプリケーション本体のプロパティから「このアプリケーションは管理者として実行する」にチェックを入れた。
で、今回はこの最後の管理者として実行するといった部分だが、実は、初回だけ「管理者として実行」すれば良いらしい。とりあえず初回だけ管理者として実行し、その他諸々のエラーをクリアして以降は、管理者として実行する必要が無いようだ。
これは盲点だった。
まとめ
やったはず、絶対違うはず、と決めつけづに最初からやり直したりパラメーターをのON/OFFから切り分けることが大切だと改めて通関させられた。
同じ問題に遭遇して、どうしても解決法が見つからない人は試しにやってみると良いかもしれない。