首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在绘制UserForm后自动执行一些代码

在绘制UserForm后自动执行一些代码
EN

Stack Overflow用户
提问于 2012-04-02 20:44:08
回答 3查看 49.2K关注 0票数 6

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-02 20:49:31

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

代码语言:javascript
复制
Private Sub UserForm_Activate()

End Sub

后续

,谢谢!它可以工作,但似乎有一个错误:对话框被绘制为白色,直到宏完成。屏幕截图(对话框应为灰色)

不是的。这不是一个bug :)试试这个。如下所示添加Doevents

代码语言:javascript
复制
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

侧边

票数 13
EN

Stack Overflow用户

发布于 2012-04-02 20:48:57

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

票数 0
EN

Stack Overflow用户

发布于 2014-12-01 23:49:50

有一个更简单的方法可以做到这一点。

1)在你的用户表单上创建一个新的'CommandButton‘,它将执行你想要触发的宏。

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

3)确保按钮的'TabIndex‘参数为0...这将创建一个“看不见的”CommandButton,它将在窗体打开时立即接收焦点。

4)在调用例程中,紧接在“显示”用户表单的命令之前,输入行- 'Application.SendKeys "~"‘

它是如何工作的..。

在(1)中创建的命令按钮是一个有效的控件,就像任何其他wxcept一样,但您不能看到它或使用鼠标按钮单击它。'SendKeys‘命令复制鼠标左键单击,该鼠标左键被存储在键盘缓冲区中,直到窗体显示出来,它将被读取。这与鼠标单击具有完全相同的效果,并将运行所需的宏。

顺便说一句,如果您从多个位置调用宏,并且希望具有依赖于调用源的不同操作,则可以添加多个“不可见”按钮,并在"~“字符前添加"{ tab }”,以通过可用控件来切换焦点。例如:'Application.SendKeys "{Tab}~"‘将激活'TabIndex’参数设置为1的按钮。'Application.SendKeys“{Tab}{Tab}~”‘将激活'TabIndex’参数设置为4的按钮,依此类推。

射频

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9976680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档