プチIT化 PR

同じExcelファイル内でユーザフォームをコピーするには

記事内に商品プロモーションを含む場合があります。
当サイトは、アフィリエイト広告を利用しています。

こんにちは!今回の記事は、Excel VBAで利用できるユーザーフォーム(Userform)のコピーについてです。

とある日、同じExcelブック内、Microsoft Visual Basic for Applicationで同じユーザフォームを作ろうと、コピーしようとエクスポート・インポートを試みたところ…

悩める人
悩める人
インポートしようとするとエラーが出る!

ユーザフォームのコピーは右クリックではなくエクスポート・インポートで行いますが、インポートしようとしたところ、以下のエラーが出ました。

読み込み中にエラーが発生しました。詳細は****を参照してください。UserForm1はロードされません。Nameは既に使用されています。

まず:ユーザフォームのコピー手順

今回行ってユーザフォーム(UserForm)のコピーを行いました。

  1. コピーしたいフォームを右クリック > [ファイルのエクスポート]
  2. 任意の場所にファイルを保存する
    ユーザーフォーム名.frmというファイルがエクスポートできます
  3. フォームフォルダを右クリック > [ファイルのインポート]
  4. ②でエクスポートしたファイルを選択

ここで、冒頭で述べたエラー「UserFormはロードされません」ということで、インポートに失敗しました。

失敗した原因:ユーザーフォーム名が被っているため

インポートに失敗した理由は「Nameは既に使用されています。」と書かれている通り、同じ名前のユーザーフォームの既に存在しているからでした。名前が重複しているため、存在できなかったのです。

悩める人
悩める人
どうしたらいいの?

対処法を次章に記載します。

対処法:ユーザフォーム名を一度変更してインポートする

名前が重複しているため、インポートが出来なかったということで、エクスポートする際にユーザフォーム名を一時的に変更しエクスポート、その後ユーザフォーム名を戻して、エクスポートしたファイルをインポートします。

  1. コピー元フォームを右クリック > [オブジェクトの表示]
    既にオブジェクト表示となっている場合は、不要な操作です。
  2. プロパティウィンドウの[(オブジェクト名)]を変更する(※例えば、"UserForm1"を"UserForm1_"など一時的な名前に)
  3. 名前変更したフォームを右クリック > [ファイルのエクスポート]
  4. プロパティウィンドウの[(オブジェクト名)]で戻す(※例えば、"UserForm1_"へ変更した名前を"UserForm1"など)
  5. ③でエクスポートしたファイルをフォームフォルダを右クリック > [ファイルのインポート]でインポート

④で名前を元に戻さなくても問題はありませんが、ユーザーフォーム名はVBAマクロなどでユーザフォーム呼び出しなどで利用している可能性があるので、元に戻した方が良いかと思います。

解決した人
解決した人
これで私は無事にこぴーできました!

さいごに

いかがだったでしょうか。同じような悩みを持たれた方の参考になれば幸いです。それでは、また!