Имеется файл с базой данных и печатная для этих данных форма. Благодаря этому приему и его небольшому апгрейду печатать стало намного проще и удобнее (раньше было принято создавать для каждой отдельной единицы данных Word файл), спасибо авторам. Но дело в том, что количество необходимых распечаток уже превышает сотню, в связи с чем возникает вопрос: как корректно изменить макрос так, чтобы можно было:
1. Сразу отметить все необходимые для печати строки галочкой; 2. Пустить на печать поочередно, начиная с первой галочки сверху печатную форму с соответствующими каждой галочке данными.
Я понимаю принцип работы приема, он основан на ВПР; в примере, который я выкладываю, галочка = a, и печатная форма подтягивает данные по этому символу, следовательно, если одинаковых символов будет несколько, то следующие строки с данными туда уже не попадают. Но может быть это можно решить с помощью VBA?
Прикладываю файл-пример от Sanja, т.к. пользуюсь точно таким же макросом, просто с другими данными и другой печатной формой.
P.S. Как помечать в столбце A несколько галочек, а не одну, я уже понял, надо лишь удалить из макроса
вернитесь к Word (документ слияния) свяжите файл Word с данными Excel, поместите в нужных местах имена полей можете потом распечатать данные любой 1 строки, любой непрерывной группы строк с ... по, или всех сразу, не кланяясь каждой конретно, а всех скопом. знания программирования вообще не требуется. удачи!
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
Изменил отметку галочкой. Любое выделение (в том числе всего столбца) инвертирует отметку. (была - уберётся, не было - отметится) А для печати, в принципе не сложно сделать макрос не переделывая форму. Алгоритм таков: отключить обработку событий (на всякий случай); цикл по диапазону ячеек (Range("A2:A" & r)) сверху вниз; если в ячейке "a", то печатаем лист "Бланк" и очищаем данную ячейку (должен быть включён автоматический пересчёт формул); после цикла включить обработку событий.
Что-то вроде этого? Только здесь пока еще нет команды для печати.
Код
Sub Proverka()
Dim Cell As Range
Dim r As String
r = Cells(Rows.Count, 2).End(xlUp).Row
Application.EnableEvents = False
For Each Cell In Range("A2:A" & r)
If Cell.Value = "a" Then
Cell.Value = ""
End If
Next Cell
Application.EnableEvents = True
End Sub
Framed, да, вроде этого. Только я бы внёс несколько моментов в код: 1) сделал привязку обрабатываемых диапазонов ячеек к листу "Данные" книги, из которой запущен макрос; (бережёного...) 2) тип переменной r сменил на Long; 3) добавил проверку r НЕ менее 2 (на всякий случай); 4) добавил включение авто. пересчёта формул - это один из ключевых моментов, т.к. результат завязан на формулах в т.ч.; 5) очистку содержимого ячейки лучше делать через ClearContents, а не через присвоение ей строки нулевой длины; 6) чтобы понимать, что уже было послано на печать, добавил бы, например, текст "Отправлено на печать" в соотв. яч. столбца H (если согласны, то раскомментируйте соотв. строку)
Код
.Range("H" & Cell.Row).Value = "Отправлено на печать"
Команда отправки на печать листа "Бланк" добавлена. Перед отправкой на печать потренируйтесь на виртуальном принтере, который печатает в файл в формате pdf.
Скрытый текст
Код
Option Explicit
Sub Proverka()
Dim Cell As Range
Dim r As Long
Application.EnableEvents = False
Application.Calculation = xlCalculationAutomatic
With ThisWorkbook.Worksheets("Данные")
r = .Cells(Rows.Count, 2).End(xlUp).Row
If r > 1 Then
For Each Cell In .Range("A2:A" & r)
If Cell.Value = "a" Then
ThisWorkbook.Worksheets("Бланк").PrintOut
Cell.ClearContents
' .Range("H" & Cell.Row).Value = "Отправлено на печать"
DoEvents
End If
Next Cell
End If 'r > 1
End With 'ThisWorkbook.Worksheets("Данные")
Application.EnableEvents = True
End Sub
Формула массива (ФМ) вводится Ctrl+Shift+Enter Memento mori
Внёс код в свой файл, в котором умная таблица начинается с С4, с соответствующими поправками. Отправил на печать, работает.
Единственный момент - случайно выделил весь столбец С, и эксель умер , т.к. строк >5к. Может стоит в таком случае ввести что-то вроде MsgBox ("Вы точно хотите отправить на печать все данные? vbYesNo+vbQuestion), и в случае нет, end Sub?
Framed написал: Может стоит в таком случае ввести что-то вроде MsgBox ("Вы точно хотите отправить на печать все данные? vbYesNo+vbQuestion), и в случае нет, end Sub?
Ваше право. Дерзайте!
Формула массива (ФМ) вводится Ctrl+Shift+Enter Memento mori
Благодарю. Последний вопрос, не самый важный, но все-таки: возможно ли сделать так, чтобы галочки ставились лишь в отфильтрованные ячейки? То есть, если я отфлитрую и выделю видимый массив ячеек, то галочки все равно появятся в тех, что скрыты фильтром.