2011-10-23 42 views
5

我想將一個已經打開的Excel實例的數據複製到VBA中的另一個Excel實例中。我想:如何在VBA中的兩個打開的Excel實例之間進行復制?

Option Explicit 
Sub copy_paste() 

    Dim destination_sanitized As String 
    Dim fs As New FileSystemObject 

    destination_sanitized = fs.BuildPath("c:\temp\", "1.xlsx") 

    Dim xl As New Excel.Application 

    Dim wb As Workbook 
    Set wb = xl.Workbooks.Open(Filename:=destination_sanitized) 

    Dim r1 As Range 
    Dim r2 As Range 
    Set r1 = ThisWorkbook.Sheets("hidden").Range("E10:E13") 
    Set r2 = wb.Sheets("Sheet1").Range("J20:J23") 

    On Error GoTo Cleanup 
    r1.Copy r2 

Cleanup: 
    wb.Close SaveChanges:=False 
    Set xl = Nothing 
    MsgBox Err.Number & ": " & Err.description 


End Sub 

我得到運行時錯誤「1004」:範圍類的複製方法失敗

我如何複製從一個數據已經打開的Excel實例在VBA另一個Excel實例?

我知道如何做到這一點,當他們是同一個實例的一部分。在這種特殊情況下,我需要兩個工作簿處於不同的實例中。我還需要做一個完整的副本(數據驗證,公式,值,格式等),所以r2.Value = r1.Value是不夠的。

+1

作者:「然而,我使用至少10個同時出色」你的意思是你在Excel的一個實例中打開了10個工作簿,或者是10個獨立的實例運行? – brettdj

+0

當你的問題解決了,接受一些答案,比我們試圖建議一些代碼 – niko

+1

沒有一個建議的答案實際上解決了這個問題。問題是關於應用程序實例之間的複製和粘貼。建議的答案是在同一應用程序實例中打開的不同工作簿之間進行復制。 –

回答

1

我想你需要詳細說明爲什麼你需要需要單獨的實例,到目前爲止在我的職業生涯中,我從來沒有任何理由在Excel中使用單獨的實例,這是自動化的噩夢。

話雖這麼說,你可以給這樣的一個嘗試(假設你只有2個實例打開):

Sub MM() 

    Dim varTask As Variant 
    Dim XL1 As Application, XL2 As Application 
    Dim r1 As Range, r2 As Range 
    Dim OtherWB As Workbook 
    Dim destination_sanitized As String 

    destination_sanitized = CreateObject("Scripting.FileSystemObject").BuildPath("C:\temp\", "1.xlsx") 

    With CreateObject("Word.Application") 
     If .Tasks.Exists("Microsoft Excel") Then 
      For Each varTask In .Tasks 
      Debug.Print varTask 
       If InStr(varTask.Name, "Microsoft Excel") = 1 Then 
         If XL1 Is Nothing Then 
         Set XL1 = GetObject(Replace(varTask, "Microsoft Excel - ", "")).Application 
         Else 
         Set XL2 = GetObject(Replace(varTask, "Microsoft Excel - ", "")).Application 
         End If 
       End If 
      Next varTask 
     End If 
     .Quit 
    End With 

    'Then something like... 

    Set r1 = ThisWorkbook.Sheets("hidden").Range("E10:E13") 
    Set OtherWB = XL2.Workbooks.Open(destination_sanitized) 
    Set r2 = OtherWB.Sheets("Sheet1").Range("J20:J23") 
    r1.Copy r2 

    'Clear down memory afterwards 
    Set r1 = Nothing 
    Set r2 = Nothing 
    OtherWB.Close False 
    Set OtherWB = Nothing 
    Set XL1 = Nothing 
    XL2.Quit 
    Set XL2 = Nothing 

End Sub 
1

這是很難得的Excel的兩個實例來互相對話在所有情況下。你可以找到其他正在運行的實例,但有太多東西需要考慮。

在類似的情況下,我把它簡單,使兩個按鈕:

  • 出口,節省了到clipboard.csv或clipboard.xlsx或任何 格式你喜歡要複製的數據
  • 進口從剪貼板臨時文件獲取數據

用戶負責單擊一個Insta上的導出按鈕nce,然後在第二個實例上的Import按鈕上。

相關問題