本ページには広告が含まれています。

Excel VBA UserForm のコピーを作成する方法

UserForm のコピーを作成する方法

全く同じユーザーフォームをもう一つ作りたい場合、どうしたらよいでしょうか。

手動で作る場合、コピー元のユーザーフォームや配置している各コントロールの大きさや設定などを全く同じにしようと思うと結構な手間がかかります。

そんな場合は、ユーザーフォームをコピーして再利用しましょう。その方法について勉強しましょう。

くるみこ
くるみこ

ユーザーフォームをコピーして再利用する方法を勉強しておきましょう。
簡単そうに思えますが、注意しなければならないことがあるのでしっかり覚えておきましょう。

わかりました。よろしくお願いしますm(__)m

前回記事「標準コントロールのラベルでプログレスバーを表現する」はこちらです。

【この記事でわかることは】
・UserForm のコピーを作成する複数の方法

スポンサーリンク

UserForm のコピーを作成する方法

前回の記事で使った UserForm を使って、実際にやっていきましょう。

プログレスバー用のレベルを配置したUserForm

UserForm1 に Frame1、Label1、Label2、CommandButton1 を配置しています。

VBE 内でコピー(ドラッグ&ドロップ)する

まずは、VBE(VBAのエディター)内でコピー(ドラッグ&ドロップ)する方法です。

【手順1】コピー元とコピー先双方のブックを立ち上げておきます

【手順2】VBEの同一プロジェクト内でフォームモジュールをコピー(ドラッグ&ドロップ)するだけで完了です

【注意点】コピー先に同一名のユーザーフォームがある場合エラーでコピーできない

【対応方法】ユーザーフォーム名を変更してからコピーしましょう
      コピー後にユーザーフォーム名を元に戻すなどで対応します

【同一プロジェクト内でコピーする方法】
 ・一時的に別ブックを用意してそこにコピーします
 ・コピー後名前を変更したあと、元のプロジェクトにコピーします
 ・一時的に用意した別ブックは不要なので削除します

VBE 内でコピーする動作(動画)

これはすごく簡単ですね(^^)/

エクスポート&インポートを利用する

次は、UserForm モジュールエクスポートしてからインポートする方法です。

【エクスポート手順】
 ・Projectウィンドウでエクスポートする UserForm1モジュールを右クリックします
 ・[ファイルのエクスポート]を選択し、エクスポートファイルの保存先を指定します
 ・UserForm1をエクスポートした場合、指定先に「UserForm1.frm」と「UserForm1.frx」というファイルが作成されます

【インポート手順】
 ・ Project ウィンドウで右クリックし[ファイルのインポート]をクリックします
 ・インポートするファイル「UserForm1.frm」を選択指定します
 ・エクスポートした二つのファイル「UserForm1.frm」と「UserForm1.frx」から UserForm1モジュールが作成されます

UserForm1.frm」(テキストファイル)イベントプロシージャなどのコードも、このファイルにテキスト形式で保存されています。
UserForm1.frx」(バイナリファイル)この中にコントロールの位置などが記録されています。
インポートは、この二つのファイルを使用して行われます。二つ揃っていないとインポートできませんので注意しましょう!

【注意点】同一のユーザーフォーム名がある場合エラーでインポートできません

※標準モジュールをインポートする場合は、すでに同じ名前の標準モジュールが存在していた場合は自動的に名前が変更されてインポートされます。でも、UserFormモジュールの場合は変更してくれないんですね(-_-;)

【対応方法】エクスポートする前に元の名前を変更するか、インポート先の同一名称のユーザーフォームをリネームしておく必要があります

※エクスポート時に保存ファイル名を変更しても UserForm モジュール自体の名前を変更したことにはなりませんので注意が必要です

エクスポート&インポートの動作(動画)

続けて同じ UserFormモジュールをインポートした場合エラーとなる部分までの動作です。

以上2つの方法が一般的なユーザーフォームをコピーする方法です。

手動で UserForm のコピーを作成する

元ブックが無い場合やエクスポートファイルを提供できない場合には、フォーム自身と配置している各コントロールのプロパティー値を使って手動でコピーを作成する必要があります。

【手順1】プロパティウインドウを表示から「UserForm1」を選択表示します
     又は UserForm1オブジェクト上で右クリック → プロパティを選択

【手順2】表示されたプロパティウインドウでプロパティ項目の設定値を記録します
     項目名等はテキストコピーできないのでスクショで保存するのもありです

【手順3】配置しているすべてのコントロールについてもプロパティ値を記録します

【手順4】作成先のブックでUserFormを新規に挿入します

【手順5】 配置していたコントロールを適当に配置します
    (※配置の注意点が下段にあります)

【手順6】UserForm1 → フレーム1 → ラベル1 →
     というように、それぞれのプロパティーを記録していた設定値に変更します

もっと複雑なユーザーフォームだった場合、本当に気が遠くなりますね。
下にプロパティウインドウの画像を3つだけ貼っておきます。

UserForm1のプロパティ
CommandButton1のプロパティ
Label1のプロパティ

【コントロール配置時の注意点】
フレーム内にグループ化するコントロールを配置するなどの場合は、フレームを先に配置しておき、その中に配置していくようにしましょう 。
今回の場合は、フレーム内にラベルを配置しています。

各プロパティー値を手動で把握するのは結構大変な作業なので、VBAを使って取得できるようにしたいと思いました。 
 

スポンサーリンク

まとめ(おわりに)

以上、「ユーザーフォーム」のコピーを作成する方法でした。

まとめと感想など

くるみこ
くるみこ

同じサイズや同じコントロールの配置としたい場合「ユーザーフォーム」のコピーを作成してから改変していくことは意外と多いのではないでしょうか。そんな時のために覚えておきましょうね。

UserFormモジュールも標準モジュールのように同一ファイル名でも番号付きでコピーできればいいんですけどね (^^) 手動でコピーをつくるのは面倒な作業ですね。

【今回わかったことは】
・UserForm モジュールのコピーを作成する二つの方法
・手動で UserForm のコピーを作成する方法

★★★ ブログランキング参加中! クリックしてね(^^)/ ★★★

【今後の記事について】

今回の記事はいかがだったでしょうか。皆さまのお役に立てたなら幸いです(^^;
「汎用でだれでも使えて活用できるように考えてる」というポリシーで、記事を継続して書いていきたいと思っています。どうぞよろしくお願いしますm(_ _)m

【検討中の今後の記事内容は・・・・】
・実務に役立つものを提供できるよう常に検討しています(^^ゞ
・その他雑記的に「プチネタなど」もいろいろ考えていきたいと思っています・・・・
・今後の記事にご期待ください(^^)/

スポンサーリンク
スポンサーリンク

過去記事のサンプルファイルをダウンロードできます

今回の記事にはサンプルファイルの登録はありません

過去の記事で使用したサンプルファイルをダウンロードできるようにページを設置していますので、こちら(このリンク先)からご利用ください