在Excel中,选择所有可见的工作表就像在任何工作表选项卡上单击鼠标右键并选择“选择所有工作表”一样简单。但是,使用VBA代码完成相同的任务更加困难。

Excel的在线帮助建议将Array函数与Sheets集合一起使用,以按名称选择图纸。当您知道工作簿中每个工作表的名称时,此方法非常有用。当您要创建通用代码以选择任何工作簿的所有工作表时,这会带来问题。好消息是您可以使用Microsoft技术的一种变体,以按索引号引用工作表。下面是代码:

Sub SelectSheets()

Dim myArray() As Variant     Dim i As Integer     For i = 1 To Sheets.Count         ReDim Preserve myArray(i - 1)

myArray(i - 1) = i     Next i     Sheets(myArray).Select End Sub

除非工作簿包含隐藏的工作表,其中Sheets(i).Visible = False,否则这会很好。当然,上面的代码可以修改为忽略隐藏的工作表:

Sub SelectSheets()

Dim myArray() As Variant     Dim i As Integer     Dim j As Integer     j = 0     For i = 1 To Sheets.Count         If Sheets(i).Visible = True Then             ReDim Preserve myArray(j)

myArray(j) = i             j = j + 1         End If     Next i     Sheets(myArray).Select End Sub

但是,Select方法有一个鲜为人知的参数:Replace参数。通过使用“替换”参数,选择所有可见的工作表变得更加容易:

Sub SelectSheets1()

Dim mySheet As Object     For Each mySheet In Sheets         With mySheet             If .Visible = True Then .Select Replace:=False         End With     Next mySheet End Sub

请注意,mySheet被定义为对象数据类型,而不是工作表数据类型。这样做是因为在测试中我遇到了图表工作表的问题-由于它们不是工作表类型,因此无法选择它们。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(3058)适用于Microsoft Excel 97、2000、2002和2003。您可以在以下位置找到适用于Excel功能区界面的本技巧的版本(Excel 2007及更高版本):