I had some very similar code, so I tweaked it and it worked for me.
The following 5 subroutines should get where you need to be. One is what I posted above modified to accept only up to " x 3" for the suffix. It is tied to a command button called "AddCriteria".
The remaining subs will allow you to move the data via double click or drag and drop. The data transfer is one way only (from lst1 to newlst) and the items remain in the lst1 listbox.
Private Sub lst1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Call AddCriteria_Click
End Sub
Private Sub AddCriteria_Click()
fnd = 0
For a = 1 To newlst.ListCount
b = Split(newlst.List(a - 1), " x")
If lst1 = b(0) Then
n = 2
If UBound(b) > 0 Then n = 3
newlst.List(a - 1) = lst1 & " x " & n
fnd = 1
Exit For
End If
Next a
If fnd = 0 Then newlst.AddItem lst1
End Sub
Private Sub newlst_BeforeDragOver(ByVal Cancel As _
MSForms.ReturnBoolean, ByVal Data As _
MSForms.DataObject, ByVal x As Single, _
ByVal y As Single, ByVal DragState As Long, _
ByVal Effect As MSForms.ReturnEffect, _
ByVal Shift As Integer)
Cancel = True
Effect = 1
End Sub
Private Sub newlst_BeforeDropOrPaste(ByVal _
Cancel As MSForms.ReturnBoolean, _
ByVal Action As Long, ByVal Data As _
MSForms.DataObject, ByVal x As Single, _
ByVal y As Single, ByVal Effect As _
MSForms.ReturnEffect, ByVal Shift As Integer)
Cancel = True
Effect = 1
newlst.AddItem Data.GetText
End Sub
Private Sub lst1_MouseMove(ByVal Button As _
Integer, ByVal Shift As Integer, ByVal x As _
Single, ByVal y As Single)
Dim MyDataObject As DataObject
If Button = 1 Then
Set MyDataObject = New DataObject
Dim Effect As Integer
MyDataObject.SetText lst1.Value
Effect = MyDataObject.StartDrag
End If
End Sub