我写了一个宏来调用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
非常感谢。
答案 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
我以前没有看过以此方式创建过的数组,但是我了解它是如何工作的。就我的未来知识而言,还有其他人会以其他方式或更有效地做到这一点吗?