Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1540to1544
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Bezug weg nach Makro

Bezug weg nach Makro
22.02.2017 15:47:32
Blue
Servus,
habe bei der Ausführung eines Makros Probleme mit einer Formel, kann mir da jemand Helfen?
Habe in Tabelle1 F17 eine Formel mit Bezug auf Tabelle2 A:A, wenn ich allerdings mein Makro ausführe, welches Daten aus mehreren externen Dateien in Tabelle2 einträgt.
Verschwinden meine Bezüge aus Tabelle1 F17.
Wie kann ich das beheben?
Hier eine Bespielsdatei: https://www.herber.de/bbs/user/111666.xlsm
mfg Blue Bird

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bezug weg nach Makro
22.02.2017 16:13:51
ChrisL
hi
In F17 sehe ich zwar keine Formel, aber wenn du die ganze Zeile kopierst, ist es irgendwie logisch dass die ganze Zeile inkl. Formeln überschrieben wird.
WB2.Worksheets(1).Rows(3).Copy wb1.Worksheets(2).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
z.B.
WB2.Worksheets(1).Range("A3:C3").Copy wb1.Worksheets(2).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
cu
Chris
AW: Bezug weg nach Makro
23.02.2017 08:27:49
Blue
Servus Chris,
dein Beispiel ändert allerdings nichts an der Situation.
mfg Blue Bird
offen owT
23.02.2017 08:51:21
ChrisL
.
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
Anzeige
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
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige