应用Select Case

时间:2013-12-01 21:44:38

标签: vba excel-vba excel

目前的代码如下:

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。

2 个答案:

答案 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对你的情况不会有好处。