我有一个包含多个工作表的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)具有工作表名称的列表是否可以自动生成并按其位置排序(即,在工作表标签中从左到右 - >在列中从上到下)?
答案 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
删除工作表时,第二个选项不可靠(它们的整数索引可能不是顺序的)所以我更喜欢第一个选项。