我从来没有使用过英语访问版本,所以如果我解释得很糟糕,请原谅我。我正在开发一个旧的access vba应用程序。它有一个名为Form_GUI的主表单。Form_GUI有多个选项卡,每个选项卡都有自己的“主表单”和几个不同的子表单。这些构建了FrontEnd。它们都与来自不同数据库的各种BackEnd表相连接。
当我想在另一个表单(如p_FrmZuordnung )中对Form1或Form2做一些更改时,如何全局地声明变量Form3,并以一种可以引用它的方式来声明变量
根据这个变量的值,我希望子表单的反应是不同的。
下面是我想用p_FrmZuordnung做的事情的例子。
我试过的事情:
我尝试将其声明为字符串,并简单地将其添加到代码中。
Public p_FrmZuordnung As String 我试着把它当成这样的形式:
Public p_FrmZuordnung As Form然后像这样设置它:
Set p_FrmZuordnung = Forms!Form1 在另一种形式(如Form3 )中像这样使用它
p_FrmZuordnung!somecontrolelement.requery 我为标识主表单中的页面而编写的代码工作正常。我为将变量引用到表单而编写的代码没有。
Option Compare Database
Option Explicit
Public p_FrmZuordnung As Form
Public Sub p_ErmittleFrmZuordnung()
p_FrmZuordnung = "keine Zuordnung"
Select Case Form_Form_GUI.RegisterStr1.Pages(Form_Form_GUI.RegisterStr1.Value).Name
Case "pgeVerbMassnahmen"
Set p_FrmZuordnung = Forms("Form1")
Case "pgeKVPMassnahmen"
Set p_FrmZuordnung = Forms("Form2")
End Select
End Sub我的目标是在其他子表单中使用p_frmZuordnung,比如在Form3中。
Private Sub btnCancel_Click()
Me.Undo
DoCmd.Close acForm, "Form3", acSaveYes
p_FrmZuordung.somecontrolelement.Requery
Exit Sub
End SubPrivate Sub btnSaveAndClose_Click()
Me.txt_Kontrolle.Value = 1
If Me.Form.Dirty And Me.txt_Text.Locked = False Then
p_FrmZuordnung.txtHilfstextFokus.SetFocus
p_FrmZuordnung.Form.Dirty = True
Debug.Print p_FrmZuordnung.Form.Dirty
Me.Form.Dirty = False
End If
Me.txt_Kontrolle.Value = 0
DoCmd.Close acForm, "Form3", acSaveNo
Exit Sub
End Sub发布于 2019-01-17 18:30:41
全局变量必须在模块中定义,而不是在表单中定义。您在哪个模块中定义它并不重要。声明全局变量后,它是静态的,可以从任何形式访问。
使用窗体上的控件时出现问题的原因是,我们是因为z_FrmZuordnung只是一个泛型表单,编译器不能按名称解析控件。您需要从Controls集合中获取控件。
Set z_FrmZuordnung = Forms!Form1
MsgBox z_FrmZuordnung.Name
'MsgBox z_FrmZuordnung.txtHilfstextFocus.Name '<--gives an error
MsgBox z_FrmZuordnung.Controls("txtHilfstextFokus").Name '<--This works
z_FrmZuordnung.Controls("txtHilfstextFokus").SetFocus发布于 2019-01-24 10:55:26
正如您现在告诉我们的,表单Form1和Form2在寄存器控制页的子表单控件中。
所以您不能通过Forms("Form2")引用它们,因为它们不是“独立的”形式。
相反,您必须知道每个子窗体控件的名称,该控件包含这样一个子窗体。因此,存储在每个控件中的表单的名称并不重要。
因此,我的建议是,将这些子窗体控件命名为与包含页面的名称相同的子窗体控件,但添加一个静态后缀,如SubFormControl (或您喜欢的任何其他后缀)。
因此,例如,页面pgeVerbMassnahmen上的子窗体控件应该命名为pgeVerbMassnahmenSubFormControl。
然后,可以通过页面名称和静态后缀引用子窗体控件。
所以我想这就是你需要的:
在Form_GUI中声明一个表单变量(只要您只是从Form_GUI内部的代码中引用该变量,它就可以是私有的):
Private p_FrmZuordnung As Form我希望p_ErmittleFrmZuordnung也位于表单Form_GUI中,所以您可以使用Me引用Form_GUI
Private Sub p_ErmittleFrmZuordnung()
Const SUFFIX As String = "SubFormControl"
Dim currentPagename As String
currentPagename = Me("RegisterStr1").Pages(Me("RegisterStr1").Value).Name
Select Case currentPagename
Case "pgeVerbMassnahmen"
Set p_FrmZuordnung = Me(currentPagename & SUFFIX).Form
Case "pgeKVPMassnahmen"
Set p_FrmZuordnung = Me(currentPagename & SUFFIX).Form
Case Else
p_FrmZuordnung = Nothing
End Select
End Sub编辑:
如果所有页都包含子窗体控件,则可以缩短它:
Private Sub p_ErmittleFrmZuordnung()
Const SUFFIX As String = "SubFormControl"
Set p_FrmZuordnung = Me(Me("RegisterStr1").Pages(Me("RegisterStr1").Value).Name & SUFFIX).Form
End Subhttps://stackoverflow.com/questions/54241749
复制相似问题