全局声明“类型”对象

时间:2015-01-25 03:25:44

标签: vba object global-variables

我想在表单模块之间传递对象。

我已经建立了一个简单的数据库来解释我遇到的问题。 我有两种形式 - > form1,form2和一个模块 - >模块1 基于我读过的线程,我相信如果我想定义一个全局对象,它应该在模块中完成,所以我把声明放在那里;

Option Compare Database

Public Type Name
    First As String
    Last As String
    Phone As String
End Type

在form1上我有一个cmd按钮,后面有以下代码;

Option Compare Database

Dim My_Name As Name

Private Sub cmd_Button_Click()
My_Name.First = "MyFirstName"
My_Name.Last = "MyLastName"
MsgBox ("In Form1 " & My_Name.Last)

DoCmd.OpenForm "Form2"
End Sub

在我的第二张表格上;

Option Compare Database
Dim my_Name As Name
Private Sub Form_Load()
MsgBox (my_Name.First)
End Sub

在第一种形式中,我看到my_Name对象变量很好,当我将控制传递给第二种形式时,我丢失了变量。

我在对象变量和子对象上尝试过各种各样的Public,Static声明变体,但我无法弄清楚如何跨模块保留对象。

1 个答案:

答案 0 :(得分:0)

您正在重新声明my_name。所以它影响了两个不同的东西。像乔治福尔曼和乔治福曼。

我很抱歉,自从我不得不处理此问题以来,我可以提供更多帮助。但是,似乎你的' froms'实际上是在一个'模块中宣布的。比如block -name from1。从全局范围开始,您可以在form1中引用变量。

在本例中为form1.my_name。但是,如果form1.my_name尚未实例化,则可能会导致问题。

我的建议是找到具有全局范围的模块(我不记得究竟是什么,如果你必须创建它或现在,以及什么时候它生命)。在其中声明并初始化您的变量。然后从您的事件处理程序中访问那些(" cmd_Button_Click"例如。)