Я хотел бы отфильтровать результаты на листе и создать Listbox с этим результатом, этот код работает на listbox на листе, но не работает над формой, любой идеей?Создать список с отфильтрованным значением vba excel
Sub MyListBox()
Dim rng As Range
Dim vArr As Variant
Dim ListBox1 As Object ---> this works on sheet but not works on form
Dim x As Single
Dim y As String
y = Worksheets("Sheet2").Cells(1, 12).Value
x = Worksheets("Sheet2").Cells(2, 12).Value
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.DisplayAlerts = False
Set rng = Range("TestMaterial")
Set ListBox1 = ActiveSheet.OLEObjects(1).Object ---> this works on sheet but not works on form
rng.AutoFilter field:=13, Criteria1:=y
rng.AutoFilter field:=12, Criteria1:=x
Worksheets.Add
rng.SpecialCells(xlCellTypeVisible).Copy Range("a1")
vArr = ActiveSheet.UsedRange
With ListBox1
.List = (vArr)
End With
ActiveSheet.Delete
Worksheets("TRAINING").AutoFilterMode = False
'rng.AutoFilter.Clear
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.DisplayAlerts = True
End Sub
Я нашел этот код, но это создает новый ListBox, но не заполнять список с данными, только заголовки, не смогли найти то, что неправильно и как я могу заполнить существующий ListBox с этим кодом?
Sub MyListBox()
Dim rng As Range
Dim vArr As Variant
Dim ListBox1 As MSForms.Control
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.DisplayAlerts = False
Set rng = Range("TestMaterial")
Set ListBox1 = frmplan.Controls.Add("Forms.ListBox.1") ---> adds new Listbox to form even I have some one with name "Listbox1"
rng.AutoFilter field:=13, Criteria1:=txtsdept.Value
rng.AutoFilter field:=12, Criteria1:=txtsgrade
Worksheets.Add
rng.SpecialCells(xlCellTypeVisible).Copy Range("a1")
vArr = ActiveSheet.UsedRange
With ListBox1
.List = (vArr)
End With
ActiveSheet.Delete
Worksheets("TRAINING").AutoFilterMode = False
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.DisplayAlerts = True
End Sub
Если код находится в пользовательской форме, вам не нужна переменная - просто обратитесь к списку по имени: 'ListBox1.List = vArr' – Rory
Вышеприведенный код верен, и он будет работать нормально. Убедитесь, что выбранный диапазон содержит данные или нет, потому что данные UserRange добавлены в ListBox. Также я считаю, что TestMaterial является допустимым диапазоном (например, «A1: A5») –
Во втором коде можно заполнить существующий список без создания нового? В первом коде можно создать Listbox и заполнить его, но во втором коде даже у меня есть код Listbox, который создает новый. –