如果ActiveSheet.Name在数组中列出,请运行特定的宏

时间:2018-11-13 12:40:25

标签: arrays excel vba worksheet

我写了一个宏来调用3个子程序之一,具体取决于ActiveSheet.Name。它在前两种情况下有效,但在第三种情况下无效-如果活动工作表名称是数组中列出的名称之一。

请有人可以告诉我如何更正我的代码吗?

Sub TBtnYR_Click()

' Hides Year R Columns

Dim mySheets As Sheets

Set mySheets = Sheets(Array(Sheet21.Name, Sheet6.Name, Sheet7.Name, Sheet8.Name, Sheet9.Name, _
    Sheet10.Name, Sheet11.Name, Sheet16.Name, Sheet17.Name, Sheet18.Name))

    If ActiveSheet.Name = "Bookbands" Or ActiveSheet.Name = "KS1 - TRP" Then
        BookbandsandTRPYR
    ElseIf ActiveSheet.Name = "RWM" Then
        RWMYR
    ElseIf ActiveSheet.Name = mySheets.Item(ActiveSheet.Index).Name Then
        OtherSubjsYR
    End If

End Sub

非常感谢。

2 个答案:

答案 0 :(得分:1)

如注释中所述,您可以使用一组工作表名称。然后在第三个条件测试中,我将使用Application.Match来查看Activesheet.Name是否在数组中:

Dim arrSheets()
arrSheets = Array("Sheet1", "Sheet2")

'your code   
ElseIf Not IsError(Application.Match(ActiveSheet.Name, arrSheets, 0)) Then
    Debug.Print "Tada"
End If

答案 1 :(得分:0)

根据@Gary的学生的建议,我不得不搜索解决方案,因为我的VBA知识还不够安全,无法生成正确的语法。

我找到并修改了类似的代码来创建此解决方案:

Sub TBtnYR_Click()

' Hides Year R Columns

Dim ArrayElement As Variant
Dim OtherSubjects(0 To 9) As String

OtherSubjects(0) = "Art"
OtherSubjects(1) = "Computing"
OtherSubjects(2) = "Design Technology"
OtherSubjects(3) = "Geography"
OtherSubjects(4) = "History_"
OtherSubjects(5) = "MFL"
OtherSubjects(6) = "Music"
OtherSubjects(7) = "PE"
OtherSubjects(8) = "RE"
OtherSubjects(9) = "Science"

    If ActiveSheet.Name = "Bookbands" Or ActiveSheet.Name = "KS1 - TRP" Then
        BookbandsandTRPYR
    ElseIf ActiveSheet.Name = "RWM" Then
        RWMYR
    Else
    For Each ArrayElement In OtherSubjects
        If ActiveSheet.Name = ArrayElement Then
        OtherSubjsYR
    End If
    Next
    End If

End Sub

我以前没有看过以此方式创建过的数组,但是我了解它是如何工作的。就我的未来知识而言,还有其他人会以其他方式或更有效地做到这一点吗?