2016-07-19 20 views
-1

Ich habe Dutzende von einzelnen Zellen, die jeden Tag von einem täglichen Bericht auf ein Hauptblatt kopiert werden müssen. Die Zellen, die kopiert werden müssen, werden in verschiedenen Zeilen im täglichen Bericht gefunden und müssen in verschiedene Zellen im Master eingefügt werden.Kopieren Paste mehrere Zellen Excel VBA

Mein VBA:

`Sub COPYCELL() 
Dim wbk As Workbook 

strFirstFile = "c:\daily_report-2016-07-19.xlsx" 
strSecondFile = "c:\testbook.xlsx" 

Set wbk = Workbooks.Open(strFirstFile) 
With wbk.Sheets("(Data)") 

    Range("C31", "D31", "E31").Copy 



End With 

Set wbk = Workbooks.Open(strSecondFile) 
With wbk.Sheets("Sheet1") 
    Range("KD213", "KE213", "KJ213").PasteSpecial 




End With 

End Sub 

`

So geht C31 zu KD213, D31 zu KE213 etc .. aber das gibt einen Fehler, da Excel nur mit 2-Zellen umgehen kann zu kopieren.

Wer weiß, wie man zusätzliche Kopierzellen und Ziele hinzufügt?

Danke!

+0

Sind diese Zellen Adresse konstant? oder müssen Sie sie jedes Mal ändern? –

+1

Zitat: "Excel kann nur mit 2 Zellen zu kopieren" ... Ich verstehe es nicht ... wenn ein kontinuierlicher Bereich ausgewählt ist (und 'Range (" C31 "," D31 "," E31 ")' funktioniert wie 'Range (" C31: E31 ")') dann bekommt jede Zelle eine volle Kopie aller Zellen ... was du versuchst zu tun ist auch nicht möglich mit 2 Zellen ... –

+0

Brauchst du nur diese 3 Werte oder Sie haben viel mehr? –

Antwort

1

Hier ist eine einfache Art und Weise:

Sub COPYCELL() 

    Dim wbk1 As Workbook, wbk2 As Workbook 
    Dim ws1 As Worksheet, ws2 As Worksheet 

    strFirstFile = "c:\daily_report-2016-07-19.xlsx" 
    strSecondFile = "c:\testbook.xlsx" 

    Set wbk1 = Workbooks.Open(strFirstFile) 
    Set ws1 = wbk1.Sheets("(Data)") 

    Set wbk2 = Workbooks.Open(strSecondFile) 
    Set ws2 = wbk2.Sheets("Sheet1") 

    With ws2 

     .Range("KD213").Value = ws1.Range("C31").Value 
     .Range("KE213").Value = ws1.Range("D31").Value 
     .Range("KJ213").Value = ws1.Range("E31").Value 

    End With 

End Sub 
+0

Vielen Dank, es hat funktioniert !! – CHopp

0

Sie können beliebig viele Bereiche nennen (derzeit manuell), wie Sie mit einem kurzen Unterroutine Sub CopyManyRanges (Range_Orig As String, Range_Dest As String) genannt wollen

Option Explicit Sektion:

Option Explicit 

Dim wb_first As Workbook 
Dim wb_second As Workbook 
Dim sht_data As Worksheet 
Dim sht_1 As Worksheet 

Sie r COPYCELL Routine:

Sub COPYCELL() 

Dim strFirstFile As String 
Dim strSecondFile As String 

strFirstFile = "c:\daily_report-2016-07-19.xlsx" 
strSecondFile = "c:\testbook.xlsx" 

Set wb_first = Workbooks.Open(strFirstFile) 
Set wb_second = Workbooks.Open(strSecondFile) 

Set sht_data = wb_first.Sheets("(Data)") 
Set sht_1 = wb_second.Sheets("Sheet1") 

' you can add a For Loop here 
Call CopyManyRanges("C31", "KD213") 
Call CopyManyRanges("D31", "KE213") 
Call CopyManyRanges("E31", "KJ213") 

End Sub 

Sun CopyManyRanges Routine:

Sub CopyManyRanges(Range_Orig As String, Range_Dest As String) 

sht_data.Range(Range_Orig).Copy 
sht_1.Range(Range_Dest).PasteSpecial 

End Sub 
0

Hier ist eine andere Möglichkeit, es zu tun, indem die Bereiche dann durch sie Looping zu erfassen. Stellen Sie nur sicher, dass Sie die Bereiche in der richtigen Reihenfolge festlegen.

Sub COPYCELL() 

    Dim wbk As Workbook 
    Dim strFile as String 

    strFile = "c:\daily_report-2016-07-19.xlsx" 
    Set wbk = Workbooks.Open(strFile) 

    Dim rng1 as Range 
    Set rng1 = wbk.Sheets("(Data)").Range("C31,D31,E31") 'add more as needed 

    wbk.Close false 

    strFile = "c:\testbook.xlsx" 
    Set wbk = Workbooks.Open(strFile) 

    Dim rng2 as Range 
    Set rng2 = wbk.Sheets("Sheet1").Range("KD213,KE213,KJ213") 'add more as needed 

    Dim i as Long 
    For each cel in rng2 
     cel.Value = rng1.Cells(i+1) 
     i = i + 1 
    Next 

    wkb.Close True 

End Sub 
+0

Danke für die Antwort! Wenn ich versuche, dies auszuführen, erhalte ich einen Laufzeitfehler '405' Falsche Anzahl von Argumenten oder ungültige Eigenschaftenzuweisung für Set rng1 = wbk.Sheets ("(Daten)"). Bereich ("C31", "D31" , "E31") – CHopp

+0

@CHopp - versuchen Sie es jetzt. Ich habe zu viele Zitate platziert. –