色彩検定1級を取得する魅力を紹介♪

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

gooドクター

A 回答 (4件)

まったく、トンチンカンな答えかも知れませんが・・・


> まったく、このコンボボックスの内容が変化しないんです。

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
    • good
    • 3

#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
    • good
    • 0

#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
***********************

この回答への補足

お返事ありがとうございます。
ところが、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

まったく、このコンボボックスの内容が変化しないんです。
コンボボックスの中身のリセットみたいなことをしたほうがいいんでしょうか?また、どのようにやったらいいのか、思いつきません。よいアイディアがあったら教えてください。

補足日時:2004/01/07 23:10
    • good
    • 2

callで呼べませんか?

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング