I appreciate Gettingbetter linking to one of my posts, which spoke to the issue on that thread of sorting the ComboBox items. The below code, which goes in the userform module, will populate only unique values from column D as you asked, and then sort them in ascending order. Delete the Initialization event code you currently have and replace it with the following code. Remember to clear the RowSource property of your ComboBox first, if you have not already done so. If by chance column D contains formulas, post back...my code assumed it only contains constants.
Private Sub UserForm_Initialize()
Application.ScreenUpdating = False
Dim Coll As Collection, cell As Range
Dim unsorted As Boolean, i As Integer, temp As Variant
On Error Resume Next
Set Coll = New Collection
With ComboBox1
.Clear
For Each cell In Worksheets("Sheet1").Columns(4).SpecialCells(2)
If Len(cell) <> 0 Then
Err.Clear
Coll.Add cell.Value, cell.Value
If Err.Number = 0 Then .AddItem cell.Value
End If
Next cell
unsorted = True
Do
unsorted = False
For i = 0 To UBound(.List) - 1
If .List(i) > .List(i + 1) Then
temp = .List(i)
.List(i) = .List(i + 1)
.List(i + 1) = temp
unsorted = True
Exit For
End If
Next i
Loop While unsorted = True
.ListIndex = 0 'optional
End With
Set Coll = Nothing
Application.ScreenUpdating = True
End Sub