gpt4 book ai didi

vba - 以形式保留类模块

转载 作者:行者123 更新时间:2023-12-02 01:28:44 26 4
gpt4 key购买 nike

假设我想用 Excel VBA 制作一个自行车设计师程序。我有一个类对象(cBike),它有一些默认设置。现在我想制作一个表单(如图中的表单),可用于在将自行车存储到数据库之前更改这些设置。用于存储的方法(sub)位于cBike中。

Example of a userform for designing a bicycle.

我可以将该对象保留为表单代码中的公共(public)变量,如下所示:

Public objBike As cBike 
Public Sub StoreBikeToDatabase()
'database storing code goes here
End Sub

虽然这可行,但我看到很多人反对使用公共(public)(全局)变量。我不太清楚为什么,除了如果你有太多全局变量,你的代码会变得一团糟。

或者,我可以忘记该对象,并使用不同表单控件中的值,而不是类模块 cBike 的属性。然而,这似乎是一个有点笨拙的解决方案。

我的问题是:上述解决方案中哪一个是最好的(如果有的话)?如果都没有,那我该怎么办?

更新:我强烈建议您阅读已接受的答案以及进一步深入的答案。这两个答案都有一些很棒的想法,dee 的帖子还提供了一些全面的代码示例,这些示例可用于其他有与我类似问题的人。

最佳答案

表单本质上本身就是一个类,因此我建议在表单中创建一个私有(private)属性来保存您的 Bike 对象。然后,您可以通过属性设置例程将现有的 Bike 对象传递到表单/类中。

如果需要由表单中的多个例程访问 Bike 成员/属性,则在表单级别声明 Bike 成员/属性没有问题。仅当该对象需要被整个项目使用时才应使用全局/公共(public)变量(在模块中声明)。

'Private Member of this Form/Class
Private mBike As cBike

'Pass the existing object into this Form/Class
Public Property Let Bike(ByVal obj As cBike)

Set mBike = obj

End Property

您可以通过如下声明 cBike 的属性来有效地在表单控件和类之间创建动态链接:

Private WithEvents mTextBox1 As MSForms.TextBox

Public Property Set TextBox1(ByVal obj As MSForms.TextBox)

Set mTextBox1 = obj

End Property

这意味着如果文本框的值发生更改,您将不需要继续将其传递给类。您将需要 Microsoft Forms 2.0 对象库的引用集

关于vba - 以形式保留类模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41822761/

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