题
是否有人知道什么可以防止这些命令实际保存表单?有一个我遗漏的设置可以使表格“只读”?我正在加载窗体上切换控制。一旦我关闭表格,我就无法看到它棒。
DoCmd.Close acForm, Me.Name, acSaveYes
DoCmd.Save acForm, Me.Name
.
编辑: 一些psiedo代码澄清。 此函数在表单负载上运行,以启用/禁用某些控件,按预期工作100%。
Private Sub Form_Load()
If IsNull(TempVars.Item(Me.Name)) Then
TempVars.Add Me.Name,1
If somecondition = true then
Me.Controls.Item("somecontrol").enabled = True
Else
Me.Controls.Item("somecontrol").enabled = False
End If
End If
End Sub
.
此单击事件关闭表单并打开其他表单。问题是,Control.Enabled设置我在表单负载上设置的设置不保存。
Private Sub button_OnClick()
DoCmd.OpenForm "someotherform", acnormal
DoCmd.Close acForm, Me.Name, acSaveYes
End Sub
.
下次我打开第一个表单,将无法设置控件属性,我需要再次设置conrol.enabled属性。
解决方案
我无法找到任何文档,但它似乎无法保存在正常模式下进行的设计更改。我最终声明了一个全局集合类型变量。i在“form.name&control.name”的此集合变量中存储了串联字符串。如果表单从未打开过,则我运行了应启用哪些控件的长期检查,并在此集合全局中存储它们。如果表单至少打开一次,我将循环通过表单检查的控件,以查看它们是否在我的全球“授权”控件中的集合中。感觉真的很黑暗,但它的运作良好。
其他提示
您所拥有的代码(关闭,然后保存)在我的测试上失败,因为me.name在执行关闭后为空。虽然我不知道你可能拥有什么其他代码,但我能够在切换订单后让表单关闭。
我建议您将代码放在“打开”赛事中如下:
Private Sub Form_Open(Cancel As Integer)
DoCmd.Save acForm, Me.Name
DoCmd.Close acForm, Me.Name, acSaveYes
End Sub
. 您是否要在条件下更改已启用的属性?如果您只需要控制禁用,如果记录......那么,您将想要移动启用表单的当前事件,在每个记录导航时都会触发。负载和打开太早,不要在导航时重复。
Private Sub Form_Current()
If Me!X = True Then
Me.Controls("somecontrol").Enabled = False
Else
Me.Controls("somecontrol").Enabled = True
End If
End Sub
. 不隶属于 StackOverflow