Страницы: 1
RSS
VBA: Печать заполненной по галочкам форме
 
Коллеги, добрый вечер,

Имеется файл с базой данных и печатная для этих данных форма. Благодаря этому приему и его небольшому апгрейду печатать стало намного проще и удобнее (раньше было принято создавать для каждой отдельной единицы данных Word файл), спасибо авторам. Но дело в том, что количество необходимых распечаток уже превышает сотню, в связи с чем возникает вопрос: как корректно изменить макрос так, чтобы можно было:

1. Сразу отметить все необходимые для печати строки галочкой;
2. Пустить на печать поочередно, начиная с первой галочки сверху печатную форму с соответствующими каждой галочке данными.

Я понимаю принцип работы приема, он основан на ВПР; в примере, который я выкладываю, галочка = a, и печатная форма подтягивает данные по этому символу, следовательно, если одинаковых символов будет несколько, то следующие строки с данными туда уже не попадают. Но может быть это можно решить с помощью VBA?

Прикладываю файл-пример от Sanja, т.к. пользуюсь точно таким же макросом, просто с другими данными и другой печатной формой.

P.S. Как помечать в столбце A несколько галочек, а не одну, я уже понял, надо лишь удалить из макроса
Код
Range("A2:A" & r).ClearContents
А вот дальше застрял.

Заранее спасибо.
 
вернитесь к Word (документ слияния)
свяжите файл Word с данными Excel, поместите в нужных местах имена полей
можете потом распечатать данные любой 1 строки, любой непрерывной группы строк с ... по, или всех сразу, не кланяясь каждой конретно, а всех скопом.
знания программирования вообще не требуется.
удачи!
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Изменил отметку галочкой. Любое выделение (в том числе всего столбца) инвертирует отметку. (была - уберётся, не было - отметится)
А для печати, в принципе не сложно сделать макрос не переделывая форму. Алгоритм таков:
отключить обработку событий (на всякий случай);
цикл по диапазону ячеек (Range("A2:A" & r)) сверху вниз;
если в ячейке "a", то печатаем лист "Бланк" и очищаем данную ячейку (должен быть включён автоматический пересчёт формул);
после цикла включить обработку событий.
Изменено: JayBhagavan - 29.10.2018 00:53:13

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Ок, благодарю. Сейчас попробую сообразить.
 
Что-то вроде этого? Только здесь пока еще нет команды для печати.
Код
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 - 29.10.2018 02:09:16
 
Framed, да, вроде этого. Только я бы внёс несколько моментов в код:
1) сделал привязку обрабатываемых диапазонов ячеек к листу "Данные" книги, из которой запущен макрос; (бережёного...)
2) тип переменной r  сменил на Long;
3) добавил проверку r НЕ менее 2 (на всякий случай);
4) добавил включение авто. пересчёта формул - это один из ключевых моментов, т.к. результат завязан на формулах в т.ч.;
5) очистку содержимого ячейки лучше делать через ClearContents, а не через присвоение ей строки нулевой длины;
6) чтобы понимать, что уже было послано на печать, добавил бы, например, текст "Отправлено на печать" в соотв. яч. столбца H (если согласны, то раскомментируйте соотв. строку)
Код
.Range("H" & Cell.Row).Value = "Отправлено на печать"

Команда отправки на печать листа "Бланк" добавлена.
Перед отправкой на печать потренируйтесь на виртуальном принтере, который печатает в файл в формате pdf.
Скрытый текст

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Спасибо, сейчас пойду проверять.

Пожалуйста, если не затруднит: r должно быть >1 потому что r = 1 только если столбец с галочками пустой?
 
Цитата
Framed написал: r должно быть >1 потому что r = 1 только если столбец с галочками пустой?
Нет, r определяется по второму столбцу. На тот случай, если кроме заголовка ничего не будет. Хотя, таблица "умная" и с ней есть нюансы...

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Внёс код в свой файл, в котором умная таблица начинается с С4, с соответствующими поправками. Отправил на печать, работает.

Единственный момент - случайно выделил весь столбец С, и эксель умер  :) , т.к. строк >5к. Может стоит в таком случае ввести что-то вроде MsgBox ("Вы точно хотите отправить на печать все данные? vbYesNo+vbQuestion), и в случае нет, end Sub?
 
Цитата
Framed написал: Может стоит в таком случае ввести что-то вроде MsgBox ("Вы точно хотите отправить на печать все данные? vbYesNo+vbQuestion), и в случае нет, end Sub?
Ваше право. Дерзайте! :)

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Благодарю. Последний вопрос, не самый важный, но все-таки: возможно ли сделать так, чтобы галочки ставились лишь в отфильтрованные ячейки? То есть, если я отфлитрую и выделю видимый массив ячеек, то галочки все равно появятся в тех, что скрыты фильтром.
 
Framed, есть правило "один вопрос - одна тема". Но, да. :) Как именно либо через поиск, либо новую тему создайте. ;)

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Хорошо, прошу прощения, спасибо еще раз за помощь.
Страницы: 1
Наверх