如何访问公共类属性并在多个模块中保留/修改类属性值的实例



类别贷款申请人

Private mstrPropertyName As String
Property Get Name() As String
Name = mstrPropertyName
End Property
Property Let Name(rData As String)
mstrPropertyName = rData 
End Property

Sub初始化类并为属性赋值

Public ApplicantName As String
Sub Initilise()
Dim Applicant1 As LoanApplicant

ApplicantName = "Steve"

Set Applicant1 = New LoanApplicant
Applicant1.Name = "Frank"
End Sub

要打印,第一个消息框作为公共变量工作,但第二个不工作。

Sub CreateClass(Applicant1 As Object)
Call Initilise
MsgBox (ApplicantName)
MsgBox (Applicant1.Name)
End Sub

创建具有属性的类

然后,我有两个模块。比方说,在第一个模块中,我初始化类并创建一个类的实例,为类属性等赋值。

问题是,如何在另一个模块中访问相同的实例属性值?我在我的例子中测试过,当退出sub时,类的实例会被破坏。类属性的值不会被保留。

感谢

合理的理由是,在现实世界中,当创建一个申请人类时,它可以有多个申请人实例,application1、application2等。在不同的模块中,程序必须修改同一申请人的属性。

在Initilise过程中,一旦创建了LoanApplicationnt的实例并为Name属性指定了名称,就需要调用CreateClass过程并将其传递给新创建的对象。

这里有一个例子供您查看。不过,请注意,我将过程的名称从CreateClass更改为DisplayMessage,以反映其真正目的。

Public ApplicantName As String
Sub Initilise()
ApplicantName = "Steve"

Dim Applicant1 As LoanApplicant
Set Applicant1 = New LoanApplicant
Applicant1.Name = "Frank"

DisplayMessage Applicant1
End Sub
Sub DisplayMessage(Applicant As Object)
MsgBox ApplicantName

MsgBox Applicant.Name

End Sub

所以我得到了我想要的新版本。

整体模块和子

Sub Main()
Dim Applicant1 As LoanApplicant
Set Applicant1 = New LoanApplicant      
ApplicantCreate Applicant1
IncomeEntry Applicant1
ExpenseEntry Applicant1
MsgBox (Applicant1.name)
MsgBox (Applicant1.Income)
MsgBox (Applicant1.Expense)     
End Sub
Sub ApplicantCreate(Applicant As Object)
Applicant.name = "Frank"  
End Sub
Sub IncomeEntry(Applicant As Object)
Applicant.Income = 100000
End Sub
Sub ExpenseEntry(Applicant As Object)
Applicant.Expense = 5000
End Sub

每个子模块都可以放在不同的模块中,不会改变我想要的结果。

这只是它将应用于每个sub的业务逻辑的简化版本。实际上,它可能要复杂得多。所以,我明白了。

接下来的问题是,是否有可能采取另一种方法?我的意思是,当我知道只有一个申请人时,这很好。如果我不知道Main会产生多少申请者呢?另外,我必须在Main中创建不同对象的所有瞬间吗?如果我使用这种方法,我想我必须这样做,但我只是想知道是否还有其他选择。例如,如果我可以在任何子?

最新更新