gpt4 book ai didi

vba - 在 VBA 类中使用全局常量、类型和函数是一种好习惯吗?

转载 作者:行者123 更新时间:2023-12-04 14:12:57 26 4
gpt4 key购买 nike

我已经开始使用 VBA 类,并且我一直试图编写我的代码,使每个类都是“独立的”,也就是说,它具有它需要的一切——常量、函数等——在里面。但是最近,这种方法导致了代码重复,因为我没有在不同的模块中调用公共(public)函数,而是将“外部世界”(在同一个项目中)的一些代码复制到一个类中,以保持其“自给自足” .

我正在考虑更改一些类,以便它们能够像任何其他模块一样从其他模块访问函数、常量、类型等,但我内心的某些东西告诉我这可能不是一个好习惯。谁能告诉我小声音说的不对?有更好的方法吗?

谢谢。

更新:

我很抱歉没有早点提供细节。这是一个示例代码:

'-------------------------------------
'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

注意注释中带有“<====”的代码;该类使用在类之外定义的类型、函数和常量,这让我想知道这是一种好的做法还是有更好的选择。我想我只是没有完全理解封装的概念。

最佳答案

我从不将公共(public)常量放在类模块中。所有,我的意思是,我的所有公共(public)变量和常量都在一个名为 MGlobals 的标准模块中。这有两个好处。首先,你和我都知道在哪里可以找到它们——它们有些危险,需要被发现。其次,如果该模块超过几行,我知道我很懒,需要重构。

尝试保持类模块模块化是一个很好的做法。但不要胡思乱想。好的编程永远不会将选择的模块放入项目中并让它们正常工作。对于任何重要的项目,都需要并且应该进行整合。

关于vba - 在 VBA 类中使用全局常量、类型和函数是一种好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9494882/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com