みなさん、こんにちは♪つむぎです。(*^_^*)
今回は使用するAccessの環境が違うことで発生した、「実行時エラー2124」の事例ついてご紹介します。
現在納品して、運用テストをしていただいているあるお客さまとお話していて、こんな話題が。
お客さま:「テストしたら、作業時間が大幅に短縮しました♪ヽ(=´▽`=)ノ」
つむぎ: 「それは、本当によかったです♪うれしいです。(*^_^*)」
お客さま:「1つだけ、あるフォームを開くときエラーが出るんです。。゚(゚´Д`゚)゚。」
つむぎ: 「どんなエラーですか?(^^ゞ」
お客さま:「あるプログラムにデバックがかかって、エラー2124って出て、フォームがひらけないんです。。゚(゚´Д`゚)゚。」
実行時エラー2124って、「オブジェクトの名前付け規則に従っていません。」的なエラーだったような???(*-゛-)
で、お客さまから送られてきたデバッグでとまった状態が下記の画像です。
[今回の前提条件]
・つむぎが開発で使用しているAccessは「Access2013日本語版」、お客さまが使用されているAccessは「Access2010英語版」←今回、ここ重要!!!
・問題が出ているのは、連絡いただいた箇所のみ
・「fdlg_kihonmaster」という名前のフォームにタブコントロールを配置し、選択されたページのコントロール名を元にサブフォームのソースオブジェクトを切り替える
[作業手順]
①開発環境が日本語と英語だということが気になり、「fdlg_kihonmaster」フォームをデザインビューでひらいてもらい、埋め込まれているテーブル名を確認してもらった。
※日本語環境の場合は、「テーブル.テーブル名」なっているかと思います。
☆見ていただくと、英語環境では「Table.テーブル名」になっていました!!!
ピンポーン!!!\(◎o◎)/!
②実行時エラー2124でとまっている、プログラムを下記のように修正
[修正前]
’修正前のプログラム ’2箇所に「テーブル」という記述があるので、ここを修正していく Private Sub Form_Open(Cancel As Integer) Me!sfrmマスタ管理.SourceObject = "テーブル.mtbl_taxrate" End Sub Private Sub tabマスタ管理_Change() 'タブコントロールの切り替え '選択されたページのコントロール名を元に 'サブフォームのソースオブジェクトを切り替える Me!sfrmマスタ管理.SourceObject = "テーブル." & Me!tabマスタ管理.Pages(Me!tabマスタ管理).Name End Sub
[修正後]
’2箇所を「テーブル」→「Table」に修正 Private Sub Form_Open(Cancel As Integer) Me!sfrmマスタ管理.SourceObject = "Table.mtbl_taxrate" End Sub Private Sub tabマスタ管理_Change() 'タブコントロールの切り替え '選択されたページのコントロール名を元に 'サブフォームのソースオブジェクトを切り替える Me!sfrmマスタ管理.SourceObject = "Table." & Me!tabマスタ管理.Pages(Me!tabマスタ管理).Name End Sub
※ちなみにつむぎが動きを検証したところ、日本語版Accessでも修正後のプログラムで問題なく動きました♪ヽ(=´▽`=)ノ
ということで、何事もなかったかのように治りました♪
日本語と英語の環境で起こったレア?な「実行時エラー2124」の事例かもしれませんが、なにかの参考になればとうれしいです♪