вечер добрый, для упрощения введения данных в таблицу нужен макрос вставляющий группу строк с листа Шаблоны, групп несколько (отмечаются в столбце признак), требуется что б выбрал из списка нужную группу, нажал и вставились строки... помогите пожалуйста
вечер добрый, для упрощения введения данных в таблицу нужен макрос вставляющий группу строк с листа Шаблоны, групп несколько (отмечаются в столбце признак), требуется что б выбрал из списка нужную группу, нажал и вставились строки... помогите пожалуйстаExtybr
doober, подскажите пожалуйста а как ускорить работу макроса...в оригинальной таблице под 100 столбцов и строк несколько десятков тысяч...после нажатия кнопки крутит сек 20 пока вставит. пробовал для проверки - удалил все другие макросы усл форматир..все равно тупит. в чем может быть дело?
doober, подскажите пожалуйста а как ускорить работу макроса...в оригинальной таблице под 100 столбцов и строк несколько десятков тысяч...после нажатия кнопки крутит сек 20 пока вставит. пробовал для проверки - удалил все другие макросы усл форматир..все равно тупит. в чем может быть дело?Extybr
Ускорить можно только вставкой через массив, а не по строкам[vba]
Код
Private Sub CommandButton1_Click() If ComboBox1.ListIndex = -1 Then Exit Sub Dim res(), pz& Application.ScreenUpdating = False признак = ComboBox1.Value Set Tbl1 = Me.ListObjects(1) Set Tbl2 = ThisWorkbook.Worksheets("Шаблоны").ListObjects(1) pz = 0 dx = Tbl2.DataBodyRange Col = Tbl2.ListColumns("признак").Index ReDim res(1 To UBound(dx), 1 To UBound(dx, 2)) For i = 1 To UBound(dx) If dx(i, Col) = признак Then pz = pz + 1 For n = 1 To UBound(dx, 2) res(pz, n) = dx(i, n) Next End If Next If pz > 0 Then Tbl1.ListRows(Tbl1.ListRows.Count).Range.Cells(1, 1).Offset(1, 0).Resize(pz, UBound(res, 2)) = res End If Application.ScreenUpdating = True End Sub
[/vba]
Ускорить можно только вставкой через массив, а не по строкам[vba]
Код
Private Sub CommandButton1_Click() If ComboBox1.ListIndex = -1 Then Exit Sub Dim res(), pz& Application.ScreenUpdating = False признак = ComboBox1.Value Set Tbl1 = Me.ListObjects(1) Set Tbl2 = ThisWorkbook.Worksheets("Шаблоны").ListObjects(1) pz = 0 dx = Tbl2.DataBodyRange Col = Tbl2.ListColumns("признак").Index ReDim res(1 To UBound(dx), 1 To UBound(dx, 2)) For i = 1 To UBound(dx) If dx(i, Col) = признак Then pz = pz + 1 For n = 1 To UBound(dx, 2) res(pz, n) = dx(i, n) Next End If Next If pz > 0 Then Tbl1.ListRows(Tbl1.ListRows.Count).Range.Cells(1, 1).Offset(1, 0).Resize(pz, UBound(res, 2)) = res End If Application.ScreenUpdating = True End Sub
doober, подскажите пожалуйста а как сделать чтоб список наполнялся при нажатии кнопки (пусть даже той же кнопкой вставки строк- нажал наполнился список-выбрал-нажал вставились), а то помимо того что периодически при загрузке список не наполняется периодически, так еще и у меня при работе другого макроса (который копирует лист а после фильтрует и по каждому из фильтров и создает новые книги .... вылетает ошибка - с наполнением списка после активации вновь созданного листа) попробовал привязать к кнопке выдает - object required
doober, подскажите пожалуйста а как сделать чтоб список наполнялся при нажатии кнопки (пусть даже той же кнопкой вставки строк- нажал наполнился список-выбрал-нажал вставились), а то помимо того что периодически при загрузке список не наполняется периодически, так еще и у меня при работе другого макроса (который копирует лист а после фильтрует и по каждому из фильтров и создает новые книги .... вылетает ошибка - с наполнением списка после активации вновь созданного листа) попробовал привязать к кнопке выдает - object requiredmicholap_denis
вот вместо этого автоматического наполнения списка,как изменить код --- [vba]
Код
Sub Наполнить_Список(Combo) Dim Key As String Combo.Clear Dx = Range(ИмяТаблицы2 & "[[признак]]") Set C_is = CreateObject("scripting.dictionary") For n = 1 To UBound(Dx) Key = Dx(n, 1) If Not C_is.Exists(Key) Then C_is.Item(Key) = Key Combo.AddItem Key End If Next
End Sub
[/vba] чтоб список наполнялся по нажатию кнопки (лучше той же что и вставка строк)..... пробовал тупо вызвать кнопкой- ошибка-object required
подскажите пожалуйста...
[vba]
Код
Private Sub Worksheet_Activate()
Наполнить_Список ComboBox1 End Sub
[/vba]
вот вместо этого автоматического наполнения списка,как изменить код --- [vba]
Код
Sub Наполнить_Список(Combo) Dim Key As String Combo.Clear Dx = Range(ИмяТаблицы2 & "[[признак]]") Set C_is = CreateObject("scripting.dictionary") For n = 1 To UBound(Dx) Key = Dx(n, 1) If Not C_is.Exists(Key) Then C_is.Item(Key) = Key Combo.AddItem Key End If Next
End Sub
[/vba] чтоб список наполнялся по нажатию кнопки (лучше той же что и вставка строк)..... пробовал тупо вызвать кнопкой- ошибка-object requiredmicholap_denis
Сообщение отредактировал micholap_denis - Пятница, 13.08.2021, 21:12
Наконец - то разобрался. По-моему, плохая идея на одной кнопке делать заполнение списка и вставку строк. Разнес по разным кнопкам. Посмотрите, может подойдет?
Наконец - то разобрался. По-моему, плохая идея на одной кнопке делать заполнение списка и вставку строк. Разнес по разным кнопкам. Посмотрите, может подойдет?Erjoma1981