我有一个表和表单设置来控制数据库中的另一个表单。 我想创建一个代码,从我的字段中获取标题,并将其作为变量添加到我的代码中,以更改其他表单的可见性选项。
我的表单设置了我要控制的表单上所有对象的所有名称。
LSE_FORM_ADMIN =包含所有LSE_FORM_ALL名称的表。 表格设置为3列键,名称和复选框,我将其放入表单中以制作连续列表。
这是我在表单上的代码,但我一直在和运行时424:对象所需的错误:
Private Sub Form_Current()
Dim VARSET As Object
Dim VAR As String
VARSET = DLookup("TITLE", Table!LSE_FORM_ADMIN, "") 'keep getting error here
VAR = VARSET
If Me!CB = "-1" Then
Form_LSE_FORM_ALL!VAR.Visible = True
Else
Form_LSE_FORM_ALL!VAR.Visible = False
End If
End Sub
有人可以帮我修复这段代码,以便它获取标题字段数据并将其作为一个变量添加到其余代码中吗?
答案 0 :(得分:0)
在从表单执行表记录集时,真的不确定如何执行语法,需要一些帮助。 这是我的代码并尝试记录集:
Private Sub Form_Current()
Dim DB As Database
Dim RS As Recordset
Dim RST As String
Set DB = CurrentDb
Set RS = DB.OpenRecordset("LSE_FORM_ADMIN")
Set RST = RS 'GETTING OBJECT REQUIRED ERROR ON "RST ="
Do Until RS.EOF
RST = Me!TITLE
RS.MoveNext
Loop
If Me!CB = "-1" Then
Form_LSE_FORM_ALL!RS.Visible = True
Else
Form_LSE_FORM_ALL!RS.Visible = False
End If
End Sub
答案 1 :(得分:0)
我想我知道你要做什么,但是你的描述/引用并不匹配。请查看以下评论并澄清: 1.你说“......制作一个代码,从我的字段中取出标题......”但你的代码是“Me.Title”,“ME”是对表格的引用 - 而不是字段。 2.您的代码位于“Form_Current”事件中,这意味着它将为您处理的每条记录触发。这将有效,但我认为你只想做一次代码以提高效率。 3.您没有处理多个字段的规定。我认为您需要循环遍历表中的所有字段,将可见设置为true或false。
以下是我的建议,但一旦澄清问题,我会更新。
Option Compare Database
Option Explicit
Dim DB As DAO.Database
Dim RS As DAO.Recordset
'Dim RST As Variant
'Dim RSTT As Variant
Public Sub FORM_CURRENT()
Set DB = CurrentDb
Set RS = DB.OpenRecordset("LSE_FORM_ADMIN")
Do While Not RS.EOF ' Loop thru all field names for the form
If RS!HideYN = True Then ' Desire to hide the field?
Me(RS!ctlname).Visible = False ' Yes, hide the field.
Else
Me(RS!ctlname).Visible = True ' No, show the field
End If
RS.MoveNext ' Get next field name
Loop
RS.Close
Set RS = Nothing
Set DB = Nothing
'Set RST = Me!Title
'RSTT = "Form_LSE_FORM_ALL" & "!" & (RST)
'If Me!CB = "-1" Then
' RSTT.Visible = True 'getting Run-time error '424': object required
'Else
' RSTT.Visible = False
'End If
End Sub
答案 2 :(得分:0)
很难确切地看到您要实现的目标,但是当您应该使用显式的Form或Control类型时,您的问题源于使用变量变量类型。使用你的上一个例子。
RSTT.Visible = True'获取运行时错误'424':需要对象
这是因为您已将RSTT声明为变体。这条线
RSTT = "Form_LSE_FORM_ALL" & "!" & (RST)
导致变量RSTT包含一个字符串,该字符串没有属性“.Visible”
Set DB = CurrentDb Set RS = DB.OpenRecordset("LSE_FORM_ADMIN")
这些行是多余的,因为您已经在表格字段上提供了所需的值,这些值已经绑定到表LSE_FORM_ADMIN。
据我所知,你有一个连续表格(ADMIN?)绑定到表LSE_FORM_Admin。当您单步浏览此表单上的记录时,您希望触发代码,该代码获取TITLE字段/控件的值并使用它来设置具有相同名称的控件,在单独的表单Form_LSE_FORM_ALL上为(in)可见,取决于ADMIN表单上复选框控件名称CB的值?
如果您希望ADMIN表单对ALL表单进行“实时”更改,则应考虑使用CB复选框控件的事件。使用表单的当前事件意味着您所做的更改将不会反映在ALL表单中,直到您退出刚刚编辑的记录,然后返回,以在该记录上触发表单的Current事件。
使用CB复选框的AfterUpdate事件的示例
Private Sub CB_AfterUpdate()
Dim strRST As String
Dim frmTarget as Form
Dim ctlRSTT As Control
Set strRST = Me!TITLE
Set frmTarget = Forms("Form_LSE_FORM_ALL")
Set ctlRSTT = frmTarget.Controls(strRST)
ctlRSTT.Visible = Me!CB 'getting Run-time error '424': object required
End Sub
答案 3 :(得分:0)
最终代码,感谢Cheesenbranston。
Private Sub Form_AfterUpdate()
Dim strRST As String
Dim frmTarget As Form
Dim ctlRSTT As Control
strRST = Me!TITLE
Set frmTarget = Forms("LSE_FORM_ALL")
Set ctlRSTT = frmTarget.Controls(strRST)
If Me!CB = "-1" Then
ctlRSTT.Visible = True
Else
ctlRSTT.Visible = False
End If
End Sub
@Cheesenbranston:您的原始代码更像是打开和关闭的切换,所以如果我的对象不可见,那么我的触发器复选框会在检查时使其可见,更符合我自己需要的生活质量,尽管如此工作。 strRST也不需要SET,因为它只是一个字符串。再次感谢= D非常快乐的一天!