質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

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

Q&A

解決済

2回答

2623閲覧

VBA Excel ユーザーフォームを変数に格納して処理しようとすると

Chim2Cherry

総合スコア9

VBA

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

0グッド

0クリップ

投稿2021/09/17 07:05

前提・実現したいこと

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 に置き換えても、
同様のエラーが表示されました。

なぜ他のフォームと異なる動作になりエラーが発生するのか見当がつきません。
原因や解決策など、お分かりになる方がいらっしゃいましたら是非ともアドバイスをお願いしたく、
書き込ませていただきます。
よろしくお願いいたします。

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

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

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

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

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

hex309

2021/09/17 07:15 編集

実行時エラーが出ているのは、以下の部分で間違いないでしょうか? Set fm = F_Staff 以下の部分が実際にはどのようになっているかが気になります。 ’(コントロールの表示などの処理をここに記述) ステップ実行で試してみてはいかがでしょうか。
Chim2Cherry

2021/09/17 07:33

実行時エラーが出ているのは、 Set fm = F_Staff の部分で間違いありません。 ’(コントロールの表示などの処理をここに記述) の部分は、例えば fm!コントロール名 = "" のようにフォーム上の各コントロールを初期化する記述をしています。 書き漏らしていましたが、原因解明のためにコントロールを処理する記述はいったんコメントアウトしました。 それでもやはり上記の行でエラーが発生してしまいました。
hex309

2021/09/17 07:39

念の為ですが、F_StaffのInitializeイベントとかはどうでしょうか? Set fm = F_Staffの処理で、確かInitializeイベントは走るはずですので。 ちなみに、手動でF_Staffを開くとどうですか?
Chim2Cherry

2021/09/17 07:44

すみません情報が不足していました。 F_Staff にInitializeイベントが記述していました。 確かに、他の2つのフォームではInitializeイベントは記述していませんでした。これがカギのようですね! 今、Initializeイベントを一旦コメントアウトしたところ、先ほどの箇所でのエラーは発生しませんでした。
hex309

2021/09/17 07:46

もし、未解決であれば、Initializeイベントの内容を質問に追記いただくと回答が付きやすいかと思います。
Chim2Cherry

2021/09/17 07:56

「なぜ F_Staff フォームにだけエラーが発生するのか」がある程度わかりましたので、いったんこちらの質問はクローズさせて頂きます。Initializeイベントの内容を確認して、不明な点がありましたら改めて質問します。 ありがとうございました!
guest

回答2

0

Initializeイベントに原因があったようですね。

VBEの「ツール」→「オプション」で「オプション」でオプションダイアログを表示し、「全般」タブの「エラートラップ」を「クラスモジュールで中断」にすると、今回のようなケースで、エラー時に止まる箇所が呼び出し元ではなく、呼び出された先(今回であれば、Initializeイベント内)になるので便利です。

投稿2021/09/17 08:01

hex309

総合スコア761

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

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

0

自己解決

F_Staff には Initializeイベントが記述されていました。
(他の2つのフォームにはInitializeイベントは記述していません)
Initializeイベントを一旦コメントアウトしたところ、エラーは発生しませんでした。

「なぜ他の2つのフォームと同じ記述をしているのに、F_Staff でのみエラーが発生するのか」の理由は、Initializeイベントに記述した内容によるようです。
ここまで判明しましたので、あとは自力で解決したいと思います。

ありがとうございました!

投稿2021/09/17 07:59

Chim2Cherry

総合スコア9

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問