VBA控制参考(表格)全局变量?

时间:2014-12-09 14:01:12

标签: forms vba ms-access access-vba global-variables

好的,我已经退出了几个版本的Access编程,但我可以发誓我曾经能够在窗体全局变量上指向控件。示例代码如下:

Option Compare Database
Option Explicit
Dim Testvar As String

Private Sub Form_Load()
Testvar = "Load"
End Sub

Private Sub Form_Open(Cancel As Integer)
Testvar = "open"
End Sub

Private Sub Text0_Click()
Testvar = "settest"
End Sub

我应该能够在控件上放置一个可以看到TestVar变量的文本框,但控件不能这样做。此外,我曾经能够使用表格的记录来源。

所以,问题 - 我疯了 - 这是不可能的? 或者我忘记了如何处理表格?

然后是最重要的问题 - 解决这个问题的最佳方法是什么? 最常用的方法是传入OpenArgs(在这种情况下为记录键),然后将其解析为全局变量,然后一些控件显示打开的args和/或查找要从键显示的值。 / p>

我真的不想构建重建和加载控件记录源的例程。希望有人知道更好的方法

4 个答案:

答案 0 :(得分:2)

您必须实际设置文本框的值。我不知道(据我所知)将文本框绑定到变量。

Option Compare Database
Option Explicit

Private Sub Form_Load()
    Text0.Value = "Load"
End Sub

Private Sub Form_Open(Cancel As Integer)
    Text0.Value = "open"
End Sub

Private Sub Text0_Click()
    Text0.Value = "settest"
End Sub

当然,您可以将值存储在变量中并使用它来设置值,但在这个简单的示例中这样做是没有意义的。

答案 1 :(得分:2)

TempVars集合是Access 2007中引入的一项功能。因此,如果您的Access版本为> = 2007,则可以使用TempVar来保存字符串值。然后,您可以使用TempVar作为文本框的控制源。

使用=[TempVars]![Testvar]作为 Text0 的控件来源,以下事件过程会执行您请求的操作。

Private Sub Form_Open(Cancel As Integer)
    TempVars.Add "Testvar", "Open"
End Sub

Private Sub Form_Load()
    TempVars("Testvar") = "Load"
End Sub

Private Sub Text0_Click()
    TempVars("Testvar") = "settest"
    Me.Text0.Requery
End Sub

注意:[TempVars]![Testvar]将在整个应用程序中用于剩余的会话。如果您的情况出现问题,可以在表单关闭时删除TempVar:TempVars.Remove "Testvar"

答案 2 :(得分:2)

除了现有的事件过程,您还可以在表单模块中添加一个函数,该函数将检索 Testvar 模块变量的值。

Function GetTestvar() As String
    GetTestvar = Testvar
End Function

然后使用=GetTestvar()作为 Text0 的控制源。

答案 3 :(得分:-1)

要求是:在应用程序的所有表单上显示应用程序用户的登录ID。

以下是我实施此方法的方法:

Create a module: module_init_globals
with the following code:

Option Compare Database

'Define global variables

Global GBL_LogonID as string

Option Explicit

Public Sub init_globals ()

   'Initialize the global variables

   'Get_Logon_Name is a function defined in another VBA module that determines the logon ID         of the user

    GBL_LogonID = Get_Logon_Name()

 End Sub


On the main/first form - we need to call the module that will initialize the global variables:

In the code for "on open" event I have:

Private Sub Form_Open (Cancel as Integer)
   call init_globals
End Sub




then on each of the forms in the app, I have a text control - txtUserID to display the  logon id of the user

and I can set it's value in the "on open" event of the form.

txtUserID.value = GBL_LogonID