我有一个VBA表单,当我点击它时,执行一些长时间的计算(几秒到几秒长),然后在表单中的帧上显示结果。但是,每隔一段时间,表单就会隐藏在我身上,我需要点击VBA编辑器并返回到工作表再次显示
我有
Me.Repaint
在表格上的计算结束时 但它仍然没有帮助
我也试过禁用主表的“EnableCalculation”属性,但仍然没有用
有人碰到这样的事吗?我是否需要以某种特殊方式加载表单?
答案 0 :(得分:3)
我遇到了同样的问题。通过单击无模式Userform上的命令按钮保存Excel工作簿时,表单将在代码完成时消失。
我读到这个问题是由于Microsoft已经进行了一些相互兼容的更改,并找到了一些非常复杂的解决方案,涉及许多我无法集成到项目中的复杂代码。但是,我确实找到了一个非常快速的解决方法。
在我的情况下,当代码执行命令按钮代码的End Sub
命令时,Userform只会消失。我只是在它之前添加了一个Exit Sub
,而Userform不再消失。
答案 1 :(得分:1)
您是否尝试过关闭屏幕更新,以便Excel不会在每次更改时重新绘制屏幕。
sub doSomthing()
Application.ScreenUpdating = False
'do something
Application.ScreenUpdating = True
end sub
答案 2 :(得分:1)
表格消失了,因为微软已经改变了表格所拥有的模式。过程(在您的情况下为Excel)。我有同样的问题,也无法克服它。
请紧紧抓住,直到微软决定通过改变已经发挥作用的东西来修复另一个引入和未经测试的问题是值得的。
答案 3 :(得分:0)
尝试使用以下两行代码而不是重新绘制。
Me.Show
和/或:
Me.SetFocus
希望其中一个适合你!
答案 4 :(得分:0)
在我的情况下,我不得不使用所有这些来实现它。 (frmGUI是我的表格)
的DoEvents
frmGUI.Repaint
frmGUI.Show
答案 5 :(得分:0)
使用Office 2013和Windows 7,只需在DoEvents
(表单消失之处)结束前添加sub
,即可打开表单。没有其他需要......对于我的情况。
答案 6 :(得分:0)
问题是Excel 2013引入的SDI(单个文档接口)的副作用。在某些情况下,调用DoEvents,ScreenUpdating等的各种建议可能会有所帮助,但不能解决问题。 / p>
此处发布了完整的解决方案:Keeping Userforms on top of SDI windows in Excel 2013 and up
如果这太适合您的需要,一种快速而又肮脏的解决方案是最小化并还原活动窗口,这将使用户窗体重新回到堆栈顶部。
'Do long-winded process first, then:
Application.ScreenUpdating = False
ActiveWindow.WindowState = xlMinimized
ActiveWindow.WindowState = xlNormal
Application.ScreenUpdating = True
这不会阻止表单消失,但是会使其重新出现在过程的结尾。