我试图在对话框模式下打开一个窗体,然后使用模块中的DoCmd.MoveSize
将其调整为所需大小。理想情况下,我希望这一切都能从上述模块运行。
当前表单已打开,但未调整大小。我猜这可能是因为在运行命令时表单尚未处于活动状态,或者是因为OpenForm
命令中的acDialog
阻止了它的执行。我认为我可以将MoveSize
命令插入表单的OnlOad
事件中,但我更希望在模块中拥有同样多的功能。有办法解决这个问题吗?比如,可能有某种方法可以等待窗体处于活动状态,或者有某种方法将命令从模块本身插入OnLoad
事件?正如你所知,我对vba还不太熟悉。这是我正在做的一个小项目的一部分。感谢您的帮助。
一些示例代码如下:
这个不调整窗体大小:
Option Compare Database
Option Explicit
Public Function OpenFormDialog()
DoCmd.OpenForm "MsgBoxForm", acNormal, , , acFormAdd, acDialog
DoCmd.MoveSize , , , 9500
End Function
由于找不到表单,此操作引发错误:
Option Compare Database
Option Explicit
Public Function OpenFormDialog()
DoCmd.OpenForm "MsgBoxForm", acNormal, , , acFormAdd, acDialog
Forms.("MsgBoxForm").DoCmd.MoveSize , , , 9500
End Function
您可以在正常模式下打开表单,调整大小并使其成为模态。只需确保表单上的Modal属性为No.
With DoCmd
.OpenForm "MsgBoxForm", acNormal, , , acFormAdd, acNormal
.MoveSize , , , 9500
End With
Forms.MsgBoxForm.Modal = True
请记住,最后一条(模态(语句下面的任何代码仍将执行。如果您需要停止代码执行,那么您唯一的选择就是直接在Load()
事件中调整大小。
就我个人而言,我认为Load()
解决方案更好,您可以通过OpenArgs
参数传递各种大小。
您应该在MsgBoxForm表单的form_open事件中使用docmd.movesize。
此外,通过执行docmd.openform,程序的控制流将转移到打开的表单,并且在关闭打开的表单之前,docmd.oopenform之后的语句将不会执行。
这就是MsgBoxForm不在docmd.openform.之后的表单集合中的原因