我一直在尝试创建一个 UserForm ,以从工作簿中可用工作表的动态生成的 ListBox 中进行打印。看起来像这样:
我在ListBox属性中设置了 1-fmMultiSelectMulti 以允许多选。 通常,我需要彩色打印的纸张以及黑白打印的副本。为了确保在用完一些墨水之前一切都看起来不错,有一个用于打印预览的复选框。
到目前为止,我设法捕获了选择并将其存储在名为 SheetsToPrint 的变量中。但是下面的打印命令失败,下标超出范围(错误9)。
Worksheets(Array(SheetsToPrint)).PrintOut preview:=True
如果我不使用该变量并将其更改为以下字符串,则它将按预期工作:
Worksheets(Array("Sheet1", "Sheet2")).PrintOut preview:=True
我可以在一份打印作业中得到所需的东西。 除了,因为无法正确显示/打印篮球图像。
相关问题:Print Variable Array of Specific Worksheets to a Single Printout
我的VBA代码如下:
Private Sub UserForm_Initialize()
Dim N As Integer
Do
N = N + 1
If Sheets(N).Visible = True Then
SelectedSheets.AddItem Sheets(N).Name
End If
Loop Until N = Worksheets.Count
End Sub
Private Sub SelectAll_Click()
Dim N As Single
If SelectAll.Value = True Then
For N = 0 To SelectedSheets.ListCount - 1
SelectedSheets.Selected(N) = True
Next N
Else
For N = 0 To SelectedSheets.ListCount - 1
SelectedSheets.Selected(N) = False
Next N
End If
End Sub
Private Sub PrinterButton_Click()
Application.Dialogs(xlDialogPrinterSetup).Show
End Sub
Private Sub PrintButton_Click()
Dim vPrev As Boolean
If PrintPreview.Value = True Then
vPrev = True
Else
vPrev = False
End If
With SelectedSheets
For N = 0 To .ListCount - 1
If .Selected(N) = True Then
If SheetsToPrint = vbNullString Then
SheetsToPrint = """" & .List(N) & """"
Else
SheetsToPrint = SheetsToPrint & ", " & """" & .List(N) & """"
End If
End If
Next N
MsgBox "Print Array:" & vbCrLf & SheetsToPrint
Me.Hide
End With
' Color Config
If Original.Value = True Then
Dim sht As Worksheet
For Each sht In Worksheets(Array(SheetsToPrint))
With sht.PageSetup
.BlackAndWhite = False
End With
Next
' Print Original in single print job
With Worksheets(Array(SheetsToPrint))
.PrintOut preview:=vPrev
End With
End If
' Grayscale Config
If Copy.Value = True Then
Dim shtBW As Worksheet
For Each shtBW In Worksheets(Array(SheetsToPrint))
With shtBW.PageSetup
.BlackAndWhite = True
End With
Next
' Print Grayscale in single print job
With Worksheets(Array(SheetsToPrint))
.PrintOut preview:=vPrev
End With
End If
End Sub
我尝试了很多组合并进行了很多搜索,但是没有运气。 任何建议都非常欢迎。 这是我的excel文件:userform_printout_array.xlsm
答案 0 :(得分:0)
由于尚未声明,因此SheetsToPrint
已经隐式为Variant
,并且已经是Array
。只需写:
Worksheets(SheetsToPrint).PrintOut preview:=True
无需加倍。请注意,在您发布的相关问题中,他们最后如何做同样的事情:)