Excel 2013中的Userform在切换活动工作簿时消失

时间:2013-12-17 12:18:56

标签: excel excel-vba excel-2013 vba

我在Excel 2013中遇到过一个问题。在我的项目中,我有一个userform,其中包含一个列出了所有已打开的Excel书籍名称的列表框。

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

这是它在Excel 2010中的工作方式。

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

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

2 个答案:

答案 0 :(得分:1)

是的,默认行为已更改。在Pre Excel 2013中,如果在同一实例中打开,则会在一个主Excel窗口中显示不同的工作簿。但在Excel 2013中,它们会显示在自己的窗口中。因此,modeless用户表单只能在加载用户表单时处于活动状态的工作簿上显示。

我认为这还没有解决。它是设计使然,可能无法修复。

答案 1 :(得分:1)

@Siddharth,根据你的说法,我想我有一个解决方案。当您打开表单时,它只会显示在ActiveWorkbook之上。只要所有代码都在相同的代码线程中(不确定术语是否正确),您就会遇到相同的工作簿;但是如果你使用Application.RunApplication.Ontime命令,它似乎启动它自己的代码线程,它独立于工作。首先只需Activate工作簿/工作表,然后Unload表单和远程调用首先显示表单的宏。

不幸的是,由于上述问题,您需要使用 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中对它进行了测试,到目前为止,无论在其他地方看到Screenupdating = false问题,它似乎都能正常工作。