工作表(Array(SheetsToPrint))。PrintOut

时间:2018-11-26 22:33:35

标签: excel vba

我一直在尝试创建一个 UserForm ,以从工作簿中可用工作表的动态生成的 ListBox 中进行打印。看起来像这样:

UserForm with Print Button

我在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

1 个答案:

答案 0 :(得分:0)

由于尚未声明,因此SheetsToPrint已经隐式为Variant,并且已经是Array。只需写:

Worksheets(SheetsToPrint).PrintOut preview:=True

无需加倍。请注意,在您发布的相关问题中,他们最后如何做同样的事情:)