Excel 2013中的用户窗体在切换活动工作簿的同时消失

我在Excel 2013中遇到了一个问题。在我的项目中,我有一个用户窗体,其中包含列出所有打开的Excel图书名称的列表框。

当用户点击列表中的特定名称时,相应的书被激活。 因此,用户窗体始终处于顶部,当用户单击列表中的名称时,他可以看到所有打开的工作簿在激活的用户窗体后面逐一激活。

这是它在Excel 2010中使用的方式。

现在,从2010年到2013年的升级之后,如果用户在列表中单击名称,选定的工作簿被激活,但用户表单消失。

在Excel 2013中究竟发生了什么,以及绕过这个问题的方法是什么?

是的,默认行为已经改变。 在Pre Excel 2013中,如果在同一实例中打开,则在一个主Excel窗口中显示不同的工作簿。 但在Excel 2013中,它们显示在自己的窗口中。 由于这一点,一个modeless窗体只能在加载用户窗体时激活的工作簿的顶部显示。

我不认为这有一个修复呢。 这是在devise上,可能不是固定的。

@Siddharth,根据你所说的,我想我有一个解决scheme。 当您打开表单时,它只会显示在ActiveWorkbook之上。 只要所有的代码都在同一个代码线程中(不确定术语是否正确),就会陷入同样的​​工作簿中; 但是,如果你使用Application.RunApplication.Ontime命令,它似乎开始它自己的代码线程,这是足够独立的工作。 只要先Activate工作簿/工作表,然后Unload窗体并远程调用显示表单的macros。

不幸的是,由于上述问题,您需要使用Unload而不是Hide 。 这意味着您需要保存所选的所有选项。

 Private Sub lstFiles_DblClick(ByVal Cancel As MSForms.ReturnBoolean) ThisWorkbook.Application.Workbooks(lstFiles.Text).Activate Unload Me Application.Run "USER_Macro1" 'Application.OnTime Now(), "USER_Macro1" End Sub 

 Private Sub USER_Macro1(Optional Control) ' As IRibbonControl) ModelessForm.Show vbModeless End Sub 

我在Excel 2013中testing了它,到目前为止,无论Screenupdating = false问题如何,它似乎都能正常工作。