如何让我的表单保存对标签的更改?

Posted

技术标签:

【中文标题】如何让我的表单保存对标签的更改?【英文标题】:How do I get my form to save changes to labels? 【发布时间】:2015-07-06 07:48:12 【问题描述】:

我在 Microsoft Access 2010 中有一个带有标签的表单,这些标签在运行某些进程和查询时通过 VBA 进行更新。

表单上的两个不同按钮启动两个独立的 VBA 进程。在每个过程之后,都会更改一个标签。

第一个标签在第一个过程(导入)之后更改为基于文件名的日期。 第二个标签在应用导入更改后更改为第一个标签的日期。

然后我可以使用

Me.Repaint

以确保更新表单标签。这工作正常。我可以看到我的标签发生了变化。

但是,如果我随后关闭表单并重新打开它(手动或以编程方式),对我的标签所做的更改将丢失。我决定尝试暴力破解它:

DoCmd.Close acForm, "aForm", acSaveYes
DoCmd.OpenForm "aForm"

但这会产生相同的结果——没有更改标签。

【问题讨论】:

如果要对标签进行永久性更改,必须在设计视图中对表单进行操作,然后保存修改后的表单设计。 所以我从 VBA 更改为设计视图? DoCmd.OpenForm "aForm", acDesign 我正忙于其他事情。请自己写出来,这样我就可以投票给你。 :-) 请注意,当您将应用程序作为 ACCDE 分发时,这将不起作用,因为编译前端时您无法在设计模式下打开表单。表格驱动标签是一种方法。 【参考方案1】:

为了保存表单更改,表单需要在设计视图中。您可以通过 VBA 使用 DoCmd.OpenFormView 参数更改为 Design View

如果您想保存所有这些更改并在表单处于设计视图时对用户隐藏:

DoCmd.OpenForm "aForm", acDesign, , , , acHidden
DoCmd.Close acForm, "aForm", acSaveYes
DoCmd.OpenForm "aForm"

以上以及更多打开表单的可能性可以在here找到!

(感谢@HansUp 的帮助!)

【讨论】:

虽然这个解决方案可以工作,但实际上不应该在应用程序运行时进行设计更改。考虑使用文本框控件而不是标签,您可以在其中通过 VBA 或宏传递文件名和日期等数据。文本框可以格式化为与标签完全相同,因此用户永远不会知道其中的区别! @Parfait Tu es parfait;谢谢。如果我将它作为 AACDE 分发,这也可以吗? 是的。文本框是标准的表单控件。 @Parfait,当我重新打开表单时,文本框是否可以保存最后一个值?这就是标签的好处。 然后将文本框绑定到表格或在表单的 OnOpen 事件中执行 DLookUp/VBA 记录集引用。【参考方案2】:

解决方法:在表单打开时运行调整标签的代码:

Automatically execute some code after the UserForm is drawn

我用过:

Private Sub UserForm_Activate()' I placed at the top of the form's code area
    Set obj_controls = Me.Controls
    Call arrange_controls_in_UserForm(obj_controls)
    Me.Repaint
End Sub

不包括从上述子程序调用的例程。 OP 似乎有代码可以完成对标签的期望更改。

我的附加代码在 Excel VBA 项目的一个模块中,尽管它也可以在表单的代码区域内构建。

我的代码基于此处找到的示例: https://www.excel-easy.com/vba/examples/controls-collection.html

Private Sub CommandButton1_Click()

    Dim i As Integer

    For i = 1 To 10
        Controls("TextBox" & i).Value = Cells(i + 1, 1).Value
    Next i

End Sub

但我使用类似于以下的行:

   obj_controls("Label" & i).Left = xleft(i)
   obj_controls("Label" & i).Wide = wide(i)

当表单关闭时,对表单外观的编程更改会丢失,但在使用表单时它们是活动的。

对表单的编程更改允许调整表单的设计,而无需大量点击和拖动鼠标等。

DoCmd.OpenForm 似乎适用于 Access。我无法让它在 Excel 的 VBA 中工作。

【讨论】:

以上是关于如何让我的表单保存对标签的更改?的主要内容,如果未能解决你的问题,请参考以下文章

如何让我的 SQLite 数据库被保存并从不同的设备访问

保存对表单控件所做的更改? [复制]

如何在离开页面之前警告用户未保存的表单更改? - 角度 6

如何从另一个视图控制器更改标签的文本并使用核心数据保存

保存对通过下拉列表打开的文件的更改

如何在 Python 中使用 BeautifulSoup 保存对 HTML 文件所做的更改?