我在Microsoft Access 2010中有一个表单,其中包含在运行某些进程和查询时通过VBA更新的标签。
表单上的两个不同按钮启动两个单独的VBA进程。在每个过程之后,标签被更改。
Me.Repaint
确保更新表单标签。这很好用。我可以看到我的标签发生了变化。
但是,如果我关闭表单并重新打开它(手动或以编程方式),则对标签的更改将丢失。我决定尝试强制它:
DoCmd.Close acForm, "aForm", acSaveYes
DoCmd.OpenForm "aForm"
但这会产生相同的结果 - 没有更改标签。
答案 0 :(得分:1)
为了保存表单更改,表单需要位于设计视图中。您可以使用DoCmd.OpenForm
的查看参数,使用VBA更改为设计视图。
如果您要保存所有这些更改并在用户的设计视图中隐藏表单:
DoCmd.OpenForm "aForm", acDesign, , , , acHidden
DoCmd.Close acForm, "aForm", acSaveYes
DoCmd.OpenForm "aForm"
可以找到以上和更多可能的打开表单here!
(@HansUp的所有功劳都是为了帮助!)
答案 1 :(得分:0)
解决方法:在表单打开时运行调整标签的代码:
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中使用它。