如何让我的表单保存对标签的更改?
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.OpenForm
的 View 参数更改为 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 中工作。
【讨论】:
以上是关于如何让我的表单保存对标签的更改?的主要内容,如果未能解决你的问题,请参考以下文章