形式上的程序化更改将无法保存

时间:2014-02-26 17:21:15

标签: access-vba

有没有人知道什么可以阻止这些命令中的任何一个实际保存表单?是否有一个我错过的设置可以使表单“只读”?我在加载时切换表单上的control.enabled属性,但是一旦我关闭表单,我就看不到它了。

DoCmd.Close acForm, Me.Name, acSaveYes
DoCmd.Save acForm, Me.Name

编辑: 一些伪代码来澄清。 此函数在表单加载时运行以启用/禁用某些控件,并按预期工作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属性。

3 个答案:

答案 0 :(得分:2)

我无法找到任何文档,但似乎无法保存在普通模式下进行的设计更改。我最终声明了一个全局集合类型变量。我将连接的字符串存储在约定“Form.Name& Control.Name”的集合变量中。如果表单从未打开过,我会对应该启用哪些控件进行长时间检查,并将它们存储在此集合全局中。如果表单至少打开过一次,我会查看表单上的控件,查看它们是否在我的“授权”控件的全局集合中。感觉真的很乱,但效果还不错。

答案 1 :(得分:0)

您的代码(关闭,然后保存)在我的测试中失败,因为执行关闭后Me.Name为空。虽然我不知道你可能有什么其他代码,但是当我切换订单时,我能够关闭表单。

我建议您将代码放在'Open'事件中,如下所示:

Private Sub Form_Open(Cancel As Integer)
    DoCmd.Save acForm, Me.Name
    DoCmd.Close acForm, Me.Name, acSaveYes
End Sub

答案 2 :(得分:0)

是否要在某个条件下更改已启用的属性?如果您只是需要该控件被禁用,如果记录...那么您将要移动启用表单的当前事件,该事件在每个记录导航时触发。加载和打开太早,不会在导航时重复。

Private Sub Form_Current()
  If Me!X = True Then
    Me.Controls("somecontrol").Enabled = False
  Else
    Me.Controls("somecontrol").Enabled = True
  End If
End Sub