Excel 2016缺陷?

Excel 2016缺陷?,excel,vba,Excel,Vba,我在Excel 2016中遇到了一个可复制的问题 我已经创建了一个应用程序,它将在Excel 2010中完美地工作,但在Excel 2016中不会。在应用程序中,用户选择一个工作簿,要求他们从中选择多个单独的范围 有一个带有多个按钮的表单,每个按钮都要求他们从以前选择的工作簿中选择与特定项目相关的范围 单击按钮时,所选工作簿应处于活动状态,以便他们可以选择范围。在Excel 2010中是这样,但在Excel 2016中不是这样 在Excel 2016中,用户表单所在的工作簿将继续显示,而不是所选

我在Excel 2016中遇到了一个可复制的问题

我已经创建了一个应用程序,它将在Excel 2010中完美地工作,但在Excel 2016中不会。在应用程序中,用户选择一个工作簿,要求他们从中选择多个单独的范围

有一个带有多个按钮的表单,每个按钮都要求他们从以前选择的工作簿中选择与特定项目相关的范围

单击按钮时,所选工作簿应处于活动状态,以便他们可以选择范围。在Excel 2010中是这样,但在Excel 2016中不是这样

在Excel 2016中,用户表单所在的工作簿将继续显示,而不是所选工作簿

要复制此问题,请执行以下步骤:

  • 开放式Excel 2016
  • 创建2个工作簿
  • 在工作簿1中,创建一个userform
  • 用下面的代码创建一个命令按钮
  • 激活工作簿1
  • 初始化表单并单击按钮
  • 选择任意范围(工作簿2应处于活动状态)
  • 再次单击按钮
问题:选择第二个范围时Workbook2不再处于活动状态。(Excel 2010将使Workbook2始终处于活动状态

除了选择“切换窗口”功能外,我从Workbook2中选择第二个范围的唯一方法是单击“取消”按钮并在其他位置释放鼠标,即,不要实际单击“取消”

这将显示Workbook2,但是,您还不能选择范围;只有在单击对话框后才能选择范围(根据我的发现)

另外,我刚刚注意到,如果您在Workbook2处于活动状态的情况下初始化用户表单,当您单击按钮时,Workbook1将被激活

Private Sub CommandButton1_Click()

    Dim rng As Range

    Me.Hide

    ' Windows(2).Activate ' edited for correctness
    Workbooks("Book2").Activate

    On Error Resume Next

    Set rng = Application.InputBox("Select range", "Select Range", Type:=8)

    On Error GoTo 0

    Me.Show
End Sub
这可能是由于Microsoft将Excel 2013及更高版本的MDI转换为SDI所致吗


更重要的是,我如何回避这个问题?

激活“工作簿”的代码不是正确的吗?甚至是
工作簿(“名称”)。激活
?在
窗口中的项目顺序随着实际窗口顺序的变化而变化<代码>窗口(1)
始终是活动窗口,因此您的
窗口(2)
将根据上次活动的窗口生成不同的窗口,并且它肯定不会连续两次提供相同的窗口,因为在上一次调用后,另一个窗口变为数字1。我相信这就是它从一开始在Excel中的工作方式。是的,但是用这个简单的代码复制这个问题更简单、更快。无论您使用工作簿还是Windows,问题仍然会出现。若要绕开,您可以尝试:删除
Me.Hide
,用工作簿1激活替换
Me.Show