У меня проблемы с передачей ComboBox в качестве аргумента в подпроцесс. Раньше я использовал подпроцесс для упорядочивания содержимого каждого ComboBox, и сейчас я пытаюсь уменьшить код.
Я объясняю:
Форма содержит N ComboBox (1, 2, ... N), каждый из которых заполнен содержимым столбца таблицы. Например:
Set NColumn = TStaff.ListColumns("NameStaff").DataBodyRange
Me.ComboBox1.List = NColumn.value
SortComboBox1
Set IDColumn = TStaff.ListColumns("IDStaff").DataBodyRange
Me.ComboBox2.List = IDColumn.value
SortComboBox2
...
SortComboBoxN
Код, используемый для заказа содержимого каждого ComboBox, следующий:
Private Sub SortComboBox1()
Dim i As Long
Dim j As Long
Dim sTemp As String
Dim LbList As Variant
LbList = Me.ComboBox1.List
For i = LBound(LbList, 1) To UBound(LbList, 1) - 1
For j = i + 1 To UBound(LbList, 1)
If LbList(i, 0) > LbList(j, 0) Then
sTemp = LbList(i, 0)
LbList(i, 0) = LbList(j, 0)
LbList(j, 0) = sTemp
End If
Next j
Next i
Me.ComboBox1.Clear
Me.ComboBox1.List = LbList
End Sub
Private Sub SortComboBox2()
...
End sub
...
Private Sub SortComboBoxN()
...
End sub
То, что я ищу, это подпроцесс, который получает в качестве аргумента любой ComboBox (или его содержимое) и избегает повторения одного и того же кода для упорядочения каждого ComboBox.
Мой первый подход был такой, но возникает «ошибка 424» (требуется объект):
Modulo1:
Public CBox As ComboBox
UserForm (код)
Private Sub UserForm_Initialize()
...
Me.ComboBox1.List = NColumn.value
SortCBox (Me.ComboBox1)
Me.ComboBox2.List = IDColumn.value
SortCBox (Me.ComboBox2)
End Sub
Private Sub SortCBox(ByRef CBox As MSForms.ComboBox)
Dim i As Long
Dim j As Long
Dim sTemp As String
Dim LbList As Variant
LbList = CBox.List
For i = LBound(LbList, 1) To UBound(LbList, 1) - 1
For j = i + 1 To UBound(LbList, 1)
If LbList(i, 0) > LbList(j, 0) Then
sTemp = LbList(i, 0)
LbList(i, 0) = LbList(j, 0)
LbList(j, 0) = sTemp
End If
Next j
Next i
CBox.Clear
CBox.List = LbList
End Sub
В чем проблема?
* Если у кого-то есть другой подход, спасибо за предложения