|
▼tk さん:
おはようございます。
Excel2002で確認しました。
リストボックスのクリックイベントを滅多に使わないので初めて知りました。
ちょこっと弄ってみたけど、クリックイベントでの簡単な修正方法は見つかりませんでした。
ただ、リストボックスのクリックイベントでリストボックスの書換えをするのではなく、
もう一つコマンドボタンを設けて、そのクリックイベントで
>>Private Sub ListBox1_Click()
>> ActiveCell.Value = Me.ListBox1.Text
>> Set_list
>> DoEvents
>> Application.Visible = True
>>End Sub
この内容を実行すれば、正常に作動します。
どうしてもリストボックスのクリックイベントがいいなら・・・、
動的にリストボックスを作成して、書換えは、リストボックスを再作成して行なう方法です。
新規ブックにて試してください。
ユーザーフォームを一つ作成してください。
中のコントロールは、コードで作成しますから、何も配置しないでください。
そのユーザーフォーム(UserForm1)のモジュールに
'===================================================================
Option Explicit
Private WithEvents ll As MSForms.ListBox
'===================================================================
Private Sub ll_Click()
ActiveCell.Value = ll.Text
Controls.Remove 2
Set ll = mk_listbox
Set_list ll
End Sub
'===================================================================
Private Sub UserForm_Initialize()
With Me
.Width = 216
.Height = 326
End With
With Controls.Add("Forms.Label.1", , True)
.Left = 18
.Top = 30
.Width = 81
.Height = 18
.SpecialEffect = 2
.BackColor = &HFFFF&
.TextAlign = 2
.Font.Size = 14
.Caption = "コマ"
End With
With Controls.Add("Forms.Label.1", , True)
.Left = 100
.Top = 30
.Width = 81
.Height = 18
.SpecialEffect = 2
.BackColor = &HFFFF00
.TextAlign = 2
.Font.Size = 14
.Caption = "個数"
End With
Set ll = Controls.Add("Forms.ListBox.1", , True)
With ll
.Left = 18
.Top = 54
.Width = 165
.Height = 216
.ColumnCount = 2
.TextColumn = 1
.TextAlign = 2
End With
Set ll = mk_listbox
Set_list ll
End Sub
'===================================================================
Sub Set_list(lll As MSForms.ListBox)
Dim i As Long
Dim dic As Object
Dim myRange As Range
Dim r As Variant
Set dic = CreateObject("Scripting.Dictionary")
ReDim a(1)
For i = 0 To 10
dic(Chr(Asc("a") + i)) = 0
Next
Set myRange = Range("a1:z30")
For Each r In dic.keys
dic(r) = Application.CountIf(myRange, r)
Next
With lll
.List = Application.Transpose(Array(dic.keys, dic.Items))
End With
Set dic = Nothing
End Sub
'===================================================================
Function mk_listbox() As MSForms.ListBox
Set mk_listbox = Controls.Add("Forms.ListBox.1", , True)
With mk_listbox
.Left = 18
.Top = 54
.Width = 165
.Height = 216
.ColumnCount = 2
.TextColumn = 1
.TextAlign = 2
End With
End Function
標準モジュールに
'=============================================================
Sub test()
With Range("a1:z30")
.Formula = "=CHAR(RANDBETWEEN(97,107))"
.Value = .Value
End With
UserForm1.Show vbModeless
End Sub
これで、testを実行して試してみてください。
|
|