Всем добрый день! Помогите внести изменения в имеющийся программный код, что бы он заполнялся значениями двух столбцов (H:I). Пока грузится из одного столбца. Объекта txtfltr в моем случае, нет, сортировка не нужна, все это можно выкинуть. Одним словом, что бы заполнялся информацией из двух столбцов без повторов. Спасибо.
[vba]
Код
Private Sub FillList(Optional txtfltr As String)
Dim lt As Integer, Arr lt = Len(txtfltr) lstKod.Clear '***выбор листа***************************************************************** 'Sheets("База").Select Dim myRange As Range, myCell As Range, myCollection As New Collection, _ myElement As Variant, i As Long
'присваиваем массиву диапазон ячеек с исходным списком элементов Стр = (Application.CountA(ActiveSheet.Columns(8)) + 1) - 1 Cells(Стр, 9).Activate k = ActiveCell.Address
'присваиваем массиву диапазон ячеек с исходным списком элементов Arr = Range("$H$2:" + k) '***заполняем ListBox уникальными элементами*********************************** On Error Resume Next For i = 1 To UBound(Arr, 1) If Left(Arr(i, 1), lt) = txtfltr Then myCollection.Add CStr(Arr(i, 1)), CStr(Arr(i, 1)) Next On Error GoTo 0
For Each myElement In myCollection lstKod.AddItem myElement Next myElement
'***сортировка ListBox********************************************************** With lstKod: iCountList = .ListCount - 1 For iCount = iCountList To 1 Step -1 For iCountTemp = iCountList To 1 Step -1 If StrComp(.List(iCountTemp), .List(iCountTemp - 1), vbTextCompare) = -1 Then .AddItem .List(iCountTemp), iCountTemp - 1 .RemoveItem iCountTemp + 1 End If Next Next End With '********************************************************************************** lstKod.ColumnWidths = "0;150"
End Sub
[/vba]
Всем добрый день! Помогите внести изменения в имеющийся программный код, что бы он заполнялся значениями двух столбцов (H:I). Пока грузится из одного столбца. Объекта txtfltr в моем случае, нет, сортировка не нужна, все это можно выкинуть. Одним словом, что бы заполнялся информацией из двух столбцов без повторов. Спасибо.
[vba]
Код
Private Sub FillList(Optional txtfltr As String)
Dim lt As Integer, Arr lt = Len(txtfltr) lstKod.Clear '***выбор листа***************************************************************** 'Sheets("База").Select Dim myRange As Range, myCell As Range, myCollection As New Collection, _ myElement As Variant, i As Long
'присваиваем массиву диапазон ячеек с исходным списком элементов Стр = (Application.CountA(ActiveSheet.Columns(8)) + 1) - 1 Cells(Стр, 9).Activate k = ActiveCell.Address
'присваиваем массиву диапазон ячеек с исходным списком элементов Arr = Range("$H$2:" + k) '***заполняем ListBox уникальными элементами*********************************** On Error Resume Next For i = 1 To UBound(Arr, 1) If Left(Arr(i, 1), lt) = txtfltr Then myCollection.Add CStr(Arr(i, 1)), CStr(Arr(i, 1)) Next On Error GoTo 0
For Each myElement In myCollection lstKod.AddItem myElement Next myElement
'***сортировка ListBox********************************************************** With lstKod: iCountList = .ListCount - 1 For iCount = iCountList To 1 Step -1 For iCountTemp = iCountList To 1 Step -1 If StrComp(.List(iCountTemp), .List(iCountTemp - 1), vbTextCompare) = -1 Then .AddItem .List(iCountTemp), iCountTemp - 1 .RemoveItem iCountTemp + 1 End If Next Next End With '********************************************************************************** lstKod.ColumnWidths = "0;150"
Private Sub FillList() Dim Arr, s As String, i As Long, j As Long Dim myCollection As New Collection
'присваиваем массиву диапазон ячеек с исходным списком элементов With Sheets("Выбор") If .FilterMode Then .ShowAllData 'от 1-й строки до последней заполненной по ст. В Arr = .Range("H1:I" & .Cells(Rows.Count, 2).End(xlUp).Row).Value End With
'***заполняем ListBox уникальными элементами************************ On Error Resume Next: Err.Clear With lstKod .Clear: .ColumnWidths = "20,120" For i = 2 To UBound(Arr, 1) s = Arr(i, 1) & "~" & Arr(i, 2) myCollection.Add s, s If Err Then Err.Clear Else .AddItem Arr(i, 1) .List(j, 1) = Arr(i, 2) j = j + 1 End If Next End With
On Error GoTo 0 End Sub
[/vba]
gvs_svg, привет попробуйте так:
[vba]
Код
Private Sub FillList() Dim Arr, s As String, i As Long, j As Long Dim myCollection As New Collection
'присваиваем массиву диапазон ячеек с исходным списком элементов With Sheets("Выбор") If .FilterMode Then .ShowAllData 'от 1-й строки до последней заполненной по ст. В Arr = .Range("H1:I" & .Cells(Rows.Count, 2).End(xlUp).Row).Value End With
'***заполняем ListBox уникальными элементами************************ On Error Resume Next: Err.Clear With lstKod .Clear: .ColumnWidths = "20,120" For i = 2 To UBound(Arr, 1) s = Arr(i, 1) & "~" & Arr(i, 2) myCollection.Add s, s If Err Then Err.Clear Else .AddItem Arr(i, 1) .List(j, 1) = Arr(i, 2) j = j + 1 End If Next End With
nilem, Спасибо за помощь, все работает, но есть одно "но": - при добавлении программного кода в основной файл, ругается на <.FilterMode> вот таким образом:
nilem, Спасибо за помощь, все работает, но есть одно "но": - при добавлении программного кода в основной файл, ругается на <.FilterMode> вот таким образом:gvs_svg
А зачем Вы апостроф перед With поставили? Он (With) показывал, что работа идет с листом "Выбор". А теперь Excel не знает, к чему относится FilterMode
А зачем Вы апостроф перед With поставили? Он (With) показывал, что работа идет с листом "Выбор". А теперь Excel не знает, к чему относится FilterMode_Boroda_
_Boroda_, ой, как же я опростоволосился.... увидев название листа, не стал дальше вникать и зарэмил его, будучи твердо уверенным, что это ничто иное как <Sheets("Выбор").Select>. Спасибо Вам большое, что указали на мою бестолковость...
_Boroda_, ой, как же я опростоволосился.... увидев название листа, не стал дальше вникать и зарэмил его, будучи твердо уверенным, что это ничто иное как <Sheets("Выбор").Select>. Спасибо Вам большое, что указали на мою бестолковость...gvs_svg