Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1852to1856
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

Zeilen / Zellen in Zieltabelle übertrage

Zeilen / Zellen in Zieltabelle übertrage
02.11.2021 17:37:52
Fiffi
Liebe Excel freaks,
ich habe aktuell folgendes Problem:
=> aus einer Quelltabelle (11 Spalten A-K) möchte ich alle mit Werten befüllte Zeilen (freilich ohne die Kopfzeile) auf Knopfdruck in eine Zieltabelle übertragen.
=> in dieser Zieltabelle sind typischerweise bereits analoge Datensätze vorhanden; die neuen Datensätze sollen in der ersten leeren Zeile darunter eingefügt werden.
=> es sollen nur Werte, keine Formeln übertragen werden.
=> in der Zieltabelle sind jedoch noch weitere Spalten (L,M,N,O) enthalten, deren Werte rechnerisch aus den entsprechenden Zellwerten in Spalte A-K der Zieltabelle bestimmt werden (also z.B. Berechnung des Bruttopreises und der Mehrwertsteuer bei vorgebenem Nettopreis und MWSt Satz in den Spalten A-K. Die Zellen in den Spalten L,M,N,O sind daher bereits mit entsprechenden Formeln belegt - soweit so klar)
=> wenn ich jetzt die aus dem Quellblatt zu übertragende Zeile in das Zielblatt als komplette Zeile nach dem nachfolgend aufgeführten Makro einfüge, dann werden verständlicherweise auch die in den Spalten L,M,N,O vorgegebenen Formeln gelöscht - eine automatische Weiterverarbeitung dieser Daten ist also nicht mehr möglich.

Sub Übertragen()
Dim oWsQ As Worksheet, oWsZ As Worksheet
Dim rngQ As Range
'setzt Verweis auf Quellblatt
Set oWsQ = Worksheets("Quellblatt")
'setzt Verweis auf Zielblatt
Set oWsZ = Worksheets("Zielblatt")
'Fehlerüberwachung ausschalten
On Error Resume Next
'setzt Verweis auf Zellen mit Werten im Quellblatt
Set rngQ = oWsQ.Rows("2:" & Rows.Count).SpecialCells(xlCellTypeConstants)
'Fehlerüberwachung einschalten
On Error GoTo 0
'wenn Zellen mit Werten vorhanden sind
If Not rngQ Is Nothing Then
'Zielblatt freigeben
oWsZ.Unprotect
'kopiere ganze Zeile(n) der Zellen mit Werten
Application.Intersect(oWsQ.Rows, rngQ.EntireRow).Copy
'unter letzte belegte Zelle in Spalte 1 des Zielblattes
With oWsZ.Cells(Rows.Count, 1).End(xlUp).Offset(1)
'Werte einfügen
.PasteSpecial xlValues
'Formate einfügen
.PasteSpecial xlFormats
End With
'Zwischenablage leeren
Application.CutCopyMode = False
'Zielblatt schützen
oWsZ.Protect
'Zellinhalte des Quellbereiches löschen
rngQ = ""
End If
End Sub
Ich denke, dieses Problem sollte grundsätzlich lösbar sein, indem man nicht die ganze Zeile ins Zielblatt überträgt, sondern nur jeweils die Zellen A bis K einer solchen Zeile.
Das Zielblatt ist zunächst schreibgeschützt und soll auch nach Einfügen des Datensatzes wieder schreibgeschützt sein. Die Daten aus dem Quellblatt sollen nach Übertragen ins Zielblatt gelöscht werden (am besten ganze Zeile löschen) .
Ich kann das Makro jedoch mangels VBA know how nicht entsprechend umschreiben und darf um Eure entsprechenden Vorschläge bitten.
Vielen lieben Dank im vorhinein
Fiffi

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeilen / Zellen in Zieltabelle übertrage
02.11.2021 19:43:35
onur
So ein Code ist ohne die Datei nix Wert, da ein Code maßgeschneidert für die Datei ist. Selbst wenn du mit Worten versuchst, die Datei zu beschreiben.
Keiner wird sich die Mühe machen, deine Datei anhand deiner Beschreibung nachzubauen, nur um den Code testen zu können..
AW: Zeilen / Zellen in Zieltabelle übertrage
03.11.2021 11:46:54
Piet
Hallo
wenn ich die Aufgabe richtig verstanden habe musst du nur eine Set Anweisung ändern. Das ist alles!!
Set rngQ = oWsQ.Range("A2:K" & Rows.Count).SpecialCells(xlCellTypeConstants)
mfg Piet
AW: Zeilen / Zellen in Zieltabelle übertrage
05.11.2021 13:50:30
Fiffi
danke,Piet
hab die zeile entsprechend angepasst.
Set rngQ = oWsQ.Range("A2:K" & Rows.Count).SpecialCells(xlCellTypeConstants)
makro läuft aber nicht. Ich vermute, dass zumindest auch die Zeile
Application.Intersect(oWsQ.Rows, rngQ.EntireRow).Copy
einer entsprechenden Anpassung bedarf. Denn dort steckt doch nach meinem verständnis erst der eigentliche Befehl, die ganze Zelle bzw die Zellen A:K zu kopieren. Kannst du mir diese VBA Zeile entsprechend auch umschreiben - meine Versuche jedenfalls sind bisher kläglich gescheitert.
Danke. Fiffi
Anzeige
AW: Zeilen / Zellen in Zieltabelle übertrage
05.11.2021 17:22:37
Piet
Hallo
ich habe den Code noch mal umgestaltet und mit For Next komplett neu aufgebaut. Begründung:
Das Problem bei SpecialCells ist, das vielleicht nicht alle Zeilen/Spalten ausgefüllt sind, und man dann keinen durchgehend zusammenhängenden Bereich bekommt! Dann versagt die Copy Methode! Man müsste Einzelzellen kopieren!
Mit For Next ermittele ich die höchste LastZelle in den Spalten A-K und habe einen zusammenhängenden Bereich zum Kopieren!
mfg Piet
  • 
    Sub Übertragen_neu()
    Dim oWsQ As Worksheet, oWsZ As Worksheet
    Dim j As Integer, z As Long, lzX As Long
    'setzt Verweis auf Quellblatt
    Set oWsQ = Worksheets("Quellblatt")
    'setzt Verweis auf Zielblatt
    Set oWsZ = Worksheets("Zielblatt")
    'sucht LastZell max. in Spalte A-K
    For j = 1 To 11   'Spalte A-K LastZell prüfen
    z = oWsQ.Cells(Rows.Count, j).End(xlUp).Row
    If z > lzX Then lzX = z
    Next j
    'Meldung und Aussprung wenn keine Daten vorliegen
    If lzX 

  • Anzeige
    AW: Zeilen / Zellen in Zieltabelle übertrage
    06.11.2021 09:39:31
    Fiffi
    Super, super, Piet, dein aufwändiges Makro funktioniert tatsächlich in geforderter Weise - besten Dank.
    Tatsächlich sind wie von dir vermutet in meinem Quellblatt nicht immer alle Zellen ausgefüllt; allerdings sollen nur Zellen in Quellblatt Spalte C auch leer sein dürfen. Die Zellen in den Spalten D bis inkl. K enthalten eine SVERWEIS Funktion, was du freilich nicht wissen konntest. Wenn diese Zellen nicht befüllt sind, dann sind sie nicht wirklich leer, sondern enthalten den Eintrag #NV (diesen Eintrag will ich auch nicht irgendwie ausblenden - er ist hilfreich für mich). Folglich werden bei Anwendung deines Makros auch solche Zeilen übertragen, welche zwar keine echten Daten sondern nur diese leeren #NV Einträge aufweisen. Ich hab dein Makro daher insoweit abgeändert, dass die LastZell Überprüfung nur auf die Zellen in Spalten A und B angewendet wird. Damit geht mir keine Funktionalität verloren, denn man muss wissen: mein Anwendungszweck ist eine Art Kassenbuch. Spalte A beinhaltet das Zahlungsdatum, Spalte B eine Buchungsnummer; eine Buchung ohne diese beiden Angaben ist also ohnehin immer unvollständig und unsinnig. .
    Bei der weiteren Prüfung deines Originalmakros (sowohl in der Originalversion als auch in der von mir wie oben beschrieben modifizierten Version) fällt auf, dass nicht definitionsgemäß befüllte Zeilen zwar nicht ins Zielblatt übertragen werden - im Zielblatt an dieser Stelle allerdings eine Leerzeile auftritt, die nicht wirklich sinnvoll ist. Man muss wissen, dass das Zielblatt die im Quellblatt korrekt eingegebenen Buchungsvorgänge abspeichern soll. Im Zielblatt sollten daher möglichst nie nachträgliche Änderungen unter Aufhebung des Schreibschutzes erforderlich werden.
    Wenn man schon so eine aufwändige Abfrage in das Makro programmiert, ob Zellinhalte in der zu übertragenden Zeile enthalten sind, dann wäre es toll, wenn dieses Makro auch mit überprüft, ob die Zellen in allen Spalten A bis K mit Ausnahme der C Spalte (nur C darf bekanntlich leer sein) tatsächlich Einträge enthalten (will heißen entweder "nicht leer" sind oder "nicht #NV" enthalten, eine Null soll freilich erlaubt sein. Denn solche nur teilweise befüllten Zeilen wurden vom Anwender offensichtlich irrtümlich nicht korrekt befüllt und sollten dann also idealerweise auch gar nicht ins Zielblatt übertragen werden sondern im Quellblatt verbleiben, damit sie dort vom Anwender vervollständigt werden können. Zur Veranschaulichung auf meinen konkreten Anwendungszweck bezogen: Einträge z.B. ohne Verwendungszweck, ohne Betrag und ohne Angaben zur MWSt sind offensichtlich unvollständig und sinnlos und sollten daher nicht im Zielblatt abgelegt werden.
    Ich denke, sowohl das Problem mit den aktuell auftretenden Leerzeilen im Zielblatt als auch die o.g. Prüfung auf Inhalte ließe sich lösen, wenn das Makro einfach nur bis zu der letzten ordnungsgemäß befüllten Zeile diese Zeilen ins Zielblatt überträgt; danach die Übertragung beendet - bei der ersten unvollständig ausgefüllten Zeile die weitere Übertragung also abgebrochen wird, Dann das Makro beendet wird wie bisher - also Zwischenablage leeren, übertragene Zellinhalte des Quellblatts löschen, das Zielblatt schreibschützen - wie in deinem Makro bereits ausgeführt. Die erste unvollständig befüllten Zeile sollte dann also konsequenterweise im Quellblatt zur Nachbearbeitung verbleiben - ebenso ggf auch alle weiteren darunter nachfolgenden Zeilen, auch wenn diese korrekt befüllt sind. (Falls leichter zu programmieren, dann können auch die nachfolgenden korrekt befüllten Zellen übertragen werden - , allerderdings ohne Leerzeilen im Zielblatt).
    Darf ich deine geschätzte Hilfe hierzu nochmals beanspruchen?
    Vielen herzlichen Dank & ein schönes Wochenende!
    Fiffi
    Anzeige
    AW: Zeilen / Zellen in Zieltabelle übertrage
    06.11.2021 13:07:37
    Piet
    Hallo
    da haben ja Anfangs eine Menge wichtiger Informationen gefehlt, sonst hätte ich das Makro direkt komplett anders aufgebaut!
    Bitte teste mal ob es so funktioniert, es ist UNGETESTET. Nicht ganz sicher bin ich mir bei Formel Auswertung wo eine Null drin steht.
    Das neue Makro besteht aus zwei Teilen. Der zweite Teil löscht die kopierten Zeilen Rückwärts!! Vorwärts funktioniert löschen NICHT !!
    Das Wissen fehlt den meisten VBA Anfängern, dann kommt der Löschvorgang ins huddeln!
    Würde mich freuen wenn es jetzt so klappt wie du dir es vorgestellt hast.
    mfg Piet
  • 
    Sub Übertragen_Neu()
    Dim oWsZ As Worksheet, i, j, n As Integer
    Dim AC As Range, lzQuell As Long, lzZiel As Long
    'setzt Verweis auf Zielblatt
    Set oWsZ = Worksheets("Zielblatt")
    'setzt Verweis auf Quellblatt  (mit With!)
    With Worksheets("Quellblatt")
    'LastZell in Spalte A suchen  (reicht aus!)
    lzQuell = .Cells(Rows.Count, 1).End(xlUp).Row
    lzZiel = oWsZ.Cells(Rows.Count, 1).End(xlUp).Row + 1
    Application.ScreenUpdating = False
    'Alle Buchungszeilen auf Eingabe prüfen
    For j = 2 To lzQuell:  n = 0   'n löschen
    'Spalte D-K jede Zelle Daten Prüfung
    For i = 4 To 11
    If Left(.Cells(j, i).Formula, 3) = "#NV" Then   '#NV"
    ElseIf Trim(.Cells(j, i).Formula) = "" Then     'Leerzelle
    Else: n = n + 1   'Daten Ok = n+1
    End If
    Next i
    'Wenn Daten D-K Okay dann kopieren
    If n = 8 Then
    .Cells(j, 1).Resize(1, 11).Copy  'Spalte A-K
    oWsZ.Cells(lzZiel, 1).PasteSpecial xlPasteValues
    oWsZ.Cells(lzZiel, 1).PasteSpecial xlPasteFormulas
    .Cells(j, 1).Resize(1, 11).ClearContents  'löschen
    Application.CutCopyMode = False
    lzZiel = lzZiel + 1
    End If
    Next j
    'komplett leere Zeilen Rückwärts löschen
    For j = lzQuell To 2 Step -1
    If .Cells(j, 1).End(xlToRight).Column > 12 Then
    .Rows(j).Delete shift:=xlUp
    End If
    Next j
    End With
    End Sub
    

  • Anzeige
    AW: Zeilen / Zellen in Zieltabelle übertrage
    06.11.2021 20:55:27
    Fiffi
    Hi Piet, nur ein erster Zwischenbescheid;
    also spontan überträgt das Makro etwas, was tatsächlich ganz gut aussieht. Allerdings stoße ich momentan vermehrt auf Namenskonflikte und in den übertragenen Daten fällt auf, dass einige Daten wohl falsch zugeordnet sind. Das war möglicherweise in deinem alten Makro auch bereits der Fall - war mir allerdings zunächst noch nicht aufgefallen. Ich muss das alles noch weiter analysieren - aber heute nicht mehr.
    Gruß
    Fiffi
    AW: Zeilen / Zellen in Zieltabelle übertrage
    07.11.2021 17:43:08
    Fiffi
    .Hi Piet,
    wie bereits kurz gemeldet gibt es noch Probleme mit diesem Makro wegen Namenskonflikten. Die Übertragung bricht dann mit entsprechender Fehlermeldung ab, bei Ignorieren werden zwar Werte übertragen, jedoch fehlerhaft zugeordnet. Als offensichtlich wesentliche Ursache des Problems hab ich festgestellt, dass bei dem Makro so wie von dir vorgeschlagen nicht nur die Werte übertragen werden sondern auch die in den Zellen hinterlegten Formeln (macht ja richtig Spaß die Fehlersuche). Definitiv sollten für meinen Anwendungszweck aber nur die Zahlenwerte übertragen werden. Also hab ich in deinem Makro die entsprechende Zeile mit den "pasteFormulas" einfach gelöscht.
    Dann funktioniert die Übertragung auch tatsächlich fehlerfrei, ohne Namenskonflikt und ohne sonstige Fehler. Auch werden Leerzeilen bzw Zeilen mit #NV erkannt und nicht mit übertragen. Kommen aber weiter unten nach einer solchen Leerzeile noch korrekt befüllte Zeilen, dann werden auch die Leerzeilen von weiter oben mit übertragen. Ich meine, in deinem original Makro war das nicht der Fall - wieso das jetzt passieren soll wenn man nur die "PasteFormulas" Programmzeile streicht übersteigt mein VBA Verständnis.
    Des weiteren fehlte noch die Deaktivierung und anschließende Wiederaktivierung des Blattschutzes - das habe ich selbst hinbekommen. Mittlerweile sind auch nur noch 7 anstatt 8 Spalten zu übertragen. Das von mir auch diesbezüglich modifizierte Makro lautet also aktuell wie folgt:
    
    Sub Daten_Übertragen()
    'Bearbeitungsstand 07.11.2021
    Dim oWsZ As Worksheet, i, j, n As Integer
    Dim AC As Range, lzQuell As Long, lzZiel As Long
    'setzt Verweis auf Zielblatt
    Set oWsZ = Worksheets("AUS-Tabelle")
    'setzt Verweis auf Quellblatt  (mit With!)
    With Worksheets("AUS-EINGABEN")
    'LastZell in Spalte A suchen  (reicht aus!)
    lzQuell = .Cells(Rows.Count, 1).End(xlUp).Row
    lzZiel = oWsZ.Cells(Rows.Count, 1).End(xlUp).Row + 1
    Application.ScreenUpdating = False
    'Alle Buchungszeilen auf Eingabe prüfen
    For j = 2 To lzQuell:  n = 0   'n löschen
    'Spalte D-J jede Zelle Daten Prüfung
    For i = 4 To 10
    If Left(.Cells(j, i).Formula, 3) = "#NV" Then   '#NV"
    ElseIf Trim(.Cells(j, i).Formula) = "" Then     'Leerzelle
    Else: n = n + 1   'Daten Ok = n+1
    End If
    Next i
    'Wenn Daten D-J Okay dann Blattschutz für Zielblatt aufheben und Werte kopieren
    If n = 7 Then
    oWsZ.Unprotect
    .Cells(j, 1).Resize(1, 10).Copy  'Spalte A-J
    oWsZ.Cells(lzZiel, 1).PasteSpecial xlPasteValues
    .Cells(j, 1).Resize(1, 10).ClearContents  'löschen
    Application.CutCopyMode = False
    lzZiel = lzZiel + 1
    End If
    Next j
    'Blattschutz für Zielblatt aktivieren
    oWsZ.Protect
    'komplett leere Zeilen Rückwärts löschen
    For j = lzQuell To 2 Step -1
    If .Cells(j, 1).End(xlToRight).Column > 11 Then
    .Rows(j).Delete shift:=xlUp
    End If
    Next j
    End With
    End Sub
    
    Wie gesagt. funktioniert jetzt ganz gut - bis auf dass Leerzeilen / 'NV Zeilen übertragen werden wenn sie sich oberhalb von korrekt befüllten Datensätzen befinden. Darf ich deine großartige Unterstützung da nochmal beanspruchen?
    Viele Grüße
    Fiffi
    .
    Anzeige
    AW: Zeilen / Zellen in Zieltabelle übertrage
    07.11.2021 18:31:26
    Fiffi
    .Hi Piet,
    wie bereits kurz gemeldet gibt es noch Probleme mit diesem Makro wegen Namenskonflikten. Die Übertragung bricht dann mit entsprechender Fehlermeldung ab, bei Ignorieren werden zwar Werte übertragen, jedoch fehlerhaft zugeordnet. Als offensichtlich wesentliche Ursache des Problems hab ich festgestellt, dass bei dem Makro so wie von dir vorgeschlagen nicht nur die Werte übertragen werden sondern auch die in den Zellen hinterlegten Formeln (macht ja richtig Spaß die Fehlersuche). Definitiv sollten für meinen Anwendungszweck aber nur die Zahlenwerte übertragen werden. Also hab ich in deinem Makro die entsprechende Zeile mit den "pasteFormulas" einfach gelöscht.
    Dann funktioniert die Übertragung auch tatsächlich fehlerfrei, ohne Namenskonflikt und ohne sonstige Fehler. Auch werden Leerzeilen bzw Zeilen mit #NV erkannt und nicht mit übertragen. Kommen aber weiter unten nach einer solchen Leerzeile noch korrekt befüllte Zeilen, dann werden auch die Leerzeilen von weiter oben mit übertragen. Ich meine, in deinem original Makro war das nicht der Fall - wieso das jetzt passieren soll wenn man nur die "PasteFormulas" Programmzeile streicht übersteigt mein VBA Verständnis.
    Des weiteren fehlte noch die Deaktivierung und anschließende Wiederaktivierung des Blattschutzes - das habe ich selbst hinbekommen. Mittlerweile sind auch nur noch 7 anstatt 8 Spalten zu übertragen. Das von mir auch diesbezüglich modifizierte Makro lautet also aktuell wie folgt:
    
    Sub Daten_Übertragen()
    'Bearbeitungsstand 07.11.2021
    Dim oWsZ As Worksheet, i, j, n As Integer
    Dim AC As Range, lzQuell As Long, lzZiel As Long
    'setzt Verweis auf Zielblatt
    Set oWsZ = Worksheets("AUS-Tabelle")
    'setzt Verweis auf Quellblatt  (mit With!)
    With Worksheets("AUS-EINGABEN")
    'LastZell in Spalte A suchen  (reicht aus!)
    lzQuell = .Cells(Rows.Count, 1).End(xlUp).Row
    lzZiel = oWsZ.Cells(Rows.Count, 1).End(xlUp).Row + 1
    Application.ScreenUpdating = False
    'Alle Buchungszeilen auf Eingabe prüfen
    For j = 2 To lzQuell:  n = 0   'n löschen
    'Spalte D-J jede Zelle Daten Prüfung
    For i = 4 To 10
    If Left(.Cells(j, i).Formula, 3) = "#NV" Then   '#NV"
    ElseIf Trim(.Cells(j, i).Formula) = "" Then     'Leerzelle
    Else: n = n + 1   'Daten Ok = n+1
    End If
    Next i
    'Wenn Daten D-J Okay dann Blattschutz für Zielblatt aufheben und Werte kopieren
    If n = 7 Then
    oWsZ.Unprotect
    .Cells(j, 1).Resize(1, 10).Copy  'Spalte A-J
    oWsZ.Cells(lzZiel, 1).PasteSpecial xlPasteValues
    .Cells(j, 1).Resize(1, 10).ClearContents  'löschen
    Application.CutCopyMode = False
    lzZiel = lzZiel + 1
    End If
    Next j
    'Blattschutz für Zielblatt aktivieren
    oWsZ.Protect
    'komplett leere Zeilen Rückwärts löschen
    For j = lzQuell To 2 Step -1
    If .Cells(j, 1).End(xlToRight).Column > 11 Then
    .Rows(j).Delete shift:=xlUp
    End If
    Next j
    End With
    End Sub
    
    Wie gesagt. funktioniert jetzt ganz gut - bis auf dass Leerzeilen / 'NV Zeilen übertragen werden wenn sie sich oberhalb von korrekt befüllten Datensätzen befinden. Darf ich deine großartige Unterstützung da nochmal beanspruchen?
    Viele Grüße
    Fiffi
    .
    Anzeige
    AW: Zeilen / Zellen in Zieltabelle übertrage
    07.11.2021 18:31:56
    Fiffi
    .Hi Piet,
    wie bereits kurz gemeldet gibt es noch Probleme mit diesem Makro wegen Namenskonflikten. Die Übertragung bricht dann mit entsprechender Fehlermeldung ab, bei Ignorieren werden zwar Werte übertragen, jedoch fehlerhaft zugeordnet. Als offensichtlich wesentliche Ursache des Problems hab ich festgestellt, dass bei dem Makro so wie von dir vorgeschlagen nicht nur die Werte übertragen werden sondern auch die in den Zellen hinterlegten Formeln (macht ja richtig Spaß die Fehlersuche). Definitiv sollten für meinen Anwendungszweck aber nur die Zahlenwerte übertragen werden. Also hab ich in deinem Makro die entsprechende Zeile mit den "pasteFormulas" einfach gelöscht.
    Dann funktioniert die Übertragung auch tatsächlich fehlerfrei, ohne Namenskonflikt und ohne sonstige Fehler. Auch werden Leerzeilen bzw Zeilen mit #NV erkannt und nicht mit übertragen. Kommen aber weiter unten nach einer solchen Leerzeile noch korrekt befüllte Zeilen, dann werden auch die Leerzeilen von weiter oben mit übertragen. Ich meine, in deinem original Makro war das nicht der Fall - wieso das jetzt passieren soll wenn man nur die "PasteFormulas" Programmzeile streicht übersteigt mein VBA Verständnis.
    Des weiteren fehlte noch die Deaktivierung und anschließende Wiederaktivierung des Blattschutzes - das habe ich selbst hinbekommen. Mittlerweile sind auch nur noch 7 anstatt 8 Spalten zu übertragen. Das von mir auch diesbezüglich modifizierte Makro lautet also aktuell wie folgt:
    
    Sub Daten_Übertragen()
    'Bearbeitungsstand 07.11.2021
    Dim oWsZ As Worksheet, i, j, n As Integer
    Dim AC As Range, lzQuell As Long, lzZiel As Long
    'setzt Verweis auf Zielblatt
    Set oWsZ = Worksheets("AUS-Tabelle")
    'setzt Verweis auf Quellblatt  (mit With!)
    With Worksheets("AUS-EINGABEN")
    'LastZell in Spalte A suchen  (reicht aus!)
    lzQuell = .Cells(Rows.Count, 1).End(xlUp).Row
    lzZiel = oWsZ.Cells(Rows.Count, 1).End(xlUp).Row + 1
    Application.ScreenUpdating = False
    'Alle Buchungszeilen auf Eingabe prüfen
    For j = 2 To lzQuell:  n = 0   'n löschen
    'Spalte D-J jede Zelle Daten Prüfung
    For i = 4 To 10
    If Left(.Cells(j, i).Formula, 3) = "#NV" Then   '#NV"
    ElseIf Trim(.Cells(j, i).Formula) = "" Then     'Leerzelle
    Else: n = n + 1   'Daten Ok = n+1
    End If
    Next i
    'Wenn Daten D-J Okay dann Blattschutz für Zielblatt aufheben und Werte kopieren
    If n = 7 Then
    oWsZ.Unprotect
    .Cells(j, 1).Resize(1, 10).Copy  'Spalte A-J
    oWsZ.Cells(lzZiel, 1).PasteSpecial xlPasteValues
    .Cells(j, 1).Resize(1, 10).ClearContents  'löschen
    Application.CutCopyMode = False
    lzZiel = lzZiel + 1
    End If
    Next j
    'Blattschutz für Zielblatt aktivieren
    oWsZ.Protect
    'komplett leere Zeilen Rückwärts löschen
    For j = lzQuell To 2 Step -1
    If .Cells(j, 1).End(xlToRight).Column > 11 Then
    .Rows(j).Delete shift:=xlUp
    End If
    Next j
    End With
    End Sub
    
    Wie gesagt. funktioniert jetzt ganz gut - bis auf dass Leerzeilen / 'NV Zeilen übertragen werden wenn sie sich oberhalb von korrekt befüllten Datensätzen befinden. Darf ich deine großartige Unterstützung da nochmal beanspruchen?
    Viele Grüße
    Fiffi
    .
    Anzeige
    AW: Zeilen / Zellen in Zieltabelle übertrage
    08.11.2021 11:46:28
    Piet
    Hallo
    bitte probiere mal ob es mit dieser Version richtig klappt. Ich habe die Prüfung von Formula = "" auf Len(Formula) = 0 umgestellt. Das könnte besser klappen.
    Beim kopieren habe ich VOR xlPastValues noch den Befehl um die Formate zu kopieren eingefügt. Falls nicht erforderlich kannst du ihn löschen.
    Da stand vorher versehentlich xlPasteFormulas = Formeln statt Formats = Formate. Daher kam der Namenskonflikt!! Mein Fehler, Sorry!!
    PS - sollte der Thread zu Ende sein kannst du meine letzte Nachricht immer noch im Archiv finden. Der fällt bald aus dem Server raus! Dann ist antworten nicht mehr möglich, aber die letzte Nachricht findet man immer noch im Archiv!!
    mfg Piet
  • For i = 4 To 10
    If Left(.Cells(j, i).Formula, 3) = "#NV" Then '#NV"
    ElseIf Len(.Cells(j, i).Formula) = 0 Then 'Leerzelle
    Else: n = n + 1 'Daten Ok = n+1
    End If
    Next i
    'Wenn Daten D-J Okay dann Blattschutz für Zielblatt aufheben und Werte kopieren
    If n = 7 Then
    oWsZ.Unprotect
    .Cells(j, 1).Resize(1, 10).Copy 'Spalte A-J
    oWsZ.Cells(lzZiel, 1).PasteSpecial xlPasteFormats
    oWsZ.Cells(lzZiel, 1).PasteSpecial xlPasteValues
    .Cells(j, 1).Resize(1, 10).ClearContents 'löschen
    Application.CutCopyMode = False
    lzZiel = lzZiel + 1
    End If
    Next j
    'Blattschutz für Zielblatt aktivieren
    oWsZ.Protect

  • Anzeige
    AW: Zeilen / Zellen in Zieltabelle übertrage
    08.11.2021 17:29:21
    Fiffi
    Hi Piet,
    gleiches Problem wie bisher. Aber ich glaube, ich kann mit dieser Einschränkung schon leben; es funktioniert ja ohnehin komfortabler als ursprünglich gedacht. Den Wurm mit den unvollständig ausgefüllten Zeilen bekommt man offensichtlich nicht so einfach gelöst. Ich will deine Hilfe aber nicht unbedingt endlos überstrapazieren und mich nochmals ganz herzlich bedanken für die sehr hilfreiche Diskussion.
    Fiffi
    AW: Zeilen / Zellen in Zieltabelle übertrage
    08.11.2021 20:14:03
    Piet
    Hallo
    irgendwo wurmt es mich ja doch das wir dieses Problem nicht gelöst bekommen! Letzte Chance wäre eine kleine Beispieldatei mit anonymen Daten.
    Dann könnte ich das Makro in Echtzeit testen. Meistens fällt mir dabei noch ein pfiffiger Trick ein. Es liegt an dir ob wir es versuchen.
    Mich reizt die Aufgabe ob ich klüger bin wie Excel?
    mfg Piet
    Anzeige
    AW: Zeilen / Zellen in Zieltabelle übertrage
    08.11.2021 22:23:45
    Fiffi
    Hi Piet,
    wohl ein Hartholzbohrer - mich reizt die Perfektion ja auch - bloß ich kann das nicht....
    Ich hab jetzt mal eine Arbeitsmappe mit ein paar Dummywerten erstellt. Ich glaub, die veranschaulichen die Situation. Die Berechnungen im Zielblatt hab ich hier auf ca 1000 Zeilen voreingestellt - damit sollte ich weit auf der sicheren Seite sein. Eleganter wäre freilich wenn diese zusätzlichen Zeilen erst wirksam werden, wenn die Spalten A-J tatsächlich befüllt sind. Noch wichtiger wäre allerdings, wenn im Eingabeblatt nicht sämtliche Zeilen zu löschen sind - denn dann funktioniert, wie ich festgestellt habe, der "neue Zeilen Eingabe" Button so wie derzeit programmiert nicht mehr.
    Bin sehr neugierig auf deine Lösung. Bis dahin viele Grüße und großen Dank!
    https://www.herber.de/bbs/user/149012.xlsm

    300 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige