2012-04-02 61 views
3

我创建了一个UserForm,用户需要填写三个字段。宏尝试在UserForm_Initialize()事件中自动检测这些字段的值,然后在三个字段中显示找到的值,但用户可以更改它们。但是,自动检测需要几秒钟的时间,并延迟了UserForm的外观。我希望UserForm在自动检测过程之前显示为空白,然后让自动检测过程自动填充这些字段。什么是最好的方法来做到这一点?使UserForm非模态使得宏运行时无需等待用户的输入,这是有问题的。我不想有一个“自动检测”按钮:这必须自动完成。UserForm绘制后自动执行一些代码

回答

9

使用Activate()事件,而不是Initialize() :)

Private Sub UserForm_Activate() 

End Sub 

随访

致谢!它的工作原理,但似乎有一个错误:对话框被绘制全白,直到宏完成。截图(对话应该是灰色的)

号这不是:)试试这一个错误。如下所示添加Doevents

Private Sub UserForm_Activate() 
    UserForm1.ProgressBar1.Value = 0 
    starttime = Timer 
    While Timer - starttime < 1 
     UserForm1.ProgressBar1.Value = (Timer - starttime) * 100 
     DoEvents 
    Wend 
End Sub 

HTH

希德

+0

谢谢!它的工作原理,但似乎有一个错误:对话框被绘制全白,直到宏完成。 [截图](http://i.imgur.com/DbN70.jpg)(对话框应该是灰色的)。 – Cutter 2012-04-02 13:41:16

+0

让我看看你正在使用的代码。 – 2012-04-02 13:42:01

+0

[Pastebin](http://pastebin.com/aEkKPbCN)(无法弄清如何在评论中发布代码)。这只是为了目前的测试。 – Cutter 2012-04-02 13:49:02

0

我建议使用计时器。输入字段禁用并清空后打开表单,并将计时器设置为在几百毫秒内触发。这应该允许表单立即显示。在定时器的滴答事件中进行自动检测(首先禁用定时器),然后启用字段并填写检测值。

0

有一种简单的方法来做到这一点...

1)在您的用户窗体创建一个新的“命令按钮”,将执行希望宏引起。

2)设置的高度和按钮的宽度为0

3)确保该按钮的“TabIndex的”参数为0 ...这将创建一个“隐形”命令按钮将接收只要表格打开,请重点关注。

4)在调用程序,立即命令在此之前,“显示”用户窗体输入线 - “Application.SendKeys‘〜’”

它是如何工作的...

命令按钮创建在(1)中是一个有效的控件,就像其他任何你无法看到它或用鼠标单击它的wxcept一样。 'SendKeys'命令复制一个存储在键盘缓冲区中的鼠标左键单击,直到表单显示它将被读取的时间。这与鼠标点击具有完全相同的效果,并将运行所需的宏。顺便说一下,如果您从多个位置调用宏,并希望根据调用来源采取不同的操作,则可以添加多个“不可见”按钮,然后在“添加”按钮之前添加“{制表符}” “〜”字符通过可用控件标记焦点。例如'Application.SendKeys“{Tab}〜”'将激活按钮,并将'TabIndex'参数设置为1.'Application.SendKeys“{Tab} {Tab} {Tab} {Tab}〜''将激活按钮'TabIndex'参数设置为4等。

RF