プロが教える店舗&オフィスのセキュリティ対策術

Excel初心者です。
フォームにリストボックスを2つ作り登録まで出来たのですが、ワークシートにも同じリストボックスを作りたいのですが出来ません、、、
どうしたらワークシートにも作れるでしょうか?
ちなみに下記がフォームのリストボックスのマクロになります。

Private Sub UserForm_Initialize()
Dim lRow As Long
With Worksheets("Sheet1")
lRow = .Range("A" & Rows.Count).End(xlUp).Row
End With
With ListBox1
.ColumnCount = 2
.ColumnWidths = "100;20"
.RowSource = "Sheet1!A2:C" & lRow
.ColumnHeads = True
End With

With Worksheets("Sheet1")
lRow = .Range("D" & Rows.Count).End(xlUp).Row
End With
With ListBox2
.ColumnCount = 2
.ColumnWidths = "100;20"
.RowSource = "Sheet1!D2:E" & lRow
.ColumnHeads = True
End With

End Sub

教えてください。
よろしくお願いします。

A 回答 (1件)

こんな感じで、どうでしょうか。

とりあえず、リストボックス1個分のサンプルとしました。

フォームのリストボックスとシートのリストボックス(ActiveX)では、プロパティに若干の違いがあるようなのでご注意ください。

それから、フォームには事前にリストボックスを張り付けてあって、マクロでプロパティを設定していると思いますが、サンプルでは、シート上にリストボックスを新規作成してからプロパティを設定します。よって、何回も実行すると、その分だけリストボックスが作成されてしまいます。使用目的に合わせて、事前に作成しておく、または、都度削除する等の対応が必要かもしれません。

Sub sample()
Dim lRow As Long
Dim ListBox1 As Object
With Worksheets("Sheet1")
lRow = .Range("A" & Rows.Count).End(xlUp).Row
Set ListBox1 = .OLEObjects.Add(ClassType:="Forms.ListBox.1", Link:=False, _
DisplayAsIcon:=False, Left:=113.25, Top:=42.75, Width:=204, Height:=130.5)
End With
With ListBox1
.Object.ColumnCount = 2
.Object.ColumnWidths = "100;20"
.ListFillRange = "Sheet1!A2:C" & lRow
.Object.ColumnHeads = True
End With
End Sub
    • good
    • 0

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