2011-10-23 7 views
5

मैं एक्सेल के पहले से खोले गए उदाहरण से डेटा को वीबीए में एक्सेल के दूसरे उदाहरण में कॉपी करना चाहता हूं। मैंने कोशिश की:मैं 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 

मैं रन-टाइम त्रुटि '1004' मिलता है: रेंज वर्ग की प्रति विधि असफल

मैं कॉपी कर सकते हैं कैसे एक से डेटा पहले से ही VBA में एक और एक्सेल उदाहरण के लिए Excel के उदाहरण खोला?

मैं समझता हूं कि यह कैसे करें जब वे एक ही उदाहरण का हिस्सा हों। इस विशेष मामले में, मुझे अलग-अलग उदाहरणों में होने के लिए दो कार्यपुस्तिकाओं की आवश्यकता है। मुझे एक पूर्ण प्रतिलिपि (डेटा प्रमाणीकरण, सूत्र, मान, प्रारूप, आदि) भी करने की आवश्यकता है, इसलिए r2.Value = r1.Value पर्याप्त नहीं होगा।

+1

"हालांकि मैं कम से कम 10 एक्सेल का उपयोग कर रहा हूं" क्या आपका मतलब है कि आपके पास एक्सेल के एक उदाहरण में 10 कार्यपुस्तिकाएं खुली हैं, या दस अलग-अलग उदाहरण हैं? – brettdj

+0

जब आपकी समस्या हल हो जाती है, तो कुछ उत्तरों को स्वीकार करें, हम कुछ कोड – niko

+1

सुझाए जाने का प्रयास करेंगे, प्रस्तावित उत्तरों में से कोई भी वास्तव में समस्या का समाधान नहीं करता है। सवाल आवेदन उदाहरणों के बीच प्रतिलिपि बनाने और चिपकाने के बारे में है। प्रस्तावित उत्तर एक ही आवेदन उदाहरण में खुली विभिन्न कार्यपुस्तिकाओं के बीच प्रतिलिपि बनाने के लिए हैं। –

उत्तर

1

मुझे लगता है कि आपको को अलग-अलग उदाहरणों की आवश्यकता क्यों है, मेरे करियर में अब तक एक्सेल में एक अलग उदाहरण का उपयोग करने का कोई कारण नहीं है और यह स्वचालन के लिए एक दुःस्वप्न है।

कहा जा रहा है, आप कुछ इस तरह एक कोशिश (यह मानते हुए कि आप केवल 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

यह सभी परिस्थितियों में एक दूसरे से बात करने के लिए एक्सेल के दो उदाहरणों पाने के लिए मुश्किल है । आप अन्य चल रहे उदाहरण पा सकते हैं, लेकिन विचार करने के लिए बहुत सी चीजें हैं।

इसी तरह के मामलों में मैं इसे सरल रखने के लिए और दो बटन बनाने:

  • निर्यात clipboard.csv या clipboard.xlsx या जो कुछ भी प्रारूप आप कॉपी करना
  • डेटा आयात पसंद करने के लिए बचाता है कि जो क्लिपबोर्ड अस्थायी फ़ाइल से डेटा प्राप्त करता है

उपयोगकर्ता एक इंस्टा पर निर्यात बटन पर क्लिक करने का प्रभारी है एनसी, फिर दूसरे उदाहरण पर आयात बटन पर।

संबंधित मुद्दे