Excel宏可以打印多个工作表的不同数量的副本

时间:2018-02-20 19:58:13

标签: excel excel-vba printing vba

我有一个包含多个工作表的Excel工作簿。在此工作簿中,偶尔会删除,重命名或添加工作表。此工作簿具有一个工作表(Sheet1),该工作表应该用作命令中心,用于打印工作簿中其他工作表的副本。不幸的是,此打印命令中心无法正常工作。

指挥中心只有两列。在A列中是一个包含其他表格名称的列表。在B列中,用户可以指定A列中相应纸张的打印份数。

这是当前的代码:

Sub PrintSheets()
    Dim mysheets As Range
    For Each mySheets In Sheet1.Range("A2:A100")
    If mySheets.Offset(0, 1).Value <> "" Then Sheets(mySheets.Value).PrintOut Copies:=mySheets.Offset(0, 1).Value
    Next mySheets
End Sub

前两张纸按预期打印,然后我得到一个&#34;运行时错误&#39; 9&#39;:下标超出范围&#34;

1)如何修复错误?

2)具有工作表名称的列表是否可以自动生成并按其位置排序(即,在工作表标签中从左到右 - >在列中从上到下)?

2 个答案:

答案 0 :(得分:0)

如果您重命名,添加和删除工作表,则必须在打印前更新列表。此子将清除unsigned char,它将在您的第一张表中插入所有工作表名称。确保您的&#34;命令中心&#34; sheet是第一个(或更改对该特殊工作表名称的索引引用)。

Range("A2:A100")

我担心你必须弄清楚代码的放置位置。我不知道您的需求,因此可能在重命名/添加/删除所有工作表之后,或者在工作簿打开或类似的情况下。试试吧!

答案 1 :(得分:0)

表单中的名称似乎与实际名称不完全匹配。您可以使用以下两个选项之一来遍历每个工作表

For Each sht in ThisWorkbook.Sheets
     'Do Something
Next

或者

Dim sht as Worksheet
    For i= 0 to ThisWorkbook.Sheets.Count
    Set sht=ThisWorkbook.Sheets(i)
    'Do something
Next

删除工作表时,第二个选项不可靠(它们的整数索引可能不是顺序的)所以我更喜欢第一个选项。