前提・実現したいこと
Excelで、以下の3つのユーザーフォームを作成しました。
F_Customer
F_Item
F_Staff
標準モジュールに、ユーザーフォームを開く以下のようなプロシージャを
作成しました。
vba
1Sub 顧客フォーム() 2 Dim fm as Object 3 Set fm = F_Customer 4 ’(コントロールの表示などの処理をここに記述) 5 fm.Show 6End Sub 7 8Sub 商品フォーム() 9 Dim fm as Object 10 Set fm = F_Item 11 ’(コントロールの表示などの処理をここに記述) 12 fm.Show 13End Sub 14 15Sub 担当者フォーム() 16 Dim fm as Object 17 Set fm = F_Staff 18 ’(コントロールの表示などの処理をここに記述) 19 fm.Show 20End Sub
ワークシートにコマンドボタンを設置し、上記の各プロシージャをマクロとして登録しました。
発生している問題・エラーメッセージ
上記プロシージャのうち、「顧客フォーム」「商品フォーム」は想定通りに動作したのですが、
「担当者フォーム」を実行すると、下記エラーが表示されました。
実行時エラー '13': 型が一致しません。
試したこと
上記「担当者フォーム」プロシージャで、変数 fm を フォーム名 F_Staff に置き換えても、
同様のエラーが表示されました。
なぜ他のフォームと異なる動作になりエラーが発生するのか見当がつきません。
原因や解決策など、お分かりになる方がいらっしゃいましたら是非ともアドバイスをお願いしたく、
書き込ませていただきます。
よろしくお願いいたします。
実行時エラーが出ているのは、以下の部分で間違いないでしょうか?
Set fm = F_Staff
以下の部分が実際にはどのようになっているかが気になります。
’(コントロールの表示などの処理をここに記述)
ステップ実行で試してみてはいかがでしょうか。
実行時エラーが出ているのは、
Set fm = F_Staff
の部分で間違いありません。
’(コントロールの表示などの処理をここに記述)
の部分は、例えば
fm!コントロール名 = ""
のようにフォーム上の各コントロールを初期化する記述をしています。
書き漏らしていましたが、原因解明のためにコントロールを処理する記述はいったんコメントアウトしました。
それでもやはり上記の行でエラーが発生してしまいました。
念の為ですが、F_StaffのInitializeイベントとかはどうでしょうか?
Set fm = F_Staffの処理で、確かInitializeイベントは走るはずですので。
ちなみに、手動でF_Staffを開くとどうですか?
すみません情報が不足していました。
F_Staff にInitializeイベントが記述していました。
確かに、他の2つのフォームではInitializeイベントは記述していませんでした。これがカギのようですね!
今、Initializeイベントを一旦コメントアウトしたところ、先ほどの箇所でのエラーは発生しませんでした。
もし、未解決であれば、Initializeイベントの内容を質問に追記いただくと回答が付きやすいかと思います。
「なぜ F_Staff フォームにだけエラーが発生するのか」がある程度わかりましたので、いったんこちらの質問はクローズさせて頂きます。Initializeイベントの内容を確認して、不明な点がありましたら改めて質問します。
ありがとうございました!
回答2件
あなたの回答
tips
プレビュー