Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Цикл копирования строки и вставки в другую книгу - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Цикл копирования строки и вставки в другую книгу
Sanchez_45 Дата: Вторник, 02.06.2020, 05:27 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Excel 2019
Всем привет, только начинаю осваивать VBA, и вот никак не могу освоить применение циклов.
Суть задания: Нужно из файла "Пример.xls" копировать по одной строке из выделенного диапазон строк и вставлять в другую книгу, с последующей печатью.
На данном этапе мне нужно построить вот такой циклический алгоритм:

1. Ручное выделение диапазона отфильтрованных строк в книге "Пример.xls"
2. Копирование первой строки из диапазона
3. Вставка этой первой строки в другую книгу
4. Печать нужного листа из другой книги

Цикл начинается с пункта 2.

Буду очень признателен за помощь.

P.S. из за особенностей работы файл "Пример.xls" обезличен
К сообщению приложен файл: 6704867.xls (38.5 Kb)


Сообщение отредактировал Sanchez_45 - Вторник, 02.06.2020, 05:51
 
Ответить
СообщениеВсем привет, только начинаю осваивать VBA, и вот никак не могу освоить применение циклов.
Суть задания: Нужно из файла "Пример.xls" копировать по одной строке из выделенного диапазон строк и вставлять в другую книгу, с последующей печатью.
На данном этапе мне нужно построить вот такой циклический алгоритм:

1. Ручное выделение диапазона отфильтрованных строк в книге "Пример.xls"
2. Копирование первой строки из диапазона
3. Вставка этой первой строки в другую книгу
4. Печать нужного листа из другой книги

Цикл начинается с пункта 2.

Буду очень признателен за помощь.

P.S. из за особенностей работы файл "Пример.xls" обезличен

Автор - Sanchez_45
Дата добавления - 02.06.2020 в 05:27
Sanchez_45 Дата: Суббота, 06.06.2020, 05:58 | Сообщение № 2
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Excel 2019
Я долго мучался и нашел решение, может кому надо
[vba]
Код

Sub Auto_Print()

    Dim lRowsCount As Long
    Dim lFirstRow As Long
    Dim lNextRow As Long
    
    lRowsCount = Application.WorksheetFunction.Subtotal(3, Range(Cells(2, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 1)))
    With ActiveSheet.AutoFilter.Range
    lFirstRow = .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).SpecialCells(xlCellTypeVisible).Row
    End With
    lNextRow = Range("A" & lFirstRow + 1 & ":A65536").SpecialCells(xlCellTypeVisible).Row
    Rows(lFirstRow).Copy
    
    For i = 1 To lRowsCount
    Workbooks.Open ("D:\Documents\Mac\Form.xlsx")
    Windows("Form.xlsx").Activate
    Sheets("Лист1").Select
    Rows(2).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("Лист2").Select
    Application.CutCopyMode = False
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
        IgnorePrintAreas:=False
    Application.DisplayAlerts = False
    ActiveWorkbook.Close
    Application.DisplayAlerts = True
    Windows("Пример.xlsm").Activate
    Rows(lNextRow).Copy
    lNextRow = Range("A" & lNextRow + 1 & ":A65536").SpecialCells(xlCellTypeVisible).Row
    Next i    
       
End Sub
[/vba]
Да, я знаю что тут нет выделения строк, но я как то не додумался как в выделенном диапазоне переходит к следующей строке

P.S. Приму комментарии по поводу рефакторинга


Сообщение отредактировал Sanchez_45 - Суббота, 06.06.2020, 06:06
 
Ответить
СообщениеЯ долго мучался и нашел решение, может кому надо
[vba]
Код

Sub Auto_Print()

    Dim lRowsCount As Long
    Dim lFirstRow As Long
    Dim lNextRow As Long
    
    lRowsCount = Application.WorksheetFunction.Subtotal(3, Range(Cells(2, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 1)))
    With ActiveSheet.AutoFilter.Range
    lFirstRow = .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).SpecialCells(xlCellTypeVisible).Row
    End With
    lNextRow = Range("A" & lFirstRow + 1 & ":A65536").SpecialCells(xlCellTypeVisible).Row
    Rows(lFirstRow).Copy
    
    For i = 1 To lRowsCount
    Workbooks.Open ("D:\Documents\Mac\Form.xlsx")
    Windows("Form.xlsx").Activate
    Sheets("Лист1").Select
    Rows(2).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("Лист2").Select
    Application.CutCopyMode = False
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
        IgnorePrintAreas:=False
    Application.DisplayAlerts = False
    ActiveWorkbook.Close
    Application.DisplayAlerts = True
    Windows("Пример.xlsm").Activate
    Rows(lNextRow).Copy
    lNextRow = Range("A" & lNextRow + 1 & ":A65536").SpecialCells(xlCellTypeVisible).Row
    Next i    
       
End Sub
[/vba]
Да, я знаю что тут нет выделения строк, но я как то не додумался как в выделенном диапазоне переходит к следующей строке

P.S. Приму комментарии по поводу рефакторинга

Автор - Sanchez_45
Дата добавления - 06.06.2020 в 05:58
Pelena Дата: Суббота, 06.06.2020, 10:24 | Сообщение № 3
Группа: Админы
Ранг: Местный житель
Сообщений: 19404
Репутация: 4555 ±
Замечаний: ±

Excel 365 & Mac Excel
Открывать каждый раз файл в цикле не нужно, на мой взгляд.
Про выделенные строки не поняла, это те, что отфильтрованы?
Если надо пройтись по отфильтрованным строкам, можно просто проверить условие скрыта/не скрыта строка.
Посмотрите такой вариант
К сообщению приложен файл: 6343899.xls (52.0 Kb)


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеОткрывать каждый раз файл в цикле не нужно, на мой взгляд.
Про выделенные строки не поняла, это те, что отфильтрованы?
Если надо пройтись по отфильтрованным строкам, можно просто проверить условие скрыта/не скрыта строка.
Посмотрите такой вариант

Автор - Pelena
Дата добавления - 06.06.2020 в 10:24
Sanchez_45 Дата: Воскресенье, 07.06.2020, 10:06 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Excel 2019
Pelena, Да, ваш вариант, тоже работает, и он проще, чем мой, я видимо понаписал не нужных заморочек :)
Про выделенные строки: изначально планировал диапазон строк задавать выделением в отфильтрованном списке, но не нашел возможности в выделенном диапазоне передвигаться от первой строки к последней строке по одной, но нашел способ передвигаться построчно в отфильтрованном списке)
Пожалуй заберу ваш вариант либо уберу из своего открытие файла в теле цикла, спасибо! Хочу попробовать дополнить еще макрос выбором нужного листа для распечатывания, и условием в содержании одной из ячеек этой строки при котором строка будет копироваться.
Спасибо, за предложенный вариант.


Сообщение отредактировал Sanchez_45 - Воскресенье, 07.06.2020, 10:08
 
Ответить
СообщениеPelena, Да, ваш вариант, тоже работает, и он проще, чем мой, я видимо понаписал не нужных заморочек :)
Про выделенные строки: изначально планировал диапазон строк задавать выделением в отфильтрованном списке, но не нашел возможности в выделенном диапазоне передвигаться от первой строки к последней строке по одной, но нашел способ передвигаться построчно в отфильтрованном списке)
Пожалуй заберу ваш вариант либо уберу из своего открытие файла в теле цикла, спасибо! Хочу попробовать дополнить еще макрос выбором нужного листа для распечатывания, и условием в содержании одной из ячеек этой строки при котором строка будет копироваться.
Спасибо, за предложенный вариант.

Автор - Sanchez_45
Дата добавления - 07.06.2020 в 10:06
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!