我有一个用户表单,个人可以在其中添加有关填充项目计划表的任务的详细信息。如果有人正在创建一个新任务,则所有控件都会初始化为空值。然而,我希望为他们创建修改现有任务的功能,并沿着填充相同的用户表单的控件与初始化时最初提交的输入进行匹配,这样它们就可以只调整所需的内容,而不必完全填写。
我认为有几种方法可以实现这一点,或者通过某种方式将变量从EDITTASK模块传递到用户窗体,或者通过CREATETASK和EDITTASK模块本身初始化用户窗体,然后从那里填充控件的值,如下所示
Sub Show_Insert_Task_Form()
INSERT_TASK_FORM.Show
INSERT_TASK_FORM.TASK_TBOX.value = "VALUE"
End Sub
这段代码可以运行,但不幸的是它没有填充文本框。
解决这个问题的最佳方法是什么?
1条答案
按热度按时间egdjgwm81#
您的
Show_Insert_Task_Form
实际上填充了文本框。根据您描述的行为,我可以推断出窗体的
ShowModal
属性(在属性窗口中)为True
。在这种情况下,VBA会暂停执行,直到您关闭窗口。换句话说,您的代码执行的操作是:1.在模式模式下显示窗体。
文本框尚未填充,并且由于表单是模态的,因此执行暂停。
1.当您关闭表单时,执行将继续,文本框将被填充(太晚了,您看不到)。
溶液:
在**调用
Show
之前,**必须填充表单。这样做意味着代码将在填充表单后暂停。
关于将窗体设为非模态:
以下2项更改可停止暂停执行:
1.在属性窗口中将
ShowModal
属性更改为False
。1.打电话给
INSERT_TASK_FORM.Show False
。这两种替代方案显然都是解决问题的有效方案(如果不暂停执行,表单在屏幕上显示时会被填充)。但是,它们也会使错误易于再次出现(例如:如果有一天你改变主意,把形式改回模态)。
好消息是:解决方案以及这些替代方案并不相互排斥。2我建议您实现解决方案以及替代方案1、替代方案2,或者两者都不实现,或者两个都实现。