2011-10-23 25 views
5

Tôi muốn sao chép dữ liệu từ một cá thể Excel đã mở sang một phiên bản Excel khác trong VBA. Tôi cố gắng:Làm cách nào để sao chép giữa hai phiên bản Excel đang mở trong VBA?

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 

tôi nhận Run-time error '1004': Sao chép phương pháp của lớp Dải thất bại

Làm thế nào tôi có thể sao chép dữ liệu từ một đã mở thể hiện của Excel để một ví dụ Excel trong VBA?

Tôi hiểu cách thực hiện việc này khi chúng là một phần của cùng một trường hợp. Trong trường hợp cụ thể này, tôi cần hai sổ làm việc trong các trường hợp riêng biệt. Tôi cũng cần phải làm một bản sao đầy đủ (xác nhận dữ liệu, công thức, giá trị, định dạng, vv), do đó r2.Value = r1.Value sẽ không đủ.

+1

bởi "Tuy nhiên tôi đang sử dụng ít nhất 10 điểm vượt trội cùng một lúc", bạn có nghĩa là bạn có 10 sổ làm việc mở trong một phiên bản Excel hoặc mười cá thể riêng lẻ không? – brettdj

+0

Khi sự cố của bạn được giải quyết, Chấp nhận một số câu trả lời hơn chúng tôi sẽ cố gắng đề xuất một số mã số – niko

+1

Không có câu trả lời được đề xuất nào thực sự giải quyết được sự cố. Câu hỏi đặt ra là sao chép và dán giữa các cá thể ứng dụng. Các câu trả lời được đề xuất là để sao chép giữa các sổ làm việc khác nhau mở trong cùng một cá thể ứng dụng. –

Trả lời

1

Tôi nghĩ bạn cần phải giải thích lý do tại sao bạn cần trường hợp riêng biệt, cho đến nay trong sự nghiệp của mình tôi chưa bao giờ có bất kỳ lý do gì để sử dụng một cá thể riêng biệt trong Excel và đó là một cơn ác mộng đối với tự động hóa.

Điều đó đang được nói, bạn có thể cho một cái gì đó như thế này thử (giả sử bạn chỉ có 2 trường hợp mở):

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

Thật khó để có được hai trường hợp của Excel để nói chuyện với nhau trong mọi tình huống . Bạn có thể tìm thấy các trường hợp đang chạy khác, nhưng có quá nhiều điều cần xem xét.

Trong những trường hợp tương tự như tôi giữ nó đơn giản và làm cho hai nút:

  • Xuất mà tiết kiệm để clipboard.csv hoặc clipboard.xlsx hoặc bất cứ điều gì định dạng mà bạn muốn dữ liệu để sao chép
  • nhập để lấy dữ liệu từ tệp tạm thời trên clipboard

Người dùng có trách nhiệm nhấp vào nút Xuất trên một insta nce, sau đó vào nút Nhập trên phiên bản thứ hai.

Các vấn đề liên quan