Introduction:
This article gives two methods to fill a multi column listbox on a userform with data from an Excel worksheet.
- Pulling the worksheet range directly into a listbox
- Pulling the data into an array first, then placing the array in the listbox
The intention of both of these pieces of code is to be used in a userform. Both are set up in the Userform_Intialize event, although only one or other should be used.
Versions Tested:
These routines were tested successfully running Office 2003, but shouldn't have any issue in Excel 97 or higher.
Pulling the worksheet range directly into a listbox
Code:
Private Sub UserForm_Initialize() 'Author : Ken Puls (www.excelguru.ca) 'Macro Purpose: To populate a multi-column listbox with data from ' a worksheet range Dim lbtarget As MSForms.ListBox Dim rngSource As Range 'Set reference to the range of data to be filled Set rngSource = Worksheets("Sheet1").Range("A2:C5") 'Fill the listbox Set lbtarget = Me.ListBox1 With lbtarget 'Determine number of columns .ColumnCount = 3 'Set column widths .ColumnWidths = "50;80;100" 'Insert the range of data supplied .List = rngSource.Cells.Value End With End Sub
Pulling the data into an array first, then placing the array in the listbox
Code:
Private Sub UserForm_Initialize() 'Author : Ken Puls (www.excelguru.ca) 'Macro Purpose: To populate a multi-column listbox with data from ' a worksheet range Dim lb As msforms.ListBox Dim rcArray() As Variant Dim lrw As Long, lcol As Long Dim rngTarget As Range 'Define the range you want to use Set rngTarget = Worksheets("Sheet1").Range("A2:C5") 'Set the boundaries of the array ReDim Preserve rcArray(1 To rngTarget.Rows.Count, 1 To rngTarget.Columns.Count) 'Fill the array with data from the worksheet With rngTarget For lcol = 1 To .Columns.Count For lrw = 1 To .Rows.Count rcArray(lrw, lcol) = rngTarget.Cells(lrw, lcol) Next lrw Next lcol End With 'Place the array in the listbox Set lb = Me.ListBox1 With lb .ColumnCount = 3 .ColumnWidths = "50;80;100" .List = rcArray End With End Sub