K3. フォームの整理

使用するファイル:「マクロの練習」フォルダー「フォーム作成練習.xlsm」その他

(vba18)
(vba18)

作成したフォームの名前を変更したり、別のエクセルファイルに移動したり、削除したりすることができます。その方法を紹介します。

K3-1. フォーム名を変更する

  1. プロパティ ウインドウの「オブジェクト名」を変更する

ユーザーフォームが選択・表示されている状態で、プロパティウィンドウの「(オブジェクト名)」を変更すると、プロパティウインドウトップにあるユーザーフォーム(UserForm

)の表示が変更される。

 

同時に、プロジェクトエクスプローラーの「フォーム」ツリー上の表示も変更される。

nameform01:フォームの名前を変更する
nameform01:フォームの名前を変更する

⚠️ 名前変更時の「パス名が無効です」という警告

フォームの名前変更で、プロパティウインドウの(オブジェクト名)の内容を変更して辺境しようとしたとき、「パス名が無効です」という警告が出て変更できないことがある。

これは、エクセルブックの他の部分でまだ旧ユーザーフォーム名が参照されている可能性があることを示している。対処方法です。

  1. 全体のコード内で参照を確認:
    Find機能(Ctrl+F)でフォーム名が使用されている箇所を確認
  2. フォームの他のプロパティも確認:
    コントロール(ボタンやテイストボックス)で旧フォーム名が参照されていないかどうかを確認
  3. ユーザーフォームのエクスポートとインポート:
    ユーザーフォームのエクスポート ➨ プロジェクトエクスプローラーから元のユーザーフォームを削除 ➨ 「ファイルからインポート」でエクスポートしたユーザーフォームを再度インポートする
  1. プロパティ ウインドウの「Caption」を変更する

ユーザーフォームが選択・表示されている状態で、プロパティウィンドウの「Caption」を変更すると、フォームの上部にある見出し(あるいはタイトル)部分の表示が変更する。

 

K3-2. フォームをエクスポートする

  1. 元のファイルを開く
  • ユーザーフォームが含まれているエクセルファイル(ここでは「フォーム作成練習.xlsm」)を開く
  1. VBA エディタを開き、フォームを確認する
  • 「Alt」+「F11」キーを押して、VBA エディタを開き、フォームを確認する

ここの例では、UserForm1 と UserForm2 がある。

movefrm01:フォームを確認する
movefrm01:フォームを確認する
  1. フォームをエクスポートする
  • プロジェクトエクスプローラーで、エクスポート(出力)するフォームを右クリックし、「ファイルのエクスポート」を選択する

ここの例では、UserForm2 をエクスポートします。

「エクスポート」とは、"出力する"という意味です。

現在のエクセルファイルにあるフォームを、現エクセルから切り離しし、フォーム単体のファイルとして保存します。

movefrm02:エクスポートするフォームを右クリックし「ファイルのエクスポート」
movefrm02:エクスポートするフォームを右クリックし「ファイルのエクスポート」」
  • 「ファイルのエクスポート」ダイアログ画面で保存場所を指定して、ファイルを保存する

ここでは保存場所(フォルダー)として「マクロの練習」を選ぶ。

またファイル名はユーザーフォーム名が使われているが、このままで「保存」する。

movefrm03:保存場所を指定してフォームを保存する
movefrm03:保存場所を指定してフォームを保存する
  1. エクスポートされたフォームを確認する
  • 保存するときのファイルの拡張子は、「フォーム モジュール(*.frm)」です。
    実際には同じ名前で「*.frx」というファイルも作成され、同じところに保存されます。
movefrm04:拡張子「.frm」と「.frx」との2つのファイルが保存される
movefrm04:拡張子「.frm」と「.frx」との2つのファイルが保存される
  • フォームが出力されると、拡張子は「.frm」と「.frx」という2つのファイルになる
    .frm:フォームのイベント処理コードなどを保持するテキストファイル
    .frx:フォームコントロールの位置などを保持するバイナリファイル、インポート時に読み込まれる

  • この二つのファイルは、ペアのセットで使われるので、片方を削除したりすると、フォームが有効でなくなる。エクスプローラーで移動する時等は、両方セットで移動するようにしょう!

🚫 フォームの名前の変更

エクスポートしたフォームファイルの名前を、Windows Explorer で変更することはやめましょう。変更したファイルは、その後使用できなくなる危険性大です!

K3-3. フォームを別のエクセルファイルにインポートする

  1. フォームのインポート先となる新しいエクセルファイルを開く
  • 保存されたフォームファイル(例えば「UserForm3」)をインポートする新しいマクロ有効エクセルファイルを開く。ここでは「フォーム移動練習.xlsm」を作成し開く

⚠️ 注意:

インポート先のブックに、すでに同じ名前のフォームがある場合は、インポートできません。

  1. インポート先のファイルで VBA エディターを開く
  • 再度「Alt」+「F11」で、VBA エディタを開く
  1. インポート先のファイルでフォームをインポートする
  • VBE のプロジェクトエクスプローラーでインポート先のエクセルファイル名(これを「プロジェクト」と呼ぶ)を右クリックし、「ファイルのインポート」を選択する
movefrm05:プロジェクトを右クリックし「ファイルのインポート」を選択する
movefrm05:プロジェクトを右クリックし「ファイルのインポート」を選択する

🔰プロジェクトとは

プログラミングの世界では、1つのプログラムに必要な複数のファイルを「プロジェクト」にまとめて管理します。

この慣習に従って、Excel VBA でもプロジェクトという呼び方がされ、そのプロジェクトを管理する意味で「プロジェクトエクスプローラー」があります。

Excel VBA のプロジェクトは、ブックと同じものを指すと考えても良いでしょう。

  1. インポートするフォームを選択する
  • 「UserForm3.frm」ファイルを選択して、「開く」でインポートする

もう一方のファイル「UserForm3.frx」は、自動的に選択されインポートされる。

movefrm06:コピー&貼付け&名前変更したフォームを選択してインポートする
movefrm06:コピー&貼付け&名前変更したフォームを選択してインポートする
  1. フォームがインポートされた
  • フォームがインポートされる

移動先のファイルのプロジェクトエクスプローラーのフォームツリーに、インポートしたフォーム「UserForm3」が表示され、それをダブルクリックして表示したコードウィンドウでは、フォームそのものが表示される。 

movefrm07:フォームが追加される
movefrm07:フォームが追加される

K3-4. フォームを削除する

  1. 削除しようとするフォームの内容等を確認する

削除しようとするフォームを、エクスプローラーのツリーから探し、ダブルクリックして内容を表示し、確認する。

delform01:削除しようとするフォーム内容を確認する
delform01:削除しようとするフォーム内容を確認する
  1. 削除しようとするフォームの「ユーザーフォームの解放」をクリックする

プロジェクトエクスプローラーで「フォーム」ツリーにあるフォームを右クリックし、表示されるメニューから「ユーザーフォームの解放」を選択する

delform02:削除するフォーム名「○○フォーム」を右クリックし「○○フォームの解放」を選択する
delform02:削除するフォーム名「○○フォーム」を右クリックし「○○フォームの解放」を選択する
  1. 削除前の「エクスポート」提案には「いいえ」を答える
delform03:削除前にフォームをエクスポートするかどうかには「いいえ」で答える
delform03:削除前にフォームをエクスポートするかどうかには「いいえ」で答える
  1. フォームが削除される

プロジェクトエクスプローラーの「フォーム」ツリーから、該当フォームが削除される。

delform04:プロジェクトエクスプローラーの「フォーム」ツリーから削除された
delform04:プロジェクトエクスプローラーの「フォーム」ツリーから削除された