好的,我已经退出了几个版本的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>
我真的不想构建重建和加载控件记录源的例程。希望有人知道更好的方法
答案 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