Страницы: 1
RSS
Макрос печати нескольких листов сразу
 
Здравствуйте, хочу сделать печать нескольких листов одной кнопкой, оптом, так саказать. Но как сделать не знаю.  При этом есть условие: сколько листов печатать - зависит от значения в конкретной ячейке. Подскажите пожалуйста как в VB это реализовать. Знание VB на уровне "записать" или "копировать - вставить". Потому и не получаеться ничего.
 
Цитата
Olga_L написал: Потому и не получаеться ничего.
нет, не поэтому.
скорее - потому, что над предыдущими полученными готовыми решениями Ваших задач Вы не думали, и учиться у Вас либо времени нет, либо, что скорее, желания.

Знание VB на уровне "записать" приводит к примерно такому результату:
Код
Sub Макрос1()
    Sheets(Array("1-4", "5-8", "9-12")).Select
    Sheets("1-4").Activate
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
End Sub

от него рукой подать до рабочего макроса.

но в Вашем файле даже таких попыток нет.
Изменено: ikki - 25.08.2015 10:22:55
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
 Уважаеммый Ikki, возможно для Вас и "рукой подать", а для меня привязать записанный макрос "быстрой печати" к условию пока целая проблема, на решение которой было потрачено целое утро. Поверьте, могла бы решить сама, не стала бы обращаться на форум. А попыток в моем файле Вы не увидели, потому как, я не была уверена в том, что в даном случае нужно начинать с записи "быстрой печати".
 
Я не прошу решить задачу за меня. Прошу, чтобы подсказали хотя бы каким образом ее решить.
 
Olga_L, проверяйте.
Скрытый текст

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Мне выдает ошибку. Run-time error 438. Пишет что "обьект не поддердивает это свойство или метод".
 
Цитата
Olga_L написал: Прошу, чтобы подсказали хотя бы каким образом ее решить
Подсказка была, а ошибку в коде подправить можете самостоятельно, т.к.
Цитата
Olga_L написал: Я не прошу решить задачу за меня
;) Не получится - сообщите.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Я себе не так даный макрос представляла. В этом коде для меня почти ничего не понятно. Ладно.. и на том спасибо. Будем разбираться
 
Olga_L, простите, что не угодил. :)
Скрытый текст
Так понятней?

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Если яч. H3=3, то надо будет напечатать листы с 1_4 по 17_20, т.е. ВСЕ листы?
Ведь 3 < 20 ?
Я хочу сказать, что по Вашим условиям, всегда надо печатать все листы.
Изменено: Михаил Лебедев - 25.08.2015 12:33:51
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Михаил Лебедев, срабатывает приоритетное правило. Как понял, правила взаимоисключающие.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Цитата
JayBhagavan написал:
Как понял, ... т .д. ...
JayBhagavan, я вот об этом и хочу сказать. Ну, что я, например, не так понял. Задача, на мой взгляд, поставлена не совсем корректно ☺
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Если логика от Olga_L именно такая, как понял JayBhagavan, тогда вот такой еще вариант (правда, в отличие от вар. от JayBhagavan с elseif, мой печатает листы в обратном порядке ☺):
Код
Sub procPrint()
    var_val = Worksheets("Лист1").[H3].Value
    Select Case var_val
    Case Is > 16: Sheets("17-20").PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
    Case Is > 12: Sheets("13-16").PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
    Case Is > 8:  Sheets("9-12").PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
    Case Is > 4:  Sheets("5-8").PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
    Case Is > 0: Sheets("1-4").PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
    End Select
End Sub
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Всем хороших выходных
Есть вопрос, по этой теме, задам сюда же пожалуй чтоб темы не плодить.
Есть два листа эксель, как их вывести на печать одной отправкой? (Необходимо чтоб принтер подхватил и напечатал двухстороннюю)
Код
Sheets("2").Range("A1:I70").PrintOut Copies:=1, Collate:=True
Sheets("3").Range("A1:I70").PrintOut Copies:=1, Collate:=True

Может как-то по умному Range (через запятую) написать?
Возможно ли вообще?  
Изменено: Imelman - 28.10.2017 13:21:12
 
Можно так:
Код
Sheets(Array("2", "3")).PrintOut Copies:=1, Collate:=True

Но тогда вероятно диапазоны печати на листе нужно задать заранее мануально, ну или этим же макросом.
 
Да, в такой форме сработало:
Код
    Sheets(Array("1", "2")).PrintOut Copies:=1, Collate:=True, _
       IgnorePrintAreas:=False

Спасибо

Страницы: 1
Наверх