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
방법을 사용하려고하고 모두 작동하지 않습니다. 그리고 직접 범위 지정은 값만 복사하고 복사 할 서식이 필요합니다.
그래서 분명히 포맷을 복사하는 솔루션이 적합하지만 어떤 방식 으로든 직접 복사하는 것이 좋습니다. 또한 항상 나쁜 생각이므로 클립 보드 사용을 제안하지 마십시오.
멋진 아이디어 주셔서 감사합니다! 사실, 나는 If Wb.Application.hWnd <> Application.hWnd를 사용했다. Then : Dim Fn As String : Fn = Wb.FullName : Wb.Close False : Wb = Workbooks.Open (Fn) : End If'. 이 파일들은 매크로가 실행되는 순간에 변경되지 않았습니다. 단순화를 위해 – Danatela
+1. – brettdj