Selected Answer

This code will do the job.

```
Private Sub UserForm_Initialize()
' 15 Apr 2018
Dim Arr() As Variant
Dim i As Long
Arr = ActiveSheet.Range("Destination").Value
With ListBox1
.Clear
.TextColumn = 1
For i = 1 To UBound(Arr)
.AddItem Arr(i, 1)
Next i
End With
End Sub
```

Reading the entire range into an array and then the array into the ListBox is faster than accessing the sheet multiple times. However, if the entries are few it probably doesn't matter.

More important is the definition of the worksheet. Your code leaves its choice to chance, implicitly. Mine points out that it is left to chance (whichever happens to be active at the time). Could be that the sheet is determined by how the form is called and therefore not left to chance but it's a point worth paying attention to if one considers the possible consequences of not doing so.

Here is a variation of the above which leaves the ListBox's existing list in place.

```
Private Sub UserForm_Initialize()
' 15 Apr 2018 Var 1.0
Dim Arr() As Variant
Dim Idx As Long
Dim i As Long
Arr = ActiveSheet.Range("Destination").Value
With ListBox1
Idx = .ListCount
For i = 1 To UBound(Arr)
.AddItem Arr(i, 1), Idx
Idx = Idx + 1
Next i
End With
End Sub
```

Note the relationship between *ListCount* (1 based) and *ListIndex* (0 based). Therefore in this variation the new item is added to *ListIndex + 1*, meaning an item that doesn't exist yet or is just being created.

Observe that I removed the line *.TextColumn = 1*. I previously added it to show that you can set all kinds of properties at that point. Actually, in a single column ListBox it's superfluous.