根据本文,您无法将工作表从一个Excel实例移动或复制到另一个实例。不幸的是,这是我必须使程序正常运行的唯一方法。
我有2个Excel实例:一个由我们古老的ERP系统运行,另一个通过OLE调用运行。在第二个宏中运行的宏应将第一个工作表从打开的工作簿(ThisWorkbook
)复制到在第一个实例(Wb
)中打开的工作簿。我正在使用ForEachLoop的解决方案来获取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
method方法,然后使用Range.Copy
method,但它们都不起作用。直接范围分配仅复制值,我还需要复制格式。
因此,显然,可以使用复制格式的解决方案是合适的,但是如果有任何方法,我宁愿直接复制。另外,请不要建议使用剪贴板,因为这总是一个坏主意。
我建议您SaveAs
将工作簿从Excel实例A移到一个临时文件,然后在Excel实例B中打开此临时文件以复制所需的工作表。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句