• ベストアンサー

VBAでユーザーフォームを再表示させたい。

ExcelのVBAでユーザーフォームを作成し、 Initializeイベントで初期化をし、コマンドボタンを クリックしたら処理を行うように作成しました。 ところがコマンドボタンによって処理を行った後、 再度Initializeイベントを呼びたいんです。。 (コンボボックスの表示を更新する処理を 含んでいるため) なんとかうまい方法はないでしょうか??

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

まったく、トンチンカンな答えかも知れませんが・・・ > まったく、このコンボボックスの内容が変化しないんです。 UserForm4.ComboBox1.AddItem は後へ後へと追加するばかりだと思うんです。 つまり、下の方に変化した内容がありませんか? 最初から入れ直したいのであれば、コンボボックスをクリアする必要があると思うのですが。 で、3行目にクリアするのを追加してみました。 Private Sub UserForm_Initialize() Dim i As Integer UserForm4.ComboBox1.Clear Worksheets("Sheet1").Select Range("B4").Select For i = 4 To 200 If Range("B" & i).Value <> "" Then UserForm4.ComboBox1.AddItem Range("B" & i).Value End If Next i End Sub

その他の回答 (3)

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.4

#2です。 #3さんのおっしゃるように追加されているだけです。 10行くらいのリストで下記のようにすると解かります。 Private Sub CommandButton1_Click()  Call UserForm_Initialize  ComboBox1.ListRows = ComboBox1.ListCount End Sub #3さんの回答で解決と思いますが、途中に空白行が無いリストなら RowSource を使って処理をした方がモードレスでユーザーフォームを呼んだ時にセルの値がタイムリーに変化するように出来ます。 '**************************** 'フォームモジュール '↓フォームモジュールの一番上に宣言 Dim LRow As Long Private Sub CommandButton1_Click()  '---最下部にランダムな数字を追加する-----------  Randomize  Worksheets("Sheet1").Range("B" & LRow + 1) = _           Int((100 - 1 + 1) * Rnd + 1)  '----------------------------------------------  Call UserForm_Initialize End Sub Private Sub UserForm_Initialize() Dim s As String  With Worksheets("Sheet1")    LRow = .Range("B65536").End(xlUp).Row    s = .Range("B4:B" & LRow).Address  End With  ComboBox1.RowSource = s End Sub '**************************** '標準モジュール Sub フォーム表示()  UserForm1.Show 0 End Sub

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.2

#1さんの回答通り、単純に Call してもOKですし、 Private Sub CommandButton1_Click()  'ほげほげの処理  Call UserForm_Initialize End Sub こんな感じで別のルーチンにしても良いと思います。 *********************** Private Sub UserForm_Initialize()  myMsg ("起動") End Sub Private Sub CommandButton1_Click()  myMsg ("ボタン押下") End Sub Private Sub myMsg(s As String)  MsgBox s End Sub ***********************

noriemon
質問者

補足

お返事ありがとうございます。 ところが、Callしてもコンボボックスには元のデータが表示されたままなんですよね。 ちなみにInitializeイベントはこんな感じなのですが、、、 Private Sub UserForm_Initialize() Dim i As Integer Worksheets("Sheet1").Select Range("B4").Select For i = 4 To 200 If Range("B" & i).Value <> "" Then UserForm4.ComboBox1.AddItem Range("B" & i).Value End If Next i End Sub まったく、このコンボボックスの内容が変化しないんです。 コンボボックスの中身のリセットみたいなことをしたほうがいいんでしょうか?また、どのようにやったらいいのか、思いつきません。よいアイディアがあったら教えてください。

noname#6715
noname#6715
回答No.1

callで呼べませんか?

関連するQ&A