2014-06-06 58 views
2

根據this article,無法將工作表從Excel的一個實例移動或複製到另一個實例。不幸的是,這是我必須使我的程序正常工作的唯一方法。將整個工作表從一個Excel實例複製到另一個

我有兩個Excel實例:一個由我們古老的ERP系統運行,另一個通過OLE調用運行。運行在第二個宏中的宏應將第一個工作表從打開的工作簿(ThisWorkbook)複製到第一個實例中打開的工作簿(Wb)中。我使用ForEachLoop's solution獲得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方法,他們都不起作用。直接範圍分配只複製值,我還需要格式化才能複製。

所以,顯然,將複製格式的解決方案是適當的,但我更喜歡直接複製,如果有任何方法可以做到這一點。另外,請不要使用剪貼板,因爲它總是不好的主意。

回答

2

我建議你從Excel實例A的工作簿到臨時文件,然後在Excel實例B中打開此臨時文件以複製所需的工作表。

+0

謝謝你的出色主意!其實,我用'如果Wb.Application.hWnd <> Application.hWnd Then:Dim Fn As String:Fn = Wb.FullName:Wb.Close False:Set Wb = Workbooks.Open(Fn):End If'。這些文件在宏執行時未被更改。 – Danatela

+0

+1爲簡單起見。 – brettdj

相關問題