I очень рекомендую подход с использованием For-Each
, подобный тому, который продемонстрировал Jvdv, так как он прост, интуитивен и элегантен.
Если, однако, вам абсолютно необходимо сделать это по-своему (объединяя два списка в один), то вот мое предложение:
Sub initializeCombo()
Dim sht1 As Worksheet
Dim sht2 As Worksheet
Dim sht3 As Worksheet
Dim rng1 As Range
Dim rng2 As Range
Dim lst1 As Variant
Dim lst2 As Variant
Dim lst3 As Variant
Dim i As Long
Set sht1 = ThisWorkbook.Worksheets("WS1") 'The worksheet where the first list is
Set sht2 = ThisWorkbook.Worksheets("WS2") 'The worksheet where the second list is
Set sht3 = ThisWorkbook.Worksheets("WS3") 'The worksheet where the ComboBoxt is
Set rng1 = sht1.Range(sht1.Range("A1"), sht1.Range("A" & sht1.Rows.Count).End(xlUp))
Set rng2 = sht2.Range(sht2.Range("A1"), sht2.Range("A" & sht2.Rows.Count).End(xlUp))
lst1 = rng1
lst2 = rng2
''''''''''''Combine the 2 lists into one'''''''''''''
ReDim lst3(1 To UBound(lst1) + UBound(lst2)) '
For i = LBound(lst1) To UBound(lst1) Step 1 '
lst3(i) = lst1(i, 1) '
Next i '
For i = UBound(lst1) + 1 To UBound(lst3) Step 1 '
lst3(i) = lst2(i - UBound(lst1), 1) '
Next i '
'''''''''''''''''''''''''''''''''''''''''''''''''''''
sht3.OLEObjects("ComboBox1").Object.List() = lst3
End Sub
Наконец, если вы хотите программно создать, например, комбинированный список ActiveX
в рабочем листе sht3 и назначить его с lst3
, вы должны сделать это так:
Dim Ctrl As Object
Set Ctrl = sht3.OLEObjects.Add(ClassType:="Forms.ComboBox.1").Object
Ctrl.List() = lst3
UPDATE
Версия JvdV, модифицированная для работы со списком ActiveX, будет выглядеть так:
Sub initializeCombo2()
Dim sht1 As Worksheet, sht2 As Worksheet, sht3 As Worksheet
Dim lst1 As Range, lst2 As Range, cell As Range
Dim Ctrl As Object
Set sht1 = ThisWorkbook.Worksheets("BaseAliments") 'The worksheet where the first list is
Set sht2 = ThisWorkbook.Worksheets("BaseRecettes") 'The worksheet where the second list is
Set sht3 = ThisWorkbook.Worksheets("Menu") 'The worksheet where the ComboBoxt is
Set lst1 = sht1.Range(sht1.Range("A1"), sht1.Range("A" & sht1.Rows.Count).End(xlUp))
Set lst2 = sht2.Range(sht2.Range("A1"), sht2.Range("A" & sht2.Rows.Count).End(xlUp))
Set Ctrl = sht3.OLEObjects.Add(ClassType:="Forms.ComboBox.1").Object
For Each cell In lst1
Ctrl.AddItem cell.Value
Next cell
For Each cell In lst2
Ctrl.AddItem cell.Value
Next cell
End Sub