Запустите определенный макрос, если ActiveSheet.Name указан в массиве - PullRequest
0 голосов
/ 13 ноября 2018

Я написал макрос для вызова одной из 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 голосов
/ 13 ноября 2018

Следуя совету @ Gary's Student, мне пришлось искать решение, так как мои знания 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

Я раньше не видел созданный таким образом массив, но я понимаю, как он работает. Насколько мне известно в будущем, кто-нибудь еще сделает это другим или более эффективным способом?

0 голосов
/ 13 ноября 2018

Как уже упоминалось в комментариях, вы можете использовать массив имен листов.В третьем тесте условий я бы затем использовал 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
...