2015-11-03 62 views
0

我正在用vba编写一个中等大小的脚本,大约有40个子目录,而且我的一个子目录包含> 60个变量,这使得跟踪所有声明的变量有点困难。 (我是否有这个或那个变量?我是否应该回收变量用于多用途,是否声明不再使用的变量等等)如何排序声明变量的顺序

现在,声明是按历史排序的,这意味着当我声明了一个新的变量,我将该行放在所有其他声明的下面,但是这看起来不太好。

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

所以我想为我的代码读取器,其命令你会最喜欢和我应该考虑其在子分组外观变量什么程度。 变量声明的顺序是否有任何标准化的良好实践? 也许有些例子可供学习?

问候,andy01q

PS:请注意,我通常会去像“DIM A,B,C如龙”在其他语言,但由于VBA原来申报A和B作为变型与该行的代码我决定给每个变量自己的行(以避免错误,我不小心将变量声明为其他变量之间的Variant,它们都具有相同的类型)。它避免了错误,但导致了混乱。

+0

也许你应该分解成几个较小的潜艇。六十个变量是一种可怕的代码味道。 – phoog

+0

在稍后的施工阶段,它将被拆分成12-20个较小的潜艇,但现在会非常麻烦。尽管如此,感谢您的评论,您的观点当然有效。 – andy01q

回答

0

从某些方面来说,只要它是合理的,并且您始终如此,您所做的并不重要。这是我从史蒂夫麦康奈尔的书“代码完成”中收集到的东西之一。本书包含了关于变量命名,代码布局,评论风格等方面的优秀建议。在阅读完该书(主要使用C和Pascal作为示例,但很容易应用于任何语言)之后,我的VBA变得更加完善。

我写了一分扩大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 

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

+0

谢谢你的回答。您提到的这本书建议在用于最小化其跨度和活动时间之前声明变量。我也问过一位朋友,他建议给变量前缀对应他们的名字。 (比如strname,lngcounter,rngsearchrange等)我会重新考虑一切,然后做出我的决定。 – andy01q

+0

*对应于他们的类型 – andy01q

+0

@ andy01q我倾向于喜欢我的变量定义在一个子或函数的开头,所以我总是知道去哪里去找到声明 - 但我的编码风格是有很多小函数/ subs而不是几个大的,所以我很少遇到这种情况,即我的变量的使用距离它的声明太远了。就前缀而言,你听起来像是指匈牙利符号*的一些变体。 Joel Spolsky(Stack Overflow的两位创始人之一)有一篇很长很好的博客文章:http://www.joelonsoftware.com/articles/Wrong.html –