本記事はVBAのエラー対応について説明します。
今回はユーザーフォームを表示(Show)する際に発生する
「Functionまたは変数が必要です」というエラーの原因と対策について紹介したいと思います。
このエラーが発生するとプログラム自体を走らせることができなくなるので対策が必要です。
原因も詳しく説明してますので是非参考にしてみてください。
では実際に見ていきましょう。
■通常のユーザーフォームの表示
まずはエラーが発生しないユーザーフォームの表示を見てみましょう。
見本で下図のユーザーフォームを作成してみました。
特に変わりないユーザーフォームになってます。
ここで注目してほしいのは「オブジェクト名」です。
ではこちらのユーザーフォームを表示するだけのマクロVBAのプログラムを見てみましょう。
Sub ユーザーフォームを表示()
更新中.Show
End Sub
とてもシンプルですね。
更新中のユーザーフォームを表示するので
更新中.Show
というプログラムです。
では実行してみましょう。
問題なくユーザーフォームを表示することができました。
■「Functionまたは変数が必要です」のエラーの原因と対策法
では本題に移りたいと思います。
下記のマクロVBAのプログラムをご覧ください。
Sub 更新中()
更新中.Show
End Sub
一見問題なさそうなプログラムですよね。
では実行してみましょう。すると下記のようなエラーが表示されました。
ここでお気づきの方もおられると思いますが
実行プログラム自体は先ほどの見本では実行できたことから何も問題ありません。
では正常に機能するプログラムとエラーが発生するプログラムを見比べてみましょう。
正常のマクロVBAのプログラム
Sub ユーザーフォームを表示()
更新中.Show
End Sub
異常のマクロVBAのプログラム
Sub 更新中()
更新中.Show
End Sub
お分かりいただけましたでしょうか。
正常であるプログラムはプログラム名が「ユーザーフォームを表示」で「更新中」のユーザーフォームを表示させてますが、エラーが発生するプログラムは「更新中」というプログラム名で「更新中」のユーザーフォームを表示させてます。
つまり、エラーの原因は「オブジェクト名とプログラム名が一緒」であることがわかります。
なので対策としてはオブジェクト名とプログラム名は同じでないことが正常のプログラムに欠かせません。
どうしても同じ名前で付けたい場合は下記プログラムのように1文字でも付け加えるだけで正常に動いてくれます。
Sub 更新中1()
更新中.Show
End Sub
■まとめ
いかがだったでしょうか。
私もユーザーフォームを使用し始めたときに同じエラーが発生して
対策方法がわからず試行錯誤して判明しました。
現在はプログラム名の後に作成した年月日を番号で入力しているので
そのようなエラーは起きない&作成した日時がわかるのでおすすめです。
是非参考にしてみてください。
それでは次回の記事でお会いしましょう。
コメント
記事の作成誠にありがとうございました。
マクロの学習中に同様の事象に直面して困っていました。
しかしこの記事を参照して解決できました。
プログラム名に日付を残す点も勉強になりました。