Можно как-то автоматизировать печать выборочных листов Excel?

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

ZSFoS
Сообщения: 6
Зарегистрирован: 11 мар 2010, 14:59

Мне надо Excel печатать несколько разных листов в книге в многолистовой книге. Инструментом печати это возможно, только выделив группу с помощью клавиши CTRL. Это для меня неудобно, так как каждый раз при печати приходится их выделять заново. Скрывать непечатаемые листы также неудобно, потому что их затем нужно опять отображать. В Word и OpenOffice.org Calc существует такая возможность, указывая необходимые листы через запятую (пробел). В OpenOffice.org Calc я набираю на отдельном листе номера листов для печати и затем копирую их и отправляю на двухсторонюю печать на дуплексный принтер. Это очень удобно, так как не нужно каждый раз вводить нужные листы для печати. В Excel же только возможно указать диапазон.
Можно как-то автоматизировать печать выборочных листов Excel, какой нибудь макрос или ещё что?
Аватара пользователя
Busine2009
Сообщения: 322
Зарегистрирован: 18 июл 2009, 15:34
Контактная информация:

ZSFoS
а как ты хочешь указывать листы? По их порядковому номеру? Ты будешь их подсчитывать что ли?
Вопрос в том, как ты собираешься создать Группу с помощью Макроса.
Т.е. в книге ты печатаешь одну и ту же группу?
ZSFoS
Сообщения: 6
Зарегистрирован: 11 мар 2010, 14:59

Busine2009 писал(а):ZSFoS
а как ты хочешь указывать листы? По их порядковому номеру? Ты будешь их подсчитывать что ли?
Вопрос в том, как ты собираешься создать Группу с помощью Макроса.
В OpenOffice.org Calc во время предварительного просмотра я создаю один или несколько наборов для печати в виде: 1 3 5 6 11 14 26 35, 1 3 5 6 11 14 26 36 41. номера я записываю на отдельном листе.
Затем, когда мне нужно быстро распечатать нужную комбинацию я её копирую через буфер обмена в печать и сразу распечатывается то, что надо.
Т.е. в книге ты печатаешь одну и ту же группу?
в одном случае одну, в другом другую.
nilem
Сообщения: 112
Зарегистрирован: 14 ноя 2008, 01:59
Откуда: Уфа

Можно попробовать так. Предварительно создаем на каком-нибудь листе именованный диапазон "Печать", в него будем записывать номера листов, которые надо распечатать.
Sub ПечатьЛистов()
Dim cell As Range, pr As Integer

For Each cell In Range("Печать")
If cell.Value > 0 Then
pr = cell.Value
If СуществЛист(pr) = False Then
MsgBox "Листа " & pr & " не существует", , "Печать"
GoTo act1
Else
ActiveWorkbook.Sheets(pr).Activate
MsgBox "Печатаем лист " & pr, , "Печать"
ActiveWorkbook.Sheets(pr).PrintOut
End If
Else
Exit For
End If

act1:
Next cell
End Sub

Private Function СуществЛист(index) As Boolean
Dim x As Object
On Error Resume Next
Set x = ActiveWorkbook.Sheets(index)
If Err.Number = 0 Then
СуществЛист = True
Else
СуществЛист = False
End If
End Function

Ненужные MsgBox можно закомментировать.
Аватара пользователя
Busine2009
Сообщения: 322
Зарегистрирован: 18 июл 2009, 15:34
Контактная информация:

ZSFoS
у меня появляется просвет. Могу предложить вариант, в котором надо будет вводить числа через запятые - через пробелы нельзя. Пойдёт так?
Аватара пользователя
Busine2009
Сообщения: 322
Зарегистрирован: 18 июл 2009, 15:34
Контактная информация:

ZSFoS
вот состряпал. Смысл этого макроса в том, что он выделяет листы, которые надо распечатать, затем появляется диалоговое окно "Печать" и тебе надо нажать Окей.
Вложения
Print Excel.zip
(1.73 КБ) 63 скачивания
ZSFoS
Сообщения: 6
Зарегистрирован: 11 мар 2010, 14:59

Busine2009 писал(а):ZSFoS
вот состряпал. Смысл этого макроса в том, что он выделяет листы, которые надо распечатать, затем появляется диалоговое окно "Печать" и тебе надо нажать Окей.
через запятую хорошо, но я не знаю что с этими файлами делать, как их запускать? у меня Microsoft Excel 2010 (Beta), макросами еще не пользовался,
ZSFoS
Сообщения: 6
Зарегистрирован: 11 мар 2010, 14:59

nilem писал(а):Можно попробовать так. Предварительно создаем на каком-нибудь листе именованный диапазон "Печать", в него будем записывать номера листов, которые надо распечатать.
Sub ПечатьЛистов()
Dim cell As Range, pr As Integer

For Each cell In Range("Печать")
If cell.Value > 0 Then
pr = cell.Value
If СуществЛист(pr) = False Then
MsgBox "Листа " & pr & " не существует", , "Печать"
GoTo act1
Else
ActiveWorkbook.Sheets(pr).Activate
MsgBox "Печатаем лист " & pr, , "Печать"
ActiveWorkbook.Sheets(pr).PrintOut
End If
Else
Exit For
End If

act1:
Next cell
End Sub

Private Function СуществЛист(index) As Boolean
Dim x As Object
On Error Resume Next
Set x = ActiveWorkbook.Sheets(index)
If Err.Number = 0 Then
СуществЛист = True
Else
СуществЛист = False
End If
End Function

Ненужные MsgBox можно закомментировать.
не смог разобраться как этот макрос запустить, выложите образец листа с этим диапазоном если не трудно
nilem
Сообщения: 112
Зарегистрирован: 14 ноя 2008, 01:59
Откуда: Уфа

Этот код вставьте в модуль в VBE, щелкните где-нибудь в теле процедуры Sub ПечатьЛистов() и нажмите F5. Предварительно создайте на каком-нибудь листе именованный диапазон "Печать" с номерами листов для печати.
ZSFoS
Сообщения: 6
Зарегистрирован: 11 мар 2010, 14:59

Busine2009 писал(а):ZSFoS
вот состряпал. Смысл этого макроса в том, что он выделяет листы, которые надо распечатать, затем появляется диалоговое окно "Печать" и тебе надо нажать Окей.
Разобрался как импортировать в VBA эти файлы. Только не печатает, дошёл до этого окна: (рис. 1)
Затем двойной клик на печать и появляется это (рис.2)
Что дальше?
Вложения
Буфер обмена-1.jpg
Буфер обмена-2.jpg
Ответить