我有一个 VBA 表单,当我单击它时,会执行一些长时间的计算(几秒钟到几秒钟),然后在表单的框架上显示结果。但是,每隔一段时间,表单就会隐藏在我身上,我需要单击 VBA 编辑器并返回工作表以使其再次显示
我有
Me.Repaint
在表格上的计算结束时,但它仍然无济于事
我还尝试禁用主工作表的“EnableCalculation”属性,但仍然没有用
有人遇到过这样的事情吗?我需要以某种特殊方式加载表单吗?
我有一个 VBA 表单,当我单击它时,会执行一些长时间的计算(几秒钟到几秒钟),然后在表单的框架上显示结果。但是,每隔一段时间,表单就会隐藏在我身上,我需要单击 VBA 编辑器并返回工作表以使其再次显示
我有
Me.Repaint
在表格上的计算结束时,但它仍然无济于事
我还尝试禁用主工作表的“EnableCalculation”属性,但仍然没有用
有人遇到过这样的事情吗?我需要以某种特殊方式加载表单吗?
我曾经也有过一样的问题。通过单击无模式用户窗体上的命令按钮保存 Excel 工作簿时,该窗体会随着代码完成而消失。
我读到这个问题是由于微软所做的一些相互兼容的更改,并找到了一些非常复杂的解决方案,其中涉及很多我无法集成到我的项目中的复杂代码。但是,我确实找到了一个非常快速的解决方法。
End Sub
在我的情况下,用户窗体仅在代码执行命令按钮代码的命令时才消失。我只是Exit Sub
在它之前添加了一个,用户窗体不再消失。
您是否尝试过关闭和打开屏幕更新,以便 Excel 不会在每次更改时重新绘制屏幕。
sub doSomthing()
Application.ScreenUpdating = False
'do something
Application.ScreenUpdating = True
end sub
该表单消失了,因为 Microsoft 更改了表单由“高级”流程(在您的情况下为 Excel)拥有的模型。我有同样的问题,也无法克服。
坐等微软决定通过对已经有效的东西进行更改来解决另一个引入和未经测试的问题是值得的。
问题是随 Excel 2013 引入的 SDI(单文档界面)的副作用。调用 DoEvents、ScreenUpdating 等的各种建议在某些情况下可能会有所帮助,但它们并不能解决问题。
此处发布了完整的解决方案:在 Excel 2013 及更高版本中将用户窗体置于 SDI 窗口之上
如果这对您的需求来说过于复杂,一个快速而简单的解决方案是最小化并恢复活动窗口,这会迫使用户窗体回到堆栈顶部。
'Do long-winded process first, then:
Application.ScreenUpdating = False
ActiveWindow.WindowState = xlMinimized
ActiveWindow.WindowState = xlNormal
Application.ScreenUpdating = True
这并不能防止表单消失,但会使其在流程结束时重新出现。
尝试使用以下两行代码而不是重新绘制。
Me.Show
和/或:
Me.SetFocus
希望其中之一对您有用!
对于 Office 2013 和 Windows 7,只需DoEvents
在(表单消失的地方)末尾添加即可sub
保持表单打开。没有其他需要....对于我的情况。
就我而言,我必须使用所有这些来实现它。(frmGUI 是我的表单) DoEvents
frmGUI.Repaint frmGUI.Show