如何排序声明变量的顺序

时间:2015-11-03 13:51:59

标签: vba variables declaration

我在vba中编写了一个中等大小的脚本,其中包含~40个子,其中一个我的子包含了> 60个变量,这使得跟踪所有声明的变量变得有些困难。 (我有这个或那个变量吗?我是否可以为多用途回收变量,我是否声明了不再使用的变量等等。)

现在,声明按历史排序,这意味着当我声明一个新变量时,我将该行放在所有其他声明之下,但这似乎不是很好的编码实践。

我想到的因素是数据类型(使用的类型是布尔,长,单,双,字符串,范围,对象和变体,包括不同数据类型的数组。这些我可以按大小排序,按字母顺序排列,目的,等等,按字母顺序,历史上(我不再喜欢),通过第一次出现在sub(需要大部分维护工作),按目的(即将变量i,j和k组合在一起)并按他们将使用哪些部分。 (下半部分,中部,底部等)

所以我想知道作为我的代码的读者你最想要的顺序,以及我应该考虑在多大程度上根据它们在sub中的外观对变量进行分组。 变量声明的顺序是否有任何标准化的良好实践? 也许有一些例子要研究吗?

问候,andy01q

PS:请注意,我通常会在其他语言中使用“Dim a,b,c as Long”,但由于vba最终声明a和b作为该行代码的变体我决定给每个变量自己的行(以避免错误,其中我意外地将变量声明为变量,所有变量都具有相同的类型。)这避免了错误但导致了给定的混乱。

1 个答案:

答案 0 :(得分:1)

在某些方面,只要合理且一贯地做到这一点,你做什么并不重要。这是我从Steve McConnell的“Code Complete”一书中收集到的内容之一。本书包含有关变量命名,代码布局,评论风格等内容的优秀建议。阅读完本书之后,我的VBA变得更加精致(主要使用C和Pascal作为示例,但很容易应用于几乎任何语言)。 / p>

我写了一个子来扩展Dim行:

Sub expand(dimLine As String)
    Dim fragments As Variant
    Dim i As Long, n As Long, myType As String
    Dim last As Variant
    Dim expanded As String

    fragments = Split(dimLine, ",")
    n = UBound(fragments)
    last = Split(Trim(fragments(n)))
    myType = last(UBound(last))
    For i = 0 To n - 1 'excludes last fragment
        expanded = expanded & IIf(i = 0, "", ",") & fragments(i) & " As " & myType
    Next i
    expanded = expanded & IIf(n > 0, ",", "") & fragments(n)
    Debug.Print expanded
End Sub

如果您在立即窗口中键入expand "Dim a, b, c as Long",它会扩展为

Dim a As Long, b As Long, c as Long

可以直接粘贴到您的代码中。写完之后,我从来没有发现它特别有用 - 但是我再也没有一个带有> 60个变量的子。也许它可以帮到你。

开启编辑:expand可以修改为复制到剪贴板,而不是(或除此之外)打印到即时窗口。为此:

1)在项目中添加对Microsoft Forms 2.0 Object Library的引用

2)包括声明Dim clip As New DataObject

3)用两行替换(或补充)行Debug.Print expanded

clip.SetText expanded
clip.PutInClipboard

然后扩展的声明已准备好粘贴到代码中。