具有modal = false的Excel VBA用户表格呈现缓慢

时间:2012-09-24 19:06:02

标签: excel-vba vba excel

有关如何避免渲染此表单的长时间延迟的任何建议吗?

我的用户表单标签上写着“请稍候,下载”,没有其他控件。当用户请求数据下载(异步API请求)时,我关闭键盘输入,并显示“请稍候”表单。处理数据的回调重新启用键盘输入并隐藏表单。奇迹般有效。

之外,它最初会弹出一个空白的白色矩形,然后需要几秒钟(最多5个)来绘制。我的其他用户形式(模态,用于数据输入)立即被绘制我甚至从未注意到它们开始是白色的。

以下是我在发出异步数据请求之前显示表单的方法:

' Deactivate the keyboard.
Application.OnKey "^d", "KeyboardOn"
Application.DataEntryMode = True

' Display the splash form non-modally.
ssiWaitDialog.TaskDone = False
ssiWaitDialog.Show False

以下是它在回调中的删除方式:

' Close the splash form.
ssiWaitDialog.TaskDone = True
ssiWaitDialog.Hide

' Re-activate the keyboard.
Application.DataEntryMode = False

这是表单代码:

' Set true when the long task is done.
Public TaskDone As Boolean

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Cancel = Not TaskDone
End Sub

问题表单的属性值仅与我的其他表单modal = false显着不同,我将光标设置为沙漏。不太重要的区别是高度/宽度和标签字体大小。

1 个答案:

答案 0 :(得分:2)

在show方法调用之后添加'DoEvents'修复了问题。以下是show form代码现在的读取方式:

' Deactivate the keyboard.
Application.OnKey "^d", "KeyboardOn"
Application.DataEntryMode = True

' Display the splash form non-modally.
ssiWaitDialog.TaskDone = False
ssiWaitDialog.Show False
DoEvents