Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如果激活图纸是一组图纸中的一个,则执行操作_Excel_Vba - Fatal编程技术网

Excel 如果激活图纸是一组图纸中的一个,则执行操作

Excel 如果激活图纸是一组图纸中的一个,则执行操作,excel,vba,Excel,Vba,我正在尝试清除工作表中的行 我找到了ActiveSheet.Range(Range).Clear 我在工作簿中有类似的工作表,我试图保护自己不被意外删除我需要的东西 我正在尝试检查活动工作表是否是工作簿中7个工作表之一。如果不是,就不清楚了 If Not ActiveSheet.Name = Worksheets("014").Name Then Else ActiveSheet.Range("40:42").Clear End If 这适用于单个工作表,但我需要再检查6个工作表名称

我正在尝试清除工作表中的行

我找到了
ActiveSheet.Range(Range).Clear

我在工作簿中有类似的工作表,我试图保护自己不被意外删除我需要的东西

我正在尝试检查活动工作表是否是工作簿中7个工作表之一。如果不是,就不清楚了

If Not ActiveSheet.Name = Worksheets("014").Name Then

Else
    ActiveSheet.Range("40:42").Clear
End If

这适用于单个工作表,但我需要再检查6个工作表名称。我可以用多个“IF NOT”语句来检查每张工作表,但是否有一种更简洁的方法来检查同一个“IF NOT”语句中的所有七个工作表名称?

将所有工作表名称放入一个字符串中,然后使用该字符串

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
Dim strSheetNames作为字符串
将ws设置为工作表
设置ws=ActiveSheet
strSheetNames=“,Sheet1,Sheet2,sheet3014…”包括所有图纸名称
如果InStr(strSheetNames,“,”和ws.Name&“,”)0,则
远景范围(“40:42”)。清晰
如果结束

逗号搜索技巧是按照Zev Spitz进行的。

将所有工作表名称放在一个字符串中,然后使用该字符串

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
Dim strSheetNames作为字符串
将ws设置为工作表
设置ws=ActiveSheet
strSheetNames=“,Sheet1,Sheet2,sheet3014…”包括所有图纸名称
如果InStr(strSheetNames,“,”和ws.Name&“,”)0,则
远景范围(“40:42”)。清晰
如果结束

逗号搜索技巧是根据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

我会使用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

是的,将工作表名称放入一个数组并遍历该数组,然后测试是否找到任何名称,然后退出sub。或者使用INSTR将所有名称放入一个字符串并测试名称是否在字符串中。测试
ActiveSheet.name=工作表(“014”).name
没有意义。相反,您应该只使用
ActiveSheet.Name=“014”
@ScottCraner谢谢。“我自学成才,还在学习,所以我不确定我是否完全理解你说的话。”爸爸说,谢谢。当我试着解决问题的时候,这个办法奏效了,所以我就这么做了。学习任何使事情更简单的方法都是值得赞赏的。下面是对数组的简单解释:。然后做一个循环并通过它。Scott建议的另一个选项是
如果InStr(“sheet1,sheet2,sheet3014,…”,ActiveSheet.Name)0,则
只需将所有工作表名称放在一个长字符串中,并在字符串中搜索要检查的工作表名称。当然,只有在没有工作表名称是其他工作表名称的子字符串的情况下,这才有效。是的,将工作表名称放入一个数组并遍历该数组,然后测试是否找到任何名称,然后退出sub。或者使用INSTR将所有名称放入字符串,并测试名称是否在字符串中。测试
ActiveSheet.name=Worksheets(“014”).name
没有意义。相反,您应该只使用
ActiveSheet.Name=“014”
@ScottCraner谢谢。“我自学成才,还在学习,所以我不确定我是否完全理解你说的话。”爸爸说,谢谢。当我试着解决问题的时候,这个办法奏效了,所以我就这么做了。学习任何使事情更简单的方法都是值得赞赏的。下面是对数组的简单解释:。然后做一个循环并通过它。Scott建议的另一个选项是
如果InStr(“sheet1,sheet2,sheet3014,…”,ActiveSheet.Name)0,则
只需将所有工作表名称放在一个长字符串中,并在字符串中搜索要检查的工作表名称。当然,这仅在没有作为其他工作表名称的子字符串的工作表名称时有效。您可以在
strSheetNames
的开头和结尾以及传递给
Instr
的第二个参数中添加逗号:
strSheetNames=“,Sheet1,Sheet2,sheet3014:”:if Instr(strSheetNames,,“&ws.Name&,”)0然后
。唯一的问题是工作表名称中是否有逗号。您可以在
strSheetNames
的开头和结尾以及传递给
Instr
的第二个参数中添加逗号:
strSheetNames=“,Sheet1,Sheet2,sheet3014:”:如果Instr(strSheetNames,“&ws.name&“,”)0则
。唯一的问题是图纸名称中是否有逗号。