我是VBA的新手,所以如果这是一个愚蠢的问题,我很抱歉,但我试图设置一个宏,根据最后一天清除工作表中的行报告的运行月份。
我发现很简单:
ActiveSheet.Range(范围).Clear
这对我来说很完美但是我在工作簿中有类似的工作表,我试图保护自己不会在错误的工作表中意外地测试宏并删除我需要的东西,所以我试图以一种方式添加到宏检查活动工作表是否是工作簿中的7个工作表之一。如果不是这7个中的一个,那么就不要清楚了。如果是,请清楚。
我发现如果我做了这样的事情:
If Not ActiveSheet.Name = Worksheets("014").Name Then
Else
ActiveSheet.Range("40:42").Clear
End If
这适用于单个工作表,但我需要检查另外6个工作表名称。我知道我可以使用多个" IF NOT"检查每个工作表的语句,但有一个更简洁,更清晰的方法来检查相同的所有七个工作表名称" IF NOT"声明?
谢谢你, 降压
答案 0 :(得分:2)
我会使用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
答案 1 :(得分:0)
将所有工作表名称放入一个字符串中,然后使用它。
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
逗号搜索技巧是Zev Spitz。