我已經開始使用VBA類,並且一直試圖編寫我的代碼,以便每個類都是「獨立的」,即它具有它所需的一切 - 常量,函數等等。最近,這種方法導致了代碼重複,因爲我不是在不同的模塊中調用公共函數,而是將一些來自「外部世界」(在同一個項目中)的代碼複製到一個類中,以維持其「自給自足」 。在VBA類中使用全局常量,類型和函數是否是一種好習慣?
我正在考慮改變一些類,以便像其他模塊一樣可以從其他模塊訪問函數,常量,類型等,但是我的某些東西告訴我這可能不是一個好東西實踐。有人可以告訴我,這個小小的聲音說的是錯的嗎?有更好的方法嗎?
謝謝。
更新:
我不較早提供細節道歉。下面是一個示例代碼:
'-------------------------------------
'Module 1
'-------------------------------------
Public Const INITIAL_VALUE As String = "Start"
Public Const FINAL_VALUE As String = "End"
'more constants ...
Public Type SheetLoc
SheetName As String
SheetRow As Long
SheetColumn As Long
End Type
'more types ...
'-------------------------------------
'Module 2
'-------------------------------------
Public Function GetLocation(key As String) As SheetLoc
Dim myLoc As SheetLoc
'some codes here...
'
With myLoc
.SheetName = someValue
.SheetColumn = anotherValue
.SheetRow = stillAnotherValue
End With
GetLocation = myLoc
End Function
'more module functions
'-------------------------------------
'Class Module
'-------------------------------------
'some codes...
Public Sub SaveResults()
Dim currLoc As SheetLoc '<==== using a type defined outside of the class
'more declarations ....
'some codes here ....
If currentValue = INITIAL_VALUE Then '<=== referring to external constant
currLoc = GetLocation(someKey) '<=== calling an external function
ElseIf currentValue = FINAL_VALUE Then '<=== referring to an external constant
currLoc = GetLocation(anotherKey)
Else
currLoc = GetLocation(defaultKey)
End If
'populate data ...
'save results ...
End Sub
注意與評論「< ====」的代碼;該類使用類之外定義的類型,函數和常量,這就是我想知道這是一種好的做法還是有更好的選擇。我想我只是沒有完全得到封裝的概念。
請提供一些代碼示例,讓人們瞭解「告訴我這可能不是一個好習慣」。 – shahkalpesh 2012-02-29 07:17:12
http://www.cpearson.com/excel/classes.aspx – JMax 2012-02-29 07:39:30
很高興知道您的意思是否是針對某些事情的良好實踐..通常這只是爲了您自己,您可以理解,然後纔是好的做法... – gbianchi 2012-02-29 17:55:44