Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 您知道如何在VBA代码中标记行吗?_Excel_Vba - Fatal编程技术网

Excel 您知道如何在VBA代码中标记行吗?

Excel 您知道如何在VBA代码中标记行吗?,excel,vba,Excel,Vba,我想区分VBA代码中的行,特别是pair命令。我尝试级联它们,但尽管我付出了努力,但有时当我在其他周期中有更多的周期时,我会弄不清楚代码属于哪一对/结束在哪里。有没有办法用颜色标记线条?这样我就可以通过颜色来区分配对命令了 多谢各位 杰克本身没有标记功能。 使用带有撇号的Comment函数创建节 乙二醇 etc不幸的是,VBA编辑器中没有匹配if和结束endif的功能。 我使用Rubberduck,一个VBA的免费附加组件。使用它,您可以轻松地缩进代码并使其更具可读性 之前: Option Ex

我想区分VBA代码中的行,特别是pair命令。我尝试级联它们,但尽管我付出了努力,但有时当我在其他周期中有更多的周期时,我会弄不清楚代码属于哪一对/结束在哪里。有没有办法用颜色标记线条?这样我就可以通过颜色来区分配对命令了

多谢各位


杰克

本身没有标记功能。 使用带有撇号的Comment函数创建节

乙二醇


etc

不幸的是,VBA编辑器中没有匹配if和结束endif的功能。 我使用Rubberduck,一个VBA的免费附加组件。使用它,您可以轻松地缩进代码并使其更具可读性

之前:

Option Explicit

Function test(a As Integer)
Dim b As Integer

    b = 1
     If a > 1 Then
   b = 2
    If a > 21 Then
b = 3
Else
b = 4
    End If
       End If
    test = b
End Function
经Rubberduck加工后:

Option Explicit

Function test(a As Integer)
    Dim b As Integer

    b = 1
    If a > 1 Then
        b = 2
        If a > 21 Then
            b = 3
        Else
            b = 4
        End If
    End If
    test = b
End Function
它还可以做更多的事情。
您可以在这里下载:

正如建议的那样,使用压头强制执行一致的压入。存在几个提供此功能的VBIDE外接程序,包括原始的Smart Indenter(免费,仅32位)和(免费,开源,也可在64位主机上工作-我是一个贡献者)

编写更小的程序 尽可能少地履行以其名义作出的承诺的程序。做一件事的过程通常做得很好,并且很容易有意义地命名

如果有嵌套循环,则可以将内部循环提取到其自己的范围中。如果嵌套循环有一个条件分支,则可以重构每个条件分支并将其提取到自己的范围中。可能的结果是,您最终删除了冗余代码,因为很多时候,您从一个分支中提取的内容与从另一个分支中提取的内容非常相似,保存一些参数值,这些参数值一旦重构,就会变成实际参数;过程变得越来越小,越来越专业化,它们所做的事情太少,以至于给它们命名变得很简单:“这个过程做X”,从代码中可以清楚地看到这一点

重构箭头代码 杰夫·阿特伍德(Jeff Atwood)有一篇优秀的文章,题为。如果您的代码如下所示:

If ...
    If ...
        If...
            For ...
               For ...
                   If ...
                       ...
                   End If
               Next
            Next
        End If
    End If
End If
…你有箭头代码。有一些已知的、文档化的技术可以真正增强这些代码,
“~~~~~~~~~~~~~~~
不是其中之一

  • 用保护条款替换条件

    If SomeImportantCondition Then
        'procedure body
    End If
    
    变成:

    If Not SomeImportantCondition Then Exit Sub / Err.Raise ...
    'procedure body
    
  • 将条件块提取到它们自己的范围中

  • 反转条件以减少嵌套

  • 如果可以,请尽早返回/退出

  • 目标是尽可能减少水平滚动,并减少嵌套和圈复杂度,这些都是可以采取行动的真实、可测量的度量


    评论是为了说明原因,而不是什么。让代码说什么。

    我建议您使用智能压头这样的压头工具,并养成在写入起始块后立即写入结束块的习惯。@Rory原始智能压头仅在32位主机中工作。官方64位端口是now的一部分:)@MathieuGuindon是的,但大多数人使用32位Office我们使用64位,我会试试Rubberduck,谢谢你们。b永远不会是2;)。在任何情况下,Rubberduck都是一个不错的工具。我已经完成了区块开发,将在几周内将该功能发布到Rubberduck;这将使VBE在您键入
    If时自动添加,例如
    End If
    。。。{ENTER}
    无论何时添加这样的注释,您都错过了将代码拉入更小、更专业的过程的机会,这些过程做得更少,失败的原因也更少。@MathieuGuindon是否还有这样的地方?如果出于测试目的(例如,随机数据)插入代码,我会标记代码的一小部分,以确保以后更容易拉出非生产代码。@MathieuGuindon我同意你的看法。我想我指的是评论技术的适用性,而不是内容。@SmrtGrunt好的,我会尽量说得更清楚:“横幅评论”说的是什么,而不是为什么——根据定义,它们是不好的评论,它们会分散代码的注意力,并尖叫“我的过程做了太多事情”。
    If Not SomeImportantCondition Then Exit Sub / Err.Raise ...
    'procedure body