Вот что вы можете попробовать. Согласно этой записи вы можете сократить свои накладные расходы на 60%, используя функцию Windows API для заполнения поля со списком вместо обычного метода AddItem:
Private Const CB_ERR As Long = -1
Private Const CB_ADDSTRING As Long = &H143
Private Const CB_RESETCONTENT As Long = &H14B
Private Const CB_SETITEMDATA As Long = &H151
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal _
hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Sub AddItem(cmb As ComboBox, Text As Variant, Optional ItemData As Long)
Dim l As Long
Dim s As String
If VarType(Text) = vbString Then
s = Text
Else
s = Trim$(Str$(Text))
End If
l = SendMessage(cmb.hwnd, CB_ADDSTRING, 0&, ByVal s)
If l <> CB_ERR Then
SendMessage cmb.hwnd, CB_SETITEMDATA, l, ByVal ItemData
End If
End Sub
Public Sub Clear(cmb As ComboBox)
SendMessage cmb.hwnd, CB_RESETCONTENT, 0, 0&
End Sub
Возможно, вам удастся немного побриться, пропустив вызов функции и просто вызвав функцию API напрямую.