2014-06-06 3 views
2

this article에 따르면 Excel의 한 인스턴스에서 다른 인스턴스로 워크 시트를 이동하거나 복사 할 수 없습니다. 불행히도, 그것은 내 프로그램이 제대로 작동하도록 만드는 유일한 방법입니다.Excel의 한 인스턴스에서 다른 워크 시트로 복사

저는 고대의 ERP 시스템과 OLE 호출을 통해 두 개의 Excel 인스턴스를 운영합니다. 두 번째 실행 매크로를 열린 통합 문서 (ThisWorkbook)의 첫 번째 워크 시트를 첫 번째 인스턴스 (Wb)에서 연 통합 문서로 복사해야합니다. 나는 Wb를 얻을 수 ForEachLoop's solution을 사용하고 있습니다 : 당신이 추측 수 있듯이

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 

, 내가 먼저 Range.Copy 방법을 Worksheet.Copy 방법을 사용하려고하고 모두 작동하지 않습니다. 그리고 직접 범위 지정은 값만 복사하고 복사 할 서식이 필요합니다.

그래서 분명히 포맷을 복사하는 솔루션이 적합하지만 어떤 방식 으로든 직접 복사하는 것이 좋습니다. 또한 항상 나쁜 생각이므로 클립 보드 사용을 제안하지 마십시오.

답변

2

Excel 인스턴스 A에서 임시 파일로 통합 문서를 만든 다음 Excel 인스턴스 B에서이 임시 파일을 열어 필요한 시트를 복사하는 것이 좋습니다.

+0

멋진 아이디어 주셔서 감사합니다! 사실, 나는 If Wb.Application.hWnd <> Application.hWnd를 사용했다. Then : Dim Fn As String : Fn = Wb.FullName : Wb.Close False : Wb = Workbooks.Open (Fn) : End If'. 이 파일들은 매크로가 실행되는 순간에 변경되지 않았습니다. 단순화를 위해 – Danatela

+0

+1. – brettdj

관련 문제