【发布时间】:2016-05-26 03:48:48
【问题描述】:
我需要一种能够根据用户想要打印的工作表将多个工作表作为一个作业打印的方法。
我有一个工作表,在 A 列中我有工作簿中所有工作表的列表。 B 列有一个dropdown 列表,用户将在其中选择 Y 或 N 以指示他们是否要打印该表。
我的代码应该做的是打印所有在 B 列中有 Y 的工作表作为一个作业。我有一个名为 FirstSheetPrint 的单元格引用,它复制工作表列表中第一个工作表的名称,该工作表在 B 列中有 Y。然后我取该名称并在其周围添加“,以便它可以用作稍后工作表名称。然后我遍历所有具有 Y 的行并将“的”和工作表名称添加到单个字符串中(字符串随着循环的继续而不断增长)。
我的问题是,最后当我尝试将此工作表名称字符串分配给数组时,我得到一个错误下标超出范围。我添加了我的消息框的屏幕截图,显示了最终字符串的样子和错误的屏幕截图。
任何帮助将不胜感激!
Sub PrintAllSheets()
Application.ScreenUpdating = False
Application.EnableEvents = False
Dim DoesPrint As Boolean
Dim SheetsToPrint As String
Dim SheetCount As Integer
Dim StartCount As Integer
Dim StartRange As String
Dim totalString As String
DoesPrint = Application.Dialogs(xlDialogPrinterSetup).Show
If DoesPrint = False Then
Application.ScreenUpdating = True
Application.EnableEvents = True
Exit Sub
Else
End If
SheetsToPrint = Sheets("Printing").Range("FirstSheetPrint").Value
SheetCount = Sheets("Printing").Range("SheetsToPrintCount").Value
StartCount = 4
If SheetsToPrint = "N" Then
MsgBox "Please select which sheets you would like to print"
Application.ScreenUpdating = True
Application.EnableEvents = True
Exit Sub
Else
SheetsToPrint = ("""" & SheetsToPrint & """")
For i = 1 To SheetCount
If Sheets("Printing").Range("N" & StartCount).Value > 0 Then
SheetsToPrint = (SheetsToPrint & ", " & """" & Sheets("Printing").Range("L" & StartCount).Value & """")
StartCount = StartCount + 1
Else
StartCount = StartCount + 1
End If
Next i
MsgBox ("We will print: " & SheetsToPrint)
End If
Sheets(Array(SheetsToPrint)).PrintOut
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
【问题讨论】:
-
检查您的工作表名称或范围名称是否正确
-
是的,工作表名称是正确的。我使用复制/粘贴来确保一切都是 100% 准确的。我假设问题出在
Sheets(Array(SheetsToPrint)).Printout代码上的实际语法