从Excel VBA打印

时间:2011-10-06 06:18:51

标签: vba excel-vba excel

尝试多次打印相同的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 个答案:

答案 0 :(得分:4)

您是否选择了默认打印机?

我用过这个:

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

每次打印4份增加单元格A1值的副本,而不提示我进行设置或打印机选择。

答案 1 :(得分:3)

要打印工作表,您可以使用PrintOut使用此类代码(假设您知道要打印的打印机):

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

因此,您可以创建一个循环来增加单元格并使用增量打印工作表。

顺便说一句,你可以使用Before_print来完成它,如果你不想显示打印对话框,你可以在调用程序Cancel时将Private Sub Workbook_BeforePrint( Cancel As Boolean)设置为False(参考MSDN

您还可以阅读此SO线程以防止显示打印对话框:How do you prevent printing dialog when using Excel PrintOut method

[编辑]看到Seyren的答案,找到你想要的工作解决方案。但是,如果真的想要循环100次,请注意性能。

答案 2 :(得分:2)

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