Печать из Excel VBA - PullRequest
       22

Печать из Excel VBA

1 голос
/ 06 октября 2011

Попытка напечатать один и тот же лист Excel несколько раз (например, 100) с увеличением ячейки каждый раз (например, ячейка 4F).

Я пытался использовать

Workbook_BeforePrint

для увеличения ячейки, но для этого требуется взаимодействие с диалогом «выбрать принтер» для каждого напечатанного листа.

Можно ли сделать что-то вроде:

a = getIntegerUserInput()
for i in 1..a
   increment 4F with one
   print the sheet suppressing the "select printer" dialog
end for

Приветствия

Ответы [ 3 ]

4 голосов
/ 06 октября 2011

Вы выбрали принтер по умолчанию?

Я использовал это:

Sub printinc()
For i = 0 To 3
Range("A1").Value = Range("A1").Value + 1
Sheets("Sheet1").PrintOut
Next
End Sub

Он напечатал 4 копии, увеличивая значение в ячейке A1 каждый раз, не запрашивая у меня настройки или выбор принтера.

3 голосов
/ 06 октября 2011

Для печати листа вы можете использовать этот вид кода (при условии, что вы знаете, на каком принтере вы хотите печатать), используя PrintOut:

Sub PrintFile()
    Dim curPrinter As String
    curPrinter = Application.ActivePrinter
    Application.ActivePrinter = "Myprinter"
    ActiveWindow.SelectedSheets.PrintOut 
    Application.ActivePrinter = curPrinter
End Sub

Следовательно, вы можете создать цикл для увеличенияячейку и распечатайте вашу таблицу с шагом.

Кстати, вы можете сделать это, используя Before_print, и если вы не хотите отображать диалоговое окно печати, вы можете установить Cancel на False, авызов процедуры Private Sub Workbook_BeforePrint( Cancel As Boolean) (ref MSDN )

Вы также можете прочитать эту ветку SO, чтобы предотвратить отображение диалогового окна печати: Как запретить диалоговое окно печати при использовании Excel PrintOutmethod .

[EDIT] см. ответ Сейрена для рабочего решения того, что вы хотите.Тем не менее, позаботьтесь о производительности, если вы действительно хотели зацикливаться 100 раз.

2 голосов
/ 06 октября 2011
Private Sub Workbook_BeforePrint(Cancel As Boolean)
    '//supress recursion into this event when we print
    Application.EnableEvents = False
    '//increment
    If Not IsNumeric(ActiveSheet.Range("A1").Value) Then ActiveSheet.Range("A1").Value = 0
    ActiveSheet.Range("A1").Value = ActiveSheet.Range("A1").Value + 1
    '//do a default print
    ActiveSheet.PrintOut
    Application.EnableEvents = True
    '//prevent the default print
    Cancel = True
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...