Ist nicht ganz einfach so ganz ohne Beispieldatei(en).
Darum mal hier was simuliertes, um das Prinzip zu zeigen:
{
wksSrc erhällst du natürlich bei dir über deine geöffnete Arbeitsmappe, deren Referenz (wkb) du ja von der Open-Methode erhälst
also letztendlich dann sowas wie
Set wksSrc = wkb.Worksheets("TabelleMitDaten")
}
'Beispiel benötigt eine Mappe mit mind. 2 (leeren) Tabellenblättern
Option Explicit
Sub Bsp()
Dim wksSrc As Excel.Worksheet
Dim wksDest As Excel.Worksheet
Dim rngSrc As Excel.Range
Dim rngDest As Excel.Range
Dim i As Long
Set wksSrc = Worksheets(2)
Set wksDest = Worksheets(1)
With wksDest
Set rngDest = .Cells(.Rows.Count, "B").End(xlUp)
If rngDest.Text <> "" Then Set rngDest = rngDest.Offset(1)
End With
For i = 1 To 4 'es werden vier Quelldateien simuliert
'neue Quelldaten/-datei generieren
Call CreateExampleData(wksSrc)
With wksSrc
Set rngSrc = .Range("B1", .Cells(.Rows.Count, "B").End(xlUp))
End With
'Daten (Zeit) kopieren
Call rngSrc.Copy
With rngDest.Resize(rngSrc.Rows.Count)
Call .PasteSpecial(xlPasteValuesAndNumberFormats, Transpose:=False)
End With
'Kopf (Datum) kopieren
Call wksSrc.Range("A1").Copy
With rngDest.Offset(, -1).Resize(rngSrc.Rows.Count)
Call .PasteSpecial(xlPasteValuesAndNumberFormats)
End With
Set rngDest = rngDest.Offset(rngSrc.Rows.Count)
'etwas "Kosmetik" (doppelte Linie trennt die Daten visuell voneinander)
With rngDest.Offset(, -1).Resize(, 2).Borders(xlEdgeTop)
.LineStyle = XlLineStyle.xlDouble
End With
Next
Application.CutCopyMode = False
End Sub
Private Sub CreateExampleData(Worksheet As Excel.Worksheet)
Call Randomize(Timer) 'Zufallszahlengenerator init.
With Worksheet
Call .UsedRange.EntireRow.Delete
Debug.Print "> Neue Quelldatei <"
'Kopf (Datum)
With .Range("A1")
.NumberFormat = "dd.mm.yyyy"
.Value = DateAdd("d", Int(CLng(Rnd() > 0.5) * 61 * Rnd()), Date)
Debug.Print " Datum: #" & Format$(.Value, "yyyy-mm-dd") & "#"
End With
'Daten (Zeit)
With .Range("B1:B" & Int((20 - 4) * Rnd() + 4))
.NumberFormat = "hh:mm:ss"
.Formula = "=TIME(0,0,ROW()*15)"
.Value = .Value
Debug.Print " Anzahl Zeitwerte: " & .Rows.Count
End With
End With
End Sub
|