首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >应用选择案例

应用选择案例
EN

Stack Overflow用户
提问于 2013-12-01 21:44:38
回答 2查看 312关注 0票数 1

目前的代码如下:

代码语言:javascript
运行
复制
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版本。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-01 22:02:54

下面是我使用Select Case的尝试--尽管我更喜欢KazJaw的If/ElseIf,因为它更灵活。

代码语言:javascript
运行
复制
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语句:

代码语言:javascript
运行
复制
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/...语句更好的了!

票数 4
EN

Stack Overflow用户

发布于 2013-12-01 21:53:56

这样做会更有效率:

代码语言:javascript
运行
复制
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是不好的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20317630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档