Доброе время суток! подскажите как совместить этот код [vba]
Код
.RowSource = "=A2:D2"
[/vba] с этим [vba]
Код
Private Sub UserForm_Initialize() With ListBox1 .ColumnHeads = True .ColumnCount = 4 .ColumnWidths = "60;80;60;30" .MultiSelect = fmMultiSelectSingle .TextColumn = 1 .BoundColumn = 0 For i = 1 To Sheets(1).Cells(Rows.Count, 2).End(xlUp).Row If Sheets(1).Cells(i, 2).Value = "см" Then .AddItem (Sheets(1).Cells(i, 1).Value) Next End With
[/vba]
Ну или может другие есть способы подскажите Принцип (В диалоговом окне, в листбоксе выходит информация с листа excel, но с одного столбца, а мне надо с двух)
Доброе время суток! подскажите как совместить этот код [vba]
Код
.RowSource = "=A2:D2"
[/vba] с этим [vba]
Код
Private Sub UserForm_Initialize() With ListBox1 .ColumnHeads = True .ColumnCount = 4 .ColumnWidths = "60;80;60;30" .MultiSelect = fmMultiSelectSingle .TextColumn = 1 .BoundColumn = 0 For i = 1 To Sheets(1).Cells(Rows.Count, 2).End(xlUp).Row If Sheets(1).Cells(i, 2).Value = "см" Then .AddItem (Sheets(1).Cells(i, 1).Value) Next End With
[/vba]
Ну или может другие есть способы подскажите Принцип (В диалоговом окне, в листбоксе выходит информация с листа excel, но с одного столбца, а мне надо с двух)Алексей191919
Сообщение отредактировал Алексей191919 - Вторник, 19.02.2019, 22:47
Private Sub UserForm_Initialize() With ListBox1 .ColumnHeads = True .ColumnCount = 4 .ColumnWidths = "60;80;60;30" .MultiSelect = fmMultiSelectSingle .TextColumn = 1 .BoundColumn = 0 For i = 1 To Sheets(1).Cells(Rows.Count, 2).End(xlUp).Row If Sheets(1).Cells(i, 2).Value = "см" Then .AddItem Sheets(1).Cells(i, 1).Value .List(.ListCount - 1, 1) = Sheets(1).Cells(i, 4).Value End If Next End With
[/vba]
то что то не получается
если вот так [vba]
Код
Private Sub UserForm_Initialize() With ListBox1 .ColumnHeads = True .ColumnCount = 4 .ColumnWidths = "60;80;60;30" .MultiSelect = fmMultiSelectSingle .TextColumn = 1 .BoundColumn = 0 For i = 1 To Sheets(1).Cells(Rows.Count, 2).End(xlUp).Row If Sheets(1).Cells(i, 2).Value = "см" Then .AddItem Sheets(1).Cells(i, 1).Value .List(.ListCount - 1, 1) = Sheets(1).Cells(i, 4).Value End If Next End With
Непонятно, что Вы хотите получить. Прячете два столбца listBox (ширина нулевая). Я в своем примере выводил данные во второй столбец, в примере он невидим.
Параметры listBox заданы вручную (окно Properties), без VBA. Отобразил столбцы, данные со всех 4-х столбцов таблицы попадают в listBox [vba]
Код
Private Sub UserForm_Initialize() Dim i As Long With lbDays For i = 1 To Sheets(1).Cells(Rows.Count, 2).End(xlUp).Row If Sheets(1).Cells(i, 3).Value = "ñì" Then .AddItem Sheets(1).Cells(i, 1).Value .List(.ListCount - 1, 1) = Sheets(1).Cells(i, 2).Value .List(.ListCount - 1, 2) = Sheets(1).Cells(i, 3).Value .List(.ListCount - 1, 3) = Sheets(1).Cells(i, 4).Value End If Next i End With End Sub
[/vba] Правильнее: взять данные с листа в массив и обрабатывать его, без обращения к листу. Но это для Вас, надеюсь, будет следующим шагом
Непонятно, что Вы хотите получить. Прячете два столбца listBox (ширина нулевая). Я в своем примере выводил данные во второй столбец, в примере он невидим.
Параметры listBox заданы вручную (окно Properties), без VBA. Отобразил столбцы, данные со всех 4-х столбцов таблицы попадают в listBox [vba]
Код
Private Sub UserForm_Initialize() Dim i As Long With lbDays For i = 1 To Sheets(1).Cells(Rows.Count, 2).End(xlUp).Row If Sheets(1).Cells(i, 3).Value = "ñì" Then .AddItem Sheets(1).Cells(i, 1).Value .List(.ListCount - 1, 1) = Sheets(1).Cells(i, 2).Value .List(.ListCount - 1, 2) = Sheets(1).Cells(i, 3).Value .List(.ListCount - 1, 3) = Sheets(1).Cells(i, 4).Value End If Next i End With End Sub
[/vba] Правильнее: взять данные с листа в массив и обрабатывать его, без обращения к листу. Но это для Вас, надеюсь, будет следующим шагом vikttur
Есть ещё одна просьба если не затруднит и время позволит в этой же книге есть скрипт переноса выбранной строки(или несколько) в диалоговом окне , при нажатие на кнопку переносится на другой лист, но вот переносится только 1 столбец, а хотелось бы чтоб вся выделенная строка(т.е. несколько столбцов в строке) заранее спасибо
Спасибо большое всё получилось, Вы профи!!!
Есть ещё одна просьба если не затруднит и время позволит в этой же книге есть скрипт переноса выбранной строки(или несколько) в диалоговом окне , при нажатие на кнопку переносится на другой лист, но вот переносится только 1 столбец, а хотелось бы чтоб вся выделенная строка(т.е. несколько столбцов в строке) заранее спасибоАлексей191919
Доброе время суток! Решил не начинать новую тему, так как смысл один и тоже, только усложнённый в фаил добавил окно 2 хотелось бы как то клонировать а показывает ошибку [vba]
Код
Private Sub UserForm_Initialize() Dim i As Long With lbDays For i = 1 To Sheets(1).Cells(Rows.Count, 2).End(xlUp).Row If Sheets(1).Cells(i, 3).Value = "см" Then .AddItem Sheets(1).Cells(i, 1).Value .List(.ListCount - 1, 1) = Sheets(1).Cells(i, 2).Value .List(.ListCount - 1, 2) = Sheets(1).Cells(i, 3).Value .List(.ListCount - 1, 3) = Sheets(1).Cells(i, 4).Value End If Next i End With Dim i As Long With lbDays1 For i = 1 To Sheets(1).Cells(Rows.Count, 2).End(xlUp).Row If Sheets(1).Cells(i, 3).Value = "м" Then .AddItem Sheets(1).Cells(i, 1).Value .List(.ListCount - 1, 1) = Sheets(1).Cells(i, 2).Value .List(.ListCount - 1, 2) = Sheets(1).Cells(i, 3).Value .List(.ListCount - 1, 3) = Sheets(1).Cells(i, 4).Value End If Next i End With End Sub
[/vba] подскажите где ошибка при совмещении
Доброе время суток! Решил не начинать новую тему, так как смысл один и тоже, только усложнённый в фаил добавил окно 2 хотелось бы как то клонировать а показывает ошибку [vba]
Код
Private Sub UserForm_Initialize() Dim i As Long With lbDays For i = 1 To Sheets(1).Cells(Rows.Count, 2).End(xlUp).Row If Sheets(1).Cells(i, 3).Value = "см" Then .AddItem Sheets(1).Cells(i, 1).Value .List(.ListCount - 1, 1) = Sheets(1).Cells(i, 2).Value .List(.ListCount - 1, 2) = Sheets(1).Cells(i, 3).Value .List(.ListCount - 1, 3) = Sheets(1).Cells(i, 4).Value End If Next i End With Dim i As Long With lbDays1 For i = 1 To Sheets(1).Cells(Rows.Count, 2).End(xlUp).Row If Sheets(1).Cells(i, 3).Value = "м" Then .AddItem Sheets(1).Cells(i, 1).Value .List(.ListCount - 1, 1) = Sheets(1).Cells(i, 2).Value .List(.ListCount - 1, 2) = Sheets(1).Cells(i, 3).Value .List(.ListCount - 1, 3) = Sheets(1).Cells(i, 4).Value End If Next i End With End Sub
[/vba] подскажите где ошибка при совмещенииАлексей191919
Цикл незачем два раза запускать. А если использовать массив вместо работы с листом, получится быстрее и код читабельнее: [vba]
Код
Private Sub UserForm_Initialize() Dim a() Dim i As Long With Sheets(1) i = .Cells(.Rows.Count, 2).End(xlUp).Row a = .Range("A1:D" & i).Value End With
For i = 2 To UBound(a) Select Case a(i, 3) Case "м" With lbDays1 .AddItem a(i, 1) .List(.ListCount - 1, 1) = a(i, 2) .List(.ListCount - 1, 2) = a(i, 3) .List(.ListCount - 1, 3) = a(i, 4) End With Case "см" With lbDays .AddItem a(i, 1) .List(.ListCount - 1, 1) = a(i, 2) .List(.ListCount - 1, 2) = a(i, 3) .List(.ListCount - 1, 3) = a(i, 4) End With End Select Next i End Sub
[/vba]
Переменную нужно объявлять один раз [vba]
Код
Dim i As Long
[/vba] одна строка лишняя
Цикл незачем два раза запускать. А если использовать массив вместо работы с листом, получится быстрее и код читабельнее: [vba]
Код
Private Sub UserForm_Initialize() Dim a() Dim i As Long With Sheets(1) i = .Cells(.Rows.Count, 2).End(xlUp).Row a = .Range("A1:D" & i).Value End With
For i = 2 To UBound(a) Select Case a(i, 3) Case "м" With lbDays1 .AddItem a(i, 1) .List(.ListCount - 1, 1) = a(i, 2) .List(.ListCount - 1, 2) = a(i, 3) .List(.ListCount - 1, 3) = a(i, 4) End With Case "см" With lbDays .AddItem a(i, 1) .List(.ListCount - 1, 1) = a(i, 2) .List(.ListCount - 1, 2) = a(i, 3) .List(.ListCount - 1, 3) = a(i, 4) End With End Select Next i End Sub