目前的代码如下:
For Each s In myReport.Sheets
If s.Name = "Data" Then
s.Activate
Excel.ActiveWindow.Zoom = 80
End If
If Left(s.Name, 7) = "Charts_" Then
s.Activate
Excel.ActiveWindow.Zoom = 77
End If
If s.Name = "definitions" Then
s.Activate
Excel.ActiveWindow.Zoom = 75
End If
If s.Name = "Summary" Then
s.Activate
Excel.ActiveWindow.Zoom = 71
End If
Next
使用Select Case
可以提高效率吗?我不确定如何在此上下文中应用VBA
版本的select case。
答案 0 :(得分:4)
我尝试使用Select Case
- 虽然我更喜欢KazJaw的If/ElseIf
,因为它更灵活。
Dim z as Integer
For Each s in myReport.Sheets
Select Case UCase(s.Name)
Case "DATA": z = 80
Case "DEFINITIONS": z = 75
Case "SUMMARY": z = 71
Case Else:
If Left(s.Name, 7) = "Charts_" Then
z = 77
Else
z = 0
End If
End Select
If z Then
s.Activate
ActiveWindow.Zoom = z
End If
Next s
或者,您可以使用以下技巧创建一个非常灵活的Select Case
语句:
For Each s In ThisWorkbook.Sheets
Select Case True
Case s.Name = "Data": z = 80
Case Left(s.Name, 7) = "Charts_": z = 77
Case s.Name = "Defintions": z = 75
Case s.Name = "Summary": z = 71
Case Else: z = 0
End Select
If z Then
s.Activate
ActiveWindow.Zoom = z
End If
Next s
从两个示例中可以看出,第一个Select Case允许您为每个比较执行中央代码(例如UCase
,这是一个很好的做法),而第二个则为您提供充分的灵活性 - 但最终没有其他任何事情,只有If/ElseIf/...
声明!
答案 1 :(得分:2)
这个会更有效率:
For Each s In myReport.Sheets
If s.Name = "Data" Then
s.Activate
Excel.ActiveWindow.Zoom = 80
ElseIf Left(s.Name, 7) = "Charts_" Then
s.Activate
Excel.ActiveWindow.Zoom = 77
ElseIf s.Name = "definitions" Then
s.Activate
Excel.ActiveWindow.Zoom = 75
ElseIf s.Name = "Summary" Then
s.Activate
Excel.ActiveWindow.Zoom = 71
End If
Next
在您的代码If statements
中始终检查四次。在我的代码中,只要条件不符合就会检查它们。可能只有一次,有时是四次,有时在两次之间。
Select Case
对你的情况不会有好处。