2015-11-03 71 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 –