类别贷款申请人
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中创建不同对象的所有瞬间吗?如果我使用这种方法,我想我必须这样做,但我只是想知道是否还有其他选择。例如,如果我可以在任何子?