Excel VBA 質問スレッド №2135 (解決済)

ユーザーフォームについて

投稿者 : 初心者     投稿日時 : 2025/07/03(Thu) 16:04:33     OS : Windows 11     EXCEL : 未指定
①ユーザーフォームを立ちあげた際に

UserForm_Initializeで

Dim chk As Integer
chk = MsgBox("登録・編集をしますか?", vbYesNo + vbQuestion, "確認メッセージ")

If chk = vbYes Then
MsgBox "「はい」が押されました、実行します"
ActiveCell.Offset(1, 0).Activate
Me.lbl基準日.Caption = Cells(1, 3).Text
Me.lblNo2.Caption = Cells(ActiveCell.Row, "A").Text
Me.lbl在籍期間.Caption = Cells(ActiveCell.Row, "G").Text
Me.lbl年齢.Caption = Cells(ActiveCell.Row, "V").Text
Me.lbl職員名.Caption = Cells(ActiveCell.Row, "B").Text
Me.lbl行番号.Caption = ActiveCell.Row
Call updateForm
Else
MsgBox "「いいえ」が押されました、終了します"
End If

のような処理をしています。

 ユーザーフォームを閉じる際は hide で閉じています

②再度編集をしようと、ユーザーフォームを立ち上げると、メーセージボックスもでず、テキストボックスがアクティブ行に変更されず、直前に編集したデータが残ったままとなってしまいます。

③ユーザーフォームを閉じる処理に unload を使っても結果は同じでした


ユーザーフォームを立ち上げた際に、UserForm_Initializeが反応するときと、しない時があります。

毎回UserForm_Initializeが反応するようにするにはどのような処理が不足していますでしょうか?

情報不足であることは承知の上での質問です。ご指導宜しくお願い致します。

スポンサーリンク
[返信 1] Re : ユーザーフォームについて
投稿者 : ごんぼほり     投稿日時 : 2025/07/03(Thu) 17:22:59
UserForm_Initialize はインスタンスが作成されるときに発生するイベントです

Me.Hide は、インスタンスが破棄されずに非表示になるだけなので、次回ShowしたときにUserForm_Initializeが発生しません
Unload Me は、インスタンスが破棄されるので、次回ShowしたときにUserForm_Initializeが発生します

>③ユーザーフォームを閉じる処理に unload を使っても結果は同じでした
私の環境では再現しません

コマンドボタンが2つだけの簡単かUserFormを作成して確認してみてください。

対応としては、UserForm1.Show する前に分岐しちゃえばいいと思います。

' -- 標準モジュール --
Sub sample()
  Select Case MsgBox("登録・編集をしますか?", vbYesNo + vbQuestion, "確認メッセージ")
     Case vbYes
         MsgBox "「はい」が押されました、実行します"
         UserForm1.Show
     Case vbNo
         MsgBox "「いいえ」が押されました、終了します"
         Exit Sub
  End Select
End Sub

' -- UserForm1 ---
Private Sub UserForm_Initialize()
  MsgBox "Initialize"
End Sub

Private Sub CommandButton1_Click()
  Me.Hide
End Sub

Private Sub CommandButton2_Click()
  Unload Me
End Sub

[返信 2] Re : ユーザーフォームについて
投稿者 : 初心者     投稿日時 : 2025/07/04(Fri) 12:21:31
ありがとうございます!

解決しました。しかも、習い始めたものにとって、新たな技まで伝授していただき勉強になりました。

ご指導ありがとうございます。


■[返信 1] ごんぼほりさん(2025-07-03 17:22:59)の記事
> UserForm_Initialize はインスタンスが作成されるときに発生するイベントです

> Me.Hide は、インスタンスが破棄されずに非表示になるだけなので、次回ShowしたときにUserForm_Initializeが発生しません
> Unload Me は、インスタンスが破棄されるので、次回ShowしたときにUserForm_Initializeが発生します

> >③ユーザーフォームを閉じる処理に unload を使っても結果は同じでした
> 私の環境では再現しません

> コマンドボタンが2つだけの簡単かUserFormを作成して確認してみてください。

> 対応としては、UserForm1.Show する前に分岐しちゃえばいいと思います。

> ' -- 標準モジュール --
> Sub sample()
> Select Case MsgBox("登録・編集をしますか?", vbYesNo + vbQuestion, "確認メッセージ")
> Case vbYes
> MsgBox "「はい」が押されました、実行します"
> UserForm1.Show
> Case vbNo
> MsgBox "「いいえ」が押されました、終了します"
> Exit Sub
> End Select
> End Sub

> ' -- UserForm1 ---
> Private Sub UserForm_Initialize()
> MsgBox "Initialize"
> End Sub

> Private Sub CommandButton1_Click()
> Me.Hide
> End Sub

> Private Sub CommandButton2_Click()
> Unload Me
> End Sub



[返信 3] Re : ユーザーフォームについて
投稿者 : 初心者     投稿日時 : 2025/07/04(Fri) 12:22:50
解決済処理しました

当掲示板について
  • Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
  • 記事内ではHTMLのタグは使用できません。
  • 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
  • Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
  • Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
お 名 前  :
内  容   :

ステータス  :

認証コード  : キャプチャ画像 




( 処理日時 : 2025-08-27 00:28:59 )
タイトルとURLをコピーしました