如何按指定单元格区域内的工作表名批量预览打印Excel工作表?
多工作表打印预览的VBA代码修正
你的代码问题出在单元格区域赋值得到的是二维数组,而Sheets()需要的是一维数组,直接套Array(MyArray)会形成嵌套数组,导致参数不匹配。
给你三种可行的修正方案:
方案一:用Transpose快速转成一维数组
这是最简洁的方法,利用Excel内置函数把单列的二维数组转成一维数组:
Dim MyArray As Variant ' 读取单元格区域并转置为一维数组 MyArray = Application.Transpose(ThisWorkbook.Sheets("Admin Sheet").Range("A1:A2").Value) ' 直接传递一维数组实现打印预览 ThisWorkbook.Sheets(MyArray).PrintPreview
方案二:手动遍历二维数组转一维
如果不想用内置函数,也可以手动循环转换:
Dim MyArray As Variant Dim SheetNames() As String Dim i As Integer ' 读取单元格区域的二维数组 MyArray = ThisWorkbook.Sheets("Admin Sheet").Range("A1:A2").Value ' 初始化一维数组,长度和二维数组行数一致 ReDim SheetNames(1 To UBound(MyArray)) ' 把二维数组的每一行值存到一维数组 For i = 1 To UBound(MyArray) SheetNames(i) = MyArray(i, 1) Next i ' 调用打印预览 ThisWorkbook.Sheets(SheetNames).PrintPreview
方案三:用Collection收集工作表名
适合后续需要扩展操作的场景:
Dim SheetNames As Collection Dim cell As Range Set SheetNames = New Collection ' 遍历单元格收集名称 For Each cell In ThisWorkbook.Sheets("Admin Sheet").Range("A1:A2") SheetNames.Add cell.Value Next cell ' 调用打印预览(需要辅助函数转数组) ThisWorkbook.Sheets(ColToArray(SheetNames)).PrintPreview ' 辅助函数:将Collection转为一维数组 Function ColToArray(col As Collection) As Variant Dim arr() As String Dim i As Integer ReDim arr(1 To col.Count) For i = 1 To col.Count arr(i) = col(i) Next i ColToArray = arr End Function
内容的提问来源于stack exchange,提问作者Joseph Batal
相关产品推荐
相关产品推荐

