今まで問題なく動作していたAccess2016 で作成したaccdbファイルに含まれたフォームとVBAですが、なぜかVBAを編集した後にフォームを実行してみると、テキストボックスにエラーが表示されており、そのテキストボックスのプロパティで値を確認してみて再入力すると、エラーが表示され保存できません。
Form上のテキストボックス1のエラー:#Name?
Formのテキストボックス1のプロパティの規定値の設定を編集時のエラー:この関数をコンパイルするときにエラーが発生しました。VBモジュールに構文エラーがあります。コードをチェックし再コンパイルしてください。
テキストボックス1のプロパティの定型入力の設定:>0000/00;0
テキストボックス1のプロパティの既定値の設定:=Format(Date(),"yyyy¥/mm")
テキストボックス1の期待値:2017/08
VBAを編集する前は動いていました。
なお、フォームからVBAへ値を受け取り処理するコードを記述しておりますが、フォームへ値をセットするなど記述しておりません。
そこで、accdbファイルをコピーしてフォームだけは作り直して同様の設定をしましたが上記の通りのエラーでした。
念のためデータベースの修復を実行しましたが解決できませんでした。
また上記以外のエラーとして、ウィザードを使ってボタンコントロールを配置しようとドラッグアンドドロップすると、以下のようなエラーが表示されました。
エラー: クエリ式:AppLoadString([bw_tblBtnActions].[Description]のコンパイルエラーが発生しました。
原因:
以下の同じ定義が存在していたが、エラーもはかず鎮座している。
解決策:
片方をコメントアウトしたらフォームのエラーがなくなった。
Option Compare Database
Const DESTINATION_ROOT As String = "C:\Users\Documents\SystemName\UserName" '<------- テスト用
Const DESTINATION_ROOT As String = "G:\Documents\SystemName\UserName" '< ------本番
問題点:
宣言部分であるためデバッグができない。
Constで同一名が定義されていてもプログラム実行時(コンパイル時)またはプロシジャーからデバッグしないとエラーが表示されない(ASPの時もあったVBの既知の問題)
Formのエラーを簡単には特定できない。メッセージがソースを確認してくださいとあるが、特定しづらい。
Formのエラーが的確でない、またコントロールを配置した時のエラー処理とそのメッセージがおかしいと考える。
VB自体の仕様がそうなっている
補足:
プログラマー以外のITすべてが本職のため、今回のプログラミング対応に苦慮しました。MSDNには記述があるのでしょうかね 検索してもヒットせず。まぁこの場合キーワードとして設定する項目が難しいためヒットできない可能性がありますが。