如果活动工作表是(或不是)在一组工作表中,则执行操作

我是新来的VBA,所以我很抱歉,如果这是一个愚蠢的问题,但我想设置一个macros,清除工作表中的行的基于报表运行的月份的最后一天。

简单的我发现:

ActiveSheet.Range(范围).Clear

这对我来说是完美的,但我在工作簿中有类似的工作表,我试图保护自己不要在错误的表格中意外地testingmacros,并删除我需要的东西,所以我试图添加到macros的方式来检查查看活动工作表是否是工作簿中的7个工作表之一。 如果不是其中之一,则不清楚。 如果是,清楚。

我发现如果我做了这样的事情:

If Not ActiveSheet.Name = Worksheets("014").Name Then Else ActiveSheet.Range("40:42").Clear End If 

这对于单个工作表非常适用,但我需要检查另外6个工作表名称。 我知道我可以用多个“IF NOT”语句来检查每个表单的代码长度,但是在同一个“IF NOT”语句中检查所有七个工作表名称的方法是否更简洁?

谢谢,巴克

把所有的工作表名称放入一个string,然后使用它。

 Dim strSheetNames as String Dim ws As Worksheet Set ws = ActiveSheet strSheetNames = ",Sheet1,Sheet2,Sheet3,014..," 'include all sheet names If InStr(strSheetNames,"," & ws.Name & ",") <> 0 Then ws.Range("40:42").Clear End If 

逗号search技巧是每Zev Spitz。

我将使用Scripting.Dictionary来保存您有兴趣检查的工作表的名称:

 Dim dict As New Scripting.Dictionary dict.Add("Sheet1", 1) 'the actual values don't matter; we want to check against the keys dict.Add("Sheet2", 1) dict.Add("Sheet3", 1) dict.Add("014", 1) 

然后我们可以检查字典中是否存在关键字:

 If dict.Exists(ws.Name) Then ws.Range("40:42").Clear End If 

你也可以使用一个数组:

 Dim sheetNames(4) As String sheetNames(0) = "Sheet1" sheetNames(1) = "Sheet2" sheetNames(2) = "Sheet3" sheetNames(3) = "014" 

但是由于没有内置的方法来检查数组中是否存在项目,所以您必须自己编写这样一个函数:

 Function ContainsItemm(col As Variant, item As Variant) As Boolean Dim x As Variant For Each x In col If x = item Then ContainsItem = True Exit Function End If Next End Function 

并使用它:

 If ContainsItem(sheetNames, ws.Name) Then ws.Range("40:42").Clear End If