我在vba中编写了一个中等大小的脚本,其中包含~40个子,其中一个我的子包含了> 60个变量,这使得跟踪所有声明的变量变得有些困难。 (我有这个或那个变量吗?我是否可以为多用途回收变量,我是否声明了不再使用的变量等等。)
现在,声明按历史排序,这意味着当我声明一个新变量时,我将该行放在所有其他声明之下,但这似乎不是很好的编码实践。
我想到的因素是数据类型(使用的类型是布尔,长,单,双,字符串,范围,对象和变体,包括不同数据类型的数组。这些我可以按大小排序,按字母顺序排列,目的,等等,按字母顺序,历史上(我不再喜欢),通过第一次出现在sub(需要大部分维护工作),按目的(即将变量i,j和k组合在一起)并按他们将使用哪些部分。 (下半部分,中部,底部等)
所以我想知道作为我的代码的读者你最想要的顺序,以及我应该考虑在多大程度上根据它们在sub中的外观对变量进行分组。 变量声明的顺序是否有任何标准化的良好实践? 也许有一些例子要研究吗?
问候,andy01q
PS:请注意,我通常会在其他语言中使用“Dim a,b,c as Long”,但由于vba最终声明a和b作为该行代码的变体我决定给每个变量自己的行(以避免错误,其中我意外地将变量声明为变量,所有变量都具有相同的类型。)这避免了错误但导致了给定的混乱。
答案 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
然后扩展的声明已准备好粘贴到代码中。