关闭 Access 时阻止 'save design changes' 打开表单
Prevent 'save design changes' for an open form when closing Access
我在 Access 2010 应用程序中有一个拆分表单作为我的主界面。与往常一样,用户可以调整数据表部分的大小、重新排序列等。
但是,我不希望他们在离开表单时保存此类更改。每次打开表单时,都应加载默认格式。
除了一种关闭方法外,我已经掌握了所有方法。为了避免它们使用默认的关闭按钮关闭,我设置了 Border Style = None。相反,我有一个使用 DoCmd.CLOSE acForm, "Main_form", acSaveNo
的关闭表单按钮
但是,如果用户单击 Access 应用程序的关闭按钮,它会像往常一样弹出“是否要保存对表单设计的更改”对话框。
我研究过禁用应用程序的关闭按钮,但是乱用 Windows API 超出了我的能力范围(并且应该有一种方法可以在不采取极端措施的情况下实现这一点)。
由于 API 也超出了我的技能范围,这里有一个左外野的解决方法。
复制 Main_Form
并重命名 "Main_Form_Template"。创建 Autoexec 模块或编辑现有模块并添加:
DoCmd.DeleteObject acForm, "Main_Form"
DoCmd.CopyObject , "Main_Form", acForm, "Main_Form_Template"
这应该会在用户每次打开数据库时恢复标准模板,即使他们要在关闭 Access 时保存表单也是如此。
关闭表单上的关闭按钮。
在表单的 属性 sheet 格式选项卡上,大约向下 2/3。设置关闭按钮 = 否
这会强制用户通过您创建的按钮将其关闭。
我找到了一种方法来做到这一点。数据库选项、表单格式选项和 vba 的组合可以做到。
转到主 Access 中的 'Current Database' 选项屏幕
选项并取消选中 'Enable design changes in Datasheet view'。这将防止 all 数据库中的数据表视图设计更改,因此您必须进入设计模式才能进行任何 table 更改。用户仍然可以对表单中的列重新排序和调整大小,但 Access 不再认为这是有效的设计更改,并且无论您如何关闭表单都不会提示保存它
设置表单格式属性 'Save Splitter Bar Position' = 否。表单现在将在表单关闭时清除对栏位置的任何更改。但是,对于此设置,Access 对我来说真的很奇怪。一旦我 ever 将选项设置为否,我就不能再使用设计视图或布局视图来设置新的默认栏位置;它总是恢复到我第一次尝试此设置时的位置。即使将选项重置为“是”、保存设计更改并完全退出数据库也无法解决此问题。
所以我添加了一个 On Load 事件以在表单打开时重置拆分表单大小:Me.SplitFormSize = 9000
。涉及的人数多得惊人;在表单属性列表中,这是以英寸为单位设置的。我的是 6.5",这显然是 9000。
有了这三个更改(连同我在问题中详述的步骤),Access 不再提示在关闭表单时保存设计更改,即使用户正在完全关闭 Access 应用程序也是如此。表单还会将拆分表单栏捕捉到它应该加载的位置。
我在 Access 2010 应用程序中有一个拆分表单作为我的主界面。与往常一样,用户可以调整数据表部分的大小、重新排序列等。
但是,我不希望他们在离开表单时保存此类更改。每次打开表单时,都应加载默认格式。
除了一种关闭方法外,我已经掌握了所有方法。为了避免它们使用默认的关闭按钮关闭,我设置了 Border Style = None。相反,我有一个使用 DoCmd.CLOSE acForm, "Main_form", acSaveNo
但是,如果用户单击 Access 应用程序的关闭按钮,它会像往常一样弹出“是否要保存对表单设计的更改”对话框。
我研究过禁用应用程序的关闭按钮,但是乱用 Windows API 超出了我的能力范围(并且应该有一种方法可以在不采取极端措施的情况下实现这一点)。
由于 API 也超出了我的技能范围,这里有一个左外野的解决方法。
复制 Main_Form
并重命名 "Main_Form_Template"。创建 Autoexec 模块或编辑现有模块并添加:
DoCmd.DeleteObject acForm, "Main_Form"
DoCmd.CopyObject , "Main_Form", acForm, "Main_Form_Template"
这应该会在用户每次打开数据库时恢复标准模板,即使他们要在关闭 Access 时保存表单也是如此。
关闭表单上的关闭按钮。
在表单的 属性 sheet 格式选项卡上,大约向下 2/3。设置关闭按钮 = 否
这会强制用户通过您创建的按钮将其关闭。
我找到了一种方法来做到这一点。数据库选项、表单格式选项和 vba 的组合可以做到。
转到主 Access 中的 'Current Database' 选项屏幕 选项并取消选中 'Enable design changes in Datasheet view'。这将防止 all 数据库中的数据表视图设计更改,因此您必须进入设计模式才能进行任何 table 更改。用户仍然可以对表单中的列重新排序和调整大小,但 Access 不再认为这是有效的设计更改,并且无论您如何关闭表单都不会提示保存它
设置表单格式属性 'Save Splitter Bar Position' = 否。表单现在将在表单关闭时清除对栏位置的任何更改。但是,对于此设置,Access 对我来说真的很奇怪。一旦我 ever 将选项设置为否,我就不能再使用设计视图或布局视图来设置新的默认栏位置;它总是恢复到我第一次尝试此设置时的位置。即使将选项重置为“是”、保存设计更改并完全退出数据库也无法解决此问题。
所以我添加了一个 On Load 事件以在表单打开时重置拆分表单大小:
Me.SplitFormSize = 9000
。涉及的人数多得惊人;在表单属性列表中,这是以英寸为单位设置的。我的是 6.5",这显然是 9000。
有了这三个更改(连同我在问题中详述的步骤),Access 不再提示在关闭表单时保存设计更改,即使用户正在完全关闭 Access 应用程序也是如此。表单还会将拆分表单栏捕捉到它应该加载的位置。