Я пытаюсь заполнить мой ComboBox1 в UserForm3 рядом данных. Это проблема.
У меня есть 3 листа:
- Лист1 со списком для завершения
- Лист2 с именованным диапазоном (Список1, Список2 и т. Д.), Составленный из списка конкретного продуктаlist (например, List1 имеет 3 строки с продуктами Pr1, Pr3 и Pr4)
- Sheet3 со списком товаров, сохраненных как именованный диапазон «itemlist» (ColumnA с названиями товаров с повторением (Pr1, Pr2, Pr3, Pr1, Pr2, Pr4 и т. Д.) И ColumnB с номерами партий для различных продуктов (Lo1, Lo8, Lo4, Lo2 и т. Д. Для каждого PrX в неупорядоченном списке, т. Е. Pr1 может иметь 3 лота (Lo1, Lo2, Lo3), Pr3 4лоты (Lo4, Lo5, Lo6, Lo7) и т. д.)
Итак, теперь, когда мой макрос нашел именованный диапазон в Sheet1! ColumnA (например, List1 в A2), макрос скопирует строки вSheet1! ColumnB. Работает нормально. Теперь я хочу вызвать UserForm3 для каждой из этих строк Sheet1! ColumnB (т.е. только что скопированные названия продуктов, в моем примере теперь Pr1 в B2, Pr3 в B3 и Pr4 в B4)и заполните список Combobox1 номерами лотов для различных продуктов, найденных вSheet3 (т. Е. Для Pr1 в B2 список Combobox1 должен иметь Lo1, Lo2 и Lo3, Pr3 в B3 должен иметь Lo4, Lo5, Lo6 и Lo7 и т. Д.).
Здесь код для макроса Sheet1
Option Explicit
Public xlot As String
Sub Protocols()
ThisWorkbook.Sheets("Sheet1").UsedRange.Select
Dim MyRange As Range
Dim wsI As Worksheet, wsO As Worksheet
Dim cell As Range
Dim nm As Name
Dim xlot As Variant
Dim rngpro As Variant
Dim i As Variant
With ThisWorkbook.Sheets("Sheet1").UsedRange
Set MyRange = Range(.Cells(2, 1), .Cells(1, 1).Offset(.Rows.Count - 1, .Columns.Count - 1))
MyRange.Select
End With
Set wsI = ThisWorkbook.Sheets("Sheet2")
Set wsO = ThisWorkbook.Sheets("Sheet1")
On Error Resume Next
For Each cell In MyRange.Columns("A").Cells
If IsEmpty(cell) = True Then
Else
For Each nm In ThisWorkbook.Names
If cell.Value = nm.Name Then Exit For 'search through ListX in Sheet2
Next nm
wsI.Range(nm.Name).Copy wsO.Cells(cell.Row, "B") 'copy the founded ListX list in Sheet1 (e.g. the 3 rows for the List1)
rngpro = wsI.Range(nm.Name).Rows.Count
For i = cell.Row To cell.Row + rngpro - 1
UserForm3.Show
xlot = UserForm3.ComboBox1.Value
Cells(i, "C") = xlot 'insert the combobox1 choice in C (e.g. one of the lot number Lo1, Lo2 or Lo3)
Next i
End If
Line3: Next cell
On Error GoTo 0
End Sub
А код UserForm3 здесь:
Option Explicit
Public xlot As String
Public i As Variant 'the variable from Sheet1 that userform could be read
Private Sub CommandButton1_Click()
UserForm3.Hide
End Sub
Private Sub ComboBox1_AfterUpdate()
xlot = ComboBox1.Value
End Sub
Private Sub Label1_Click()
lcell.Value = ComboBox1.Name
End Sub
Private Sub Userform_Initialize()
Dim xlots As Variant
Dim nm As Name
Dim lcell As Range
Dim cellot As Range
Dim wsO As Worksheet
[itemlist].Select 'the named range table in Sheet3 with product names in column(A) and lot number in column(B)
For Each lcell In Range("itemlist").Columns(1).Cells
If lcell.Value = i Then 'search the product name PrX
Cells(lcell.Row, "B").Value = cellot 'the lot number for the founded PrX (e.g. Pr1)
With ComboBox1
.AddItem cellot.Offset(0, 1).Value
End With
End If
Next lcell
End Sub