AW: offen owT
23.02.2017 19:36:36
Michael
Hi,
der Bezug ist zerschossen, sobald das .cells.clear ausgeführt wird.
Man könnte also die Anzahl der vorhandenen Zeilen zwischenspeichern und, falls die neuen Daten weniger Zeilen benötigen als die alten, nur die Zeilen dazwischen löschen:
Sub F_Dateien_einlesen()
Dim spfad As String, sExt As String, sDatei As String
Dim wb1 As Workbook, WB2 As Workbook
Dim WerteBis As Long, neueZeile As Long
Set wb1 = ThisWorkbook
spfad = Left(wb1.Path, InStrRev(wb1.Path, "\") - 1)
spfad = Left(spfad, InStrRev(spfad, "\")) & "Office\Projektauswertung\PPS\"
sExt = "*.f"
sDatei = Dir(spfad & sExt)
Application.ScreenUpdating = False
With wb1.Worksheets(2)
WerteBis = .Range("A" & .Rows.Count).End(xlUp).Row
' .Cells.Delete ' Das zerschießt Dir die Formel!
End With
neueZeile = 1
Do While Len(sDatei) > 0
Set WB2 = Workbooks.Open(spfad & sDatei)
WB2.Worksheets(1).Rows(3).Copy wb1.Worksheets(2).Range("A" & neueZeile)
WB2.Close
neueZeile = neueZeile + 1
sDatei = Dir()
Loop
With wb1.Worksheets(2)
If neueZeile
Die vielleicht einfachere Variante wäre, die Formeln in ein Array zu packen und einfach wieder zurück zu schreiben, etwa so:
Sub F_Dateien_einlesen()
Dim spfad As String, sExt As String, sDatei As String
Dim wb1 As Workbook, WB2 As Workbook
Dim meineFormeln
Set wb1 = ThisWorkbook
meineFormeln = wb1.Worksheets(1).Range("E17:E59").FormulaLocal
' Dein Code
' nur zum Test:
MsgBox meineFormeln(1, 1)
wb1.Worksheets(1).Range("E17:E59").FormulaLocal = meineFormeln
End Sub
Schöne Grüße,
Michael