目前的代码如下:
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可以提高效率吗?我不知道如何在这个上下文中应用select case的VBA版本。
发布于 2013-12-01 22:02:54
下面是我使用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从这两个例子中可以看出,第一个选择案例允许您为每个比较执行一个中央代码(例如,UCase,这是一个很好的实践),而第二个例子给了您充分的灵活性--但最终没有什么比If/ElseIf/...语句更好的了!
发布于 2013-12-01 21:53:56
这样做会更有效率:
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是不好的。
https://stackoverflow.com/questions/20317630
复制相似问题