🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VBA

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

Access

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

意見交換

クローズ

9回答

1039閲覧

Access VBAにて 突然 実行時エラーの対処法が知りたい

aji-pro

総合スコア0

VBA

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

Access

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

1グッド

0クリップ

投稿2024/07/18 20:23

1

0

Windows10
Microsoft Access 2016
で起きています。

正常に動いていましたが、データベースの最適化/修復を実行後、
最適化を行ったファイルで、突然、実行時エラーが表示されるようになった。

表示されたエラーの詳細:
実行時エラー'5' プロシージャの呼び出し、または引数が不正です。

該当箇所

標準モジュール(basCommon)
Public Const gDBMode As String = "MDB"

フォーム(frmMenu)
Private Sub Form_Open(Cancel As Integer)
If gDBMode = "MDB" Then ←ここでエラー表示
Debug.Print gDBMode
End If
End Sub

(1)
VBAエディタを開き、「デバッグ」→「コンパイル」を実行して問題ない事を確認
(2)
新しくmdbファイルを作成し、
外部データ → 新しいデータソース → データベースから → Access
を選択して表示される外部取り込み画面から
「正常に動いている MDB ファイル」を選択し、
すべてのテーブル/フォーム/モジュールを選択してインポート
しましたが、変わりません。

こんな記事を見つけたりもしました。
http://www.ruriplus.com/msaccess/prb/prb_009.html

標準モジュール(basCommon)
Public Const gDBMode As String = "MDB"

フォーム(frmMenu)
Private Sub Form_Open(Cancel As Integer)
If CVar(gDBMode) = "MDB" Then ←ここでエラーは回避できるが・・・
Debug.Print gDBMode
End If
End Sub

これと同様の部分が多すぎてとても対応できません。

tkmtmkt👍を押しています

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

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

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

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

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

回答9

#1

hatena19

総合スコア34073

投稿2024/07/18 23:33

最適化/修復、新規データベースへのインボートでも改善しなかったのですね。

とりあえずデコンパイルを試してみてください。

デコンパイル – MS-Accessのツボ

ACCESS decompile(デコンパイル) | ツール・ド・VBA

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

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

#2

aji-pro

総合スコア0

投稿2024/07/19 00:16

ありがとうございます。
この方法は知りませんでした。
早速実行してみました。
エラーが出るファイルをデコンパイル
エラーが出ないファイルをデコンパイル → データベースの最適化
と行ってみましたが、現象は変わらずです。

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

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

#3

hatena19

総合スコア34073

投稿2024/07/19 02:07

ダメでしたか。残念!

新規ファイルで新規フォームを作成して、同様のコードを記述した時は、どうなりますか。

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

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

#4

sk.exe

総合スコア938

投稿2024/07/19 02:40

実行時エラー'5' プロシージャの呼び出し、または引数が不正です。

とりあえず、問題が発生している mdb ファイルの VBA プロジェクトの参照設定において、参照不可となっているオブジェクトライブラリが追加されていないかどうかを確認されることをお奨めします。

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

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

#5

aji-pro

総合スコア0

投稿2024/07/19 04:08

編集2024/07/19 04:11

新規mdbファイルを作成した上で、
参照設定の部分は最低限(新規作成時に設定されたものから変更せず)にし、

フォーム1つだけ設置し、
Private Sub Form_Open(Cancel As Integer)
Dim gDBMode As String
gDBMode = "MDB"
If gDBMode = "MDB" Then
Debug.Print gDBMode
End If
End Sub

だけ記述してみました。
他のモジュールやフォームはもちろん、
テーブルやフォームも無い状態にしてみたのですが、改善されないです。

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

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

#6

aji-pro

総合スコア0

投稿2024/07/19 04:38

試しに、新規MDBでなく、新規ACCDBで同じことを行うったらエラーが出ませんでした。
ということで、新規ACCDBを作成し、
外部データ → 新しいデータソース → データベースから → Access
を選択して表示される外部取り込み画面から
「正常に動いている MDB ファイル」を選択し、
すべてのテーブル/フォーム/モジュールを選択してインポートしてみました。
インポート直後は正常に動作しますが、
データベースの最適化/修復を実行後は同様のエラーが表示されてしまいます。

これは、Accessの再インストールが必要な状態?と思い、Accessをインストールしている他のPCで試してみました。
結果は下記の通りです。
①いったんエラー表示されたMDBやACCDBは、別のPCでも同じエラーが出る。
②正常に動いているMDBは、今回使用したPCで利用するには問題なく動作する。
(DBが肥大化し不安がありますが)
③別のPCでも、正常に動いているMDBを動作させても問題なし。
④別のPCで、正常に動いているMDBを最適化させたら、正常に最適化され、問題なく動いた。
⑤別のPCで、正常に最適化され、問題なく動いたMDBを、今回使用したPCで利用するには問題ない。
(最適化はNG)
ということで、最適化の部分に問題があったようです。

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

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

#7

hatena19

総合スコア34073

投稿2024/07/19 04:48

問題のPCで最適化をするとエラーがでるようになるということですね。

2つのPCのOfficeのバージョンとビルド番号は同じでしょうか。

異なっていれば、問題のでないPCのバージョンとビルドに合わせるといいかもしれません。

同じなら、問題の出るPCの方はOfficeをアンインストールして再インストールするのを試してはどうでしょう。

どちらにしても、2016はメインストリームサポートは終了していますし、延長サポートも来年には終了しますので、バージョンアップを検討する時期かと思います。

Microsoft Office 2016 - Microsoft Lifecycle | Microsoft Learn

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

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

#8

sk.exe

総合スコア938

投稿2024/07/19 05:09

新規mdbファイルを作成した上で、

他のモジュールやフォームはもちろん、
テーブルやフォームも無い状態にしてみたのですが、改善されない

データベースの最適化/修復を実行後、
最適化を行ったファイルで、突然、実行時エラーが表示されるようになった。

[データベースの最適化/修復]コマンドが一度も実行されたことがない状態で
既にその現象が発生しているのか、[データベースの最適化/修復]コマンドを
実行しなければ発生しないのか、どちらなのでしょうか。

もし後者である場合、その mdb ファイルはどこに保存されているのでしょうか。

少なくとも、示されたコード自体には何ら問題はありません。
実際に新規作成した mdb ファイル( Access 2000 形式)上に同じ名前のフォームを作成し、そのフォームモジュールに全く同じコードを記述した状態でそのフォームを開いてみても、こちらの環境において同じ現象は再現されません。

参照設定の部分は最低限(新規作成時に設定されたものから変更せず)

ライブラリの参照設定に異常があれば件のエラーが発生する可能性が高まりますがそういうわけでもなさそうですので、現時点では実行環境に由来する不具合の一種である可能性が高いのではないかと推測します。

例えば Access がインストールされている別の端末を用いて動作検証を行い、もしその端末において同じ現象が再現されないのであれば「エラーが発生する環境」と「エラーが発生しない環境」との間に何らかの違いがないかどうかを調べられることをお奨めします。

  • Windows / Office / Access の バージョン / ビルド / アーキテクチャ / 言語

  • Access のオプション設定

  • (エラーが発生する端末上に)異なるバージョンの Office アプリケーションがインストールされていないか否か

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

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

#9

aji-pro

総合スコア0

投稿2024/07/19 09:34

様々なコメントありがとうございます。

[データベースの最適化/修復]コマンドが一度も実行されたことがない状態で
既にその現象が発生しているのか、[データベースの最適化/修復]コマンドを
実行しなければ発生しないのか、どちらなのでしょうか。

現象をテストするとこんな感じです。
①既存の正常に動いているmdbファイルは、問題のあるpcでも正常に動作
②ただし、既存の正常に動いているmdbファイルでも、問題のあるpcで最適化を行ったらエラー現象が出現
③問題のあるpcで、新規mdbファイルを作成し、最低限のコードを記述。最適化を行っていない状態で、エラー現象が出現
④問題のあるpcで、新規accdbファイルを作成し、最低限のコードを記述。最適化を行っていない状態で、正常動作。
⑤ただし、問題のあるpcで、最低限のコードを記述したaccdbファイルを最適化した場合は、エラー現象が出現
⑥正常に動作しているPCで、新規mdbファイルを作成し、最低限のコードを記述。最適化を行っていない状態で、正常に動作
⑦正常に動作しているPCで、上記mdbファイルの最適化を行った場合も、正常に動作
⑧問題のあるpcで、エラー現象が出現したファイルを、問題のあるpcで動作させたら、エラー現象が出現

ちなみに、問題のあるPCと、正常に動作しているPCは、
Access 2016 バージョン 2406 ビルド 16.0.17726.20078
Windows 10 Pro/バージョン 22H2/OSビルド 19045.4651
で同一でした。

どちらにしても、2016はメインストリームサポートは終了していますし、延長サポートも来年には終了しますので、バージョンアップを検討する時期かと思います。

ご指摘いただいているように、
どのみち、Windows10も、Access2016も、
再インストールというより、バージョンアップしなくてはいけない時期なので考えます。
ありがとうございました。

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

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

最新の回答から1ヶ月経過したため この意見交換はクローズされました

意見をやりとりしたい話題がある場合は質問してみましょう!

質問する

関連した質問