将整个工作表从Excel的一个实例复制到另一个实例

根据这篇文章 ,您不能将工作表从Excel的一个实例移动或复制到另一个实例。 不幸的是,这是我必须使程序正常工作的唯一方法。

我有两个Excel实例:一个由我们古老的ERP系统运行,另一个通过OLE调用。 在第二个运行的macros应将第一个工作表从已打开的工作簿( ThisWorkbook )复制到第一个实例( Wb )中打开的工作簿中。 我正在使用ForEachLoop的解决scheme来获得Wb

 Public Function GetExcelObjectFromHwnd(ByVal hWnd As Long) As Boolean ... If AccessibleObjectFromWindow(hWnd, OBJID_NATIVEOM, iid, obj) = 0 Then 'S_OK Dim objApp As Excel.Application Set objApp = obj.Application Dim Wb As Workbook For Each Wb In objApp.Workbooks ProcessWorkbook Wb Next Wb fOk = True End If ... End Function Sub ProcessWorkbook(Wb as Worksheet) ... 'This produces error because ThisWorkBook and Wb are opened in different instances of Excel: ThisWorkbook.Sheets(1).Copy , Wb.Sheets(1) 'What I developed so far Wb.Sheets.Add , Wb.Sheets(1) 'this doesn't work too: ThisWorkbook.Sheets(1).UsedRange.Copy Wb.Sheets(2).Range("A1") 'and this works but doesn't copy formatting: With ThisWorkbook.Sheets(1).UsedRange Wb.Sheets(2).Range("A1").Resize(.Rows.Count, .Columns.Count) = .Value End With ' later I perform some operations with cells ... End Sub 

正如你可以猜测,我第一次尝试使用Worksheet.Copy方法,然后Range.Copy方法,他们都不工作。 直接范围分配只复制值,我也需要格式化复制。

所以,显然,将复制格式的解决scheme是适当的,但我更喜欢直接复制,如果有什么办法做到这一点。 另外,请不要使用剪贴板,因为它总是不好的主意。

我build议你把你的工作簿从Excel实例A保存到一个临时文件,然后在Excel实例B中打开这个临时文件,以便复制你需要的工作表。