VBA Excel – Application.Interactive = True和Userforms导致应用程序窗口进入后台

当我运行一些包含用户窗体的macros时,我的Excel窗口会消失在背景(或者说,最顶层的Z-1窗口位置)中。 这个问题似乎与这些macros的开始处的Application.Interactive属性被设置为True有关,也就是说,当我注释掉那个命令时问题就消失了。

因为我不能真正从我的子程序中删除Application.Interactive = True命令,所以我不得不在每个macros的末尾放置一个BringWindowToTop API调用,以使窗口返回到顶部。 这个问题并不仅仅是在macros运行结束后屏幕会闪烁,这不一定是个大问题,而是因为我不明白是什么原因造成了这个问题。

再次,这只有当我有一个用户窗体被称为子程序的一部分,但我看不出任何问题,如何写。 Excel 2010和2013都会出现此问题。

请在下面find一个Module和UserForm的代码片段,它们与我的macrosfunction以及复制问题的function类似。 我已经完成了API调用,但他们被注释掉了。

有没有人知道这里发生了什么,以及如何修复?

模块代码

 'Public Declarations 'APIs Public Declare PtrSafe Function GetActiveWindow Lib "user32.dll" () As Long Public Declare PtrSafe Function BringWindowToTop Lib "user32.dll" (ByVal hwnd As Long) As Long Sub Window_To_Background_Test() Application.DisplayAlerts = False Application.ScreenUpdating = False Application.Interactive = False Application.Calculation = xlCalculationManual 'ThisWorkbooksHandle = GetActiveWindow With UserForm1 .StartUpPosition = 0 .Left = Application.Left + (0.5 * Application.Width) - (0.5 * .Width) .Top = Application.Top + (0.5 * Application.Height) - (0.5 * .Height) .Show End With Application.DisplayAlerts = True Application.ScreenUpdating = True Application.Interactive = True Application.Calculation = xlCalculationAutomatic 'Call BringWindowToTop(ThisWorkbooksHandle) End Sub 

用户窗体代码

 Private Sub UserForm_Initialize() Set Label1 = UserForm1.Controls.Add("Forms.Label.1", "Test", True) With Label1 .Caption = "Test" .Left = 10 .Width = 50 .Top = 10 End With End Sub