您好,AA。您知道,几年前有个脚本专家帮助整理了一份关于一家当地青年棒球联盟的 Excel 电子表格。因为在联盟中有 18 个队,所以要求他创建一个其中包含 18 个工作表的 .XLS 文件。并且因为他的 Excel 配置为每个新工作簿仅使用一个工作表(俭则不匮),这就意味着他不得不单击“插入”,再选择“工作表”,然后单击“确定”,如此重复 17 次。难道就不能通过脚本更快捷简单地实现这些操作吗?他不愿谈论这个话题。(编辑附注:而且,我们也不能告诉您是哪位脚本专家做的这件事:如果有谁知道了这件事,Greg 会十分难堪。)
幸运的是,AA,您不必采用这种累人的方法完成您的工作。假定您的 Excel 配置为每一个新工作簿包含三个工作表,下面这段脚本可以为您再添加九个工作表:
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
Set objWorkbook = objExcel.Workbooks.Add()
Set colSheets = objWorkbook.Sheets
colSheets.Add ,,9
是的,您说对了:除了最后一行稍有些难懂之外,这是一个相当简单的小脚本。首先创建一个 Excel.Application 对象的实例,然后将 Visible 属性的值设置为 True;这样我们就可以在屏幕上看到 Excel 的运行实例。接着,使用下面这两行代码添加一个新工作簿(除非您已经更改了默认设置,否则其中将会有三个工作表),并创建一个 Sheets 集合的对象引用:
Set objWorkbook = objExcel.Workbooks.Add()
Set colSheets = objWorkbook.Sheets
剩下的就很容易了。我们打算向 Sheets 集合中再添加九个工作表,因此调用 Add 方法,指定新工作表的数量 (9) 作为第三个参数:
colSheets.Add ,,9
很酷吧?
好问题:那么有关参数 1 和 2 的情形又如何呢?在默认情况下,新工作表被添加到现有工作表之前;这意味着表 1、2 和 3(默认的工作表)实际上将会被推到集合的末尾。如果您不喜欢这样,则可以使用可选参数 1 和 2 指定将所有新表添加到一个特定的工作表之前(参数 1)或者之后(参数 2)。为此,只需创建一个相应工作表的对象引用,然后将该对象引用用作第一个或第二个参数。例如,下面的这个脚本直接在工作表 1 后面添加九个新的工作表(因此将表 2 和 3 推到了集合的末尾):
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
Set objWorkbook = objExcel.Workbooks.Add()
Set objWorksheet = objWorkbook.Worksheets(1)
Set colSheets = objWorkbook.Sheets
colSheets.Add ,objWorksheet,9
正如您所见,我们使用下面这行代码来创建工作表 1 的对象引用:
Set objWorksheet = objWorkbook.Worksheets(1)
然后将此对象引用用作第二个参数以指定将新工作表添加到工作表 1 之后:
colSheets.Add ,objWorksheet,9
就这么简单!要将所有新工作表直接添加到表 3 之前,要使用类似以下的代码(这次将对象引用用作第一个参数):
objExcel.Visible = True
Set objWorkbook = objExcel.Workbooks.Add()
Set objWorksheet = objWorkbook.Worksheets(3)
Set colSheets = objWorkbook.Sheets
colSheets.Add objWorksheet,,9
还有一点需要注意一下:在添加新工作表时,它们始终以“向后”的方式进行添加。就是说,假设您在工作表 3 后面添加了三个新工作表。您可能希望工作表按以下的顺序排列:
Sheet1
Sheet2
Sheet3
Sheet4
Sheet5
Sheet6
实际的顺序并非如此。相反,您将看到这样的情况:
Sheet1
Sheet2
Sheet3
Sheet6
Sheet5
Sheet4
我们早就知道您将提出此问题。对此问题的解释,请查看这篇您好,脚本专家!专栏文章,了解如何对工作簿内的工作表进行排序。
您说的对,也可以重新配置 Excel,使其在默认情况下在每个新的工作簿中提供 12 个工作表。有关这方面的详细信息,请参阅 The Picture Book of Microsoft Office Management(英文)。
但是,如果您要问为什么有个自称是脚本专家的家伙却不使用脚本来节省大量的时间和麻烦,对此问题我们也没有答案。