こんにちは!今回の記事は、Excel VBAで利用できるユーザーフォーム(Userform)のコピーについてです。
とある日、同じExcelブック内、Microsoft Visual Basic for Applicationで同じユーザフォームを作ろうと、コピーしようとエクスポート・インポートを試みたところ…
悩める人
インポートしようとするとエラーが出る!
ユーザフォームのコピーは右クリックではなくエクスポート・インポートで行いますが、インポートしようとしたところ、以下のエラーが出ました。
まず:ユーザフォームのコピー手順
今回行ってユーザフォーム(UserForm)のコピーを行いました。
- コピーしたいフォームを右クリック > [ファイルのエクスポート]
- 任意の場所にファイルを保存する
- フォームフォルダを右クリック > [ファイルのインポート]
- ②でエクスポートしたファイルを選択
ここで、冒頭で述べたエラー「UserFormはロードされません」ということで、インポートに失敗しました。
失敗した原因:ユーザーフォーム名が被っているため
インポートに失敗した理由は「Nameは既に使用されています。」と書かれている通り、同じ名前のユーザーフォームの既に存在しているからでした。名前が重複しているため、存在できなかったのです。
悩める人
どうしたらいいの?
対処法を次章に記載します。
対処法:ユーザフォーム名を一度変更してインポートする
名前が重複しているため、インポートが出来なかったということで、エクスポートする際にユーザフォーム名を一時的に変更しエクスポート、その後ユーザフォーム名を戻して、エクスポートしたファイルをインポートします。
- コピー元フォームを右クリック > [オブジェクトの表示]
- プロパティウィンドウの[(オブジェクト名)]を変更する(※例えば、"UserForm1"を"UserForm1_"など一時的な名前に)
- 名前変更したフォームを右クリック > [ファイルのエクスポート]
- プロパティウィンドウの[(オブジェクト名)]で戻す(※例えば、"UserForm1_"へ変更した名前を"UserForm1"など)
- ③でエクスポートしたファイルをフォームフォルダを右クリック > [ファイルのインポート]でインポート
④で名前を元に戻さなくても問題はありませんが、ユーザーフォーム名はVBAマクロなどでユーザフォーム呼び出しなどで利用している可能性があるので、元に戻した方が良いかと思います。
解決した人
これで私は無事にこぴーできました!
さいごに
いかがだったでしょうか。同じような悩みを持たれた方の参考になれば幸いです。それでは、また!