如何获取表单以保存对标签的更改?

时间:2015-04-27 18:00:51

标签: vba ms-access access-vba ms-access-2010

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

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

  • 在第一个进程(导入)之后,第一个标签将更改为基于文件名的日期。
  • 第二个标签更改为应用导入更改后第一个标签的日期。
然后我可以使用

Me.Repaint

确保更新表单标签。这很好用。我可以看到我的标签发生了变化。

但是,如果我关闭表单并重新打开它(手动或以编程方式),则对标签的更改将丢失。我决定尝试强制它:

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

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

2 个答案:

答案 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中使用它。