I'd say the latter, although if it was me, I'd loop through the recordset and apply it to the listbox one item at a time using .additem.
My reason for this is I like userforms to be independant of the workbook, but if you wanted to go the route of pasting to a worksheet, I'd suggest creating a new sheet which you can delete once the form is finished with it.
arrValues = rst.GetRows() ' change rst to your variable
' not sure if you need to transpose or not
Listbox1.List = arrValues
ListBox1.List = Application.Transpose(arrValues)
Function TransposeGetRows(varData) As Variant
Dim lngRow As Long, lngCol As Long
Dim varOut()
ReDim varOut(1 To UBound(varData, 2) + 1, 1 To UBound(varData, 1) + 1)
For lngRow = LBound(varData, 2) To UBound(varData, 2)
For lngCol = LBound(varData, 1) To UBound(varData, 1)
varOut(lngRow + 1, lngCol + 1) = varData(lngCol, lngRow)
Next lngCol
Next lngRow
TransposeGetRows = varOut
End Function
How many fields are in the recordset?
If there's only one you might be able to use GetRows.
Code:arrValues = rst.GetRows() ' change rst to your variable ' not sure if you need to transpose or not Listbox1.List = arrValues ListBox1.List = Application.Transpose(arrValues)