将打开的 Excel 文档移至单独的窗口

将打开的 Excel 文档移至单独的窗口

相关(但不相同):在新窗口中打开 Excel 文件

如果我有一个 Excel 实例,其中多个文档在同一个窗口中打开。有没有办法“撕下”当前正在运行的 Excel 实例中的一个窗口,以便将其放在一个完全不同的窗口中?

什么是不是符合要求:

  • 排列全部/并排查看/其他 MDI 内容;我想要一个单独的窗口,它可以在另一台显示器上单独最大化,并由窗口系统以不同的方式进行管理,等等。
  • 在正在运行的实例中保存/关闭它,然后打开一个新的 Excel 实例并在那里打开文件(这是我目前所做的,但很麻烦)

编辑:目标 Excel 版本是 2007 和 2010,不过任何版本都可以

答案1

有趣的想法。我有理由相信,如果没有自定义宏,您就无法做到这一点。星期天下着雨……

Sub OpenInNewInstance()
     Dim objXLNewApp As Excel.Application
     Dim doc As String

     doc = ActiveWorkbook.FullName
     ActiveWorkbook.Close True

     Set objXLNewApp = CreateObject("Excel.Application")

     objXLNewApp.Workbooks.Open doc
     objXLNewApp.Visible = True
End Sub

假设您不熟悉 VBA,您需要:

  1. 复制上面的代码
  2. 打开新的 Excel 工作簿后,打开 Excel 的 VBA 编辑器 (Alt+F11)
  3. 右键单击 VBAProject (Book1)(或左侧菜单中的任何名称)
  4. 选择“插入”>“模块”
  5. 将代码粘贴到主窗口
  6. 返回 Excel,选择另一个工作簿来测试代码(它会在关闭之前保存该工作簿)
  7. 返回 VBA 编辑器,选择您粘贴的模块并按播放按钮

我的机器上安装了 3 个版本的 Excel,当我在 Excel 2010 中运行它时,它会打开一个新的 Excel 2003 实例。

如果这符合您的需求,您可以将其打包成插件并将其作为功能区按钮使用。如果您不熟悉如何操作,请告诉我,我可以为您提供帮助。

编辑:如果此方法对您有用,显然需要添加一些额外的代码以确保 Excel 的新实例在另一个窗口中最大化。请告诉我。

答案2

我没有办法将一张纸“撕”到新窗口中,但如果你知道开始您需要两个窗口,这是最快的方法:

正常打开第一个文件。按住 SHIFT 并单击 Excel 任务栏按钮(位于屏幕底部,开始按钮和时钟之间)。这将强制 Excel 将新实例作为单独的窗口打开。进入该新窗口并单击文件 -> 打开以打开第二个文件。根据需要对多个窗口重复此操作。

不幸的是,如果你喜欢双击文件来打开 Excel,那么你必须在第二个窗口中改掉这个习惯,这也是我经常遇到的问题。但只要有远见,就不会有更简单的方法了。

答案3

要打开 2 个实例,请双击要打开的第一个文件。打开后,转到 start/programs/msoffice/excel,然后从那里打开另一个实例。然后您可以使用文件/打开它对我来说很有效。如果没有,请查看文件夹选项>文件类型、XLS、高级并检查打开表单。

答案4

回答以上可能适用于除活动工作簿,这就是我需要做的。以下是我使用的


确保启动时工作簿在实例中是单独的:

Private Sub Workbook_Open()
    If Application.Workbooks.Count > 1 Then  'check if there's >1 open wb's in this instance
        If MsgBox("This workbook will be moved to a new instance of Excel," & vbLf & _
            "so as to not affect performance of your other workbooks.", _
            vbOKCancel + vbInformation + vbDefaultButton1 + vbMsgBoxSetForeground) _
            = vbCancel Then Exit Sub
        Debug.Print Application.Hinstance, "Moving wb to new instance."
        OpenInNewInstance
        Debug.Print Application.Hinstance, "Moved wb to new instance."
    Else
        Debug.Print "This wb is in it's own instance. (#" & Application.Hinstance & ")"
    End If
End Sub

Sub OpenInNewInstance()
    With ThisWorkbook
        .Save                                           'save workbook before making it read-only
        .ChangeFileAccess xlReadOnly                    'make this wb read-only (so the other isn't)
        Shell ("excel.exe /x """ & .FullName & """")    'open current wb in new instance
        .Close                                          'close this workbook
    End With
End Sub

此代码进入模块ThisWorkbook,这样当工作簿打开时它会立即检查它是否是此实例中唯一打开的工作簿,如果不是:

  1. 保存当前工作簿
  2. 将当前 wb 设置为只读(以防止第二份副本出现问题)
  3. Shell 到命令提示符在新实例中打开 Excel(使用 Excel 的/x命令行转变)加载当前工作簿的另一个实例
  4. 关闭当前工作簿

如果有必要,你可以使用自定义命令行打开新实例以将指令等传输到新实例时。您还可以考虑隐藏新实例的应用程序窗口的利弊。

相关内容