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

Archivieren

Archivieren
01.12.2008 10:17:25
Paul
Hallo Excel-Spezis,
ich versuche nochmals mein Problem zu schildern:
Ich lasse in einer Tabelle in den Zeilen 1 bis 39, offene Rechnungen erfassen und den Zahlungseingang überwachen. Die Zeilen enthalten hierfür u.a. div. Formeln. Jetzt möchte ich über ein Makro realisieren dass alle bezahlten Rechnungen (Ergebniss in Spalte "W" ist 0,00 €) aus dieser Liste in das Sheet "Bezahlt" verschoben und hier in die nächste freie Zeile eingefügt werden, so dass hier ein lückenloses Archiv entsteht. Am besten so denke ich ist es wenn nur die Werte kopiert werden, damit es nicht zu Formelfehlern kommt.
Am Ende des Codes sollen in dem Sheet Rechnungen keine leeren Zeilen zwischen den Rechnungen stehen, zum anderen sollen aber auch die 39, mit Formeln versehenen Zeilen bestehen bleiben.
Eine Musterdatei s.u. habe ich eingestellt!
https://www.herber.de/bbs/user/57272.xls

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Archivieren
01.12.2008 14:24:30
robert
hallo,
dieser code( in ein Modul) sollte gehen, bei mir ausprobiert
gruß
robert

Sub Bezahlte()
Dim quelle, ziel As Worksheet
Dim lz, lzz, i As Integer
Application.ScreenUpdating = False
Set quelle = Sheets("Rechnungen")
Set ziel = Sheets("Bezahlt")
lz = Cells(Rows.Count, 2).End(xlUp).Row
For i = 4 To lz
If Cells(i, 23) = 0 Then
Rows(i).Select
Selection.Copy
ziel.Select
lzz = Cells(Rows.Count, 1).End(xlUp).Row + 1
Rows(lzz).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'Sheets("Rechnungen").Select
quelle.Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlUp
End If
Next i
Application.ScreenUpdating = True
End Sub


Anzeige
AW: Archivieren
01.12.2008 14:55:24
fcs
Hallo Paul,
das läßt sich nur vernüftigt lösn, wenn du die Formeln im Blatt "Rechnungen" in soweit anpasst, dass in allen Formeln der Zeilen 4 bis 39 der Bezug auf das Blatt selbst entfernt wird.
Also z.B

=WENN(F4="KH";0;G4)
statt
=WENN(Rechnungen!F4="KH";0;Rechnungen!G4)


so werden die Zeilen sortierfähig. Die Anpassung der Formeln kanst du mit "Suchen/Ersetzen" einfach erledigen.
Nach diesen Anpassungen funktioniert das folgende Makro.
Das Makro kopiert die Formate und Inhalte aller Zeilen mit dem Wert 0 in Spalte W und löscht die Inhalte der Eingabe-Zellen.
Im Anschluss werden die Daten nach dem Namen sortiert, wodurch die Leerzeilen nach unten plaziert werden. Für die Sortierung kannst du natürlich auch eine der anderen Eingabespalten wählen.
Die bedingte Formatierung in Spalte W muss auch etwas ergänzt werden, damit leere Zeilen nicht "grün" angezeigt werden.
Hier deine Datei mit entsprechenden Anpassungen
https://www.herber.de/bbs/user/57282.xls
Gruß
Franz
Hier das Makro, das du deinem Button zuordnen muss.


Sub BezahlteRechnungen()
Dim wksRech As Worksheet, lngZeileR As Long
Dim wksBez As Worksheet, lngZeileB As Long
Const LastData = 39 'Letzte Zeile mit Formeln im Blatt Rechnungen
Set wksRech = Worksheets("Rechnungen")
Set wksBez = Worksheets("Bezahlt")
With wksRech
' im Blatt Rechnungen die Spalte W ab Zeile 4 auf Null prüfen, wenn in Spalte A _
eine Kundennummer eingetragen ist.
For lngZeileR = 4 To LastData
If .Cells(lngZeileR, 1)  "" _
And Application.WorksheetFunction.Round(.Cells(lngZeileR, 23), 2) = 0 Then
'Spalten A bis AA der Zeile kopieren
.Range(.Cells(lngZeileR, 1), .Cells(lngZeileR, 27)).Copy
With wksBez
'nächste freie Zeile in Spalte A im Blatt Bezahlt
lngZeileB = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
'Frmate udn Werte kopieren
.Cells(lngZeileB, 1).PasteSpecial Paste:=xlPasteFormats
.Cells(lngZeileB, 1).PasteSpecial Paste:=xlPasteValues
End With
'Inhalte der Eingabezellen in Zeile löschen
.Range(.Cells(lngZeileR, 1), .Cells(lngZeileR, 9)).ClearContents 'Spalte A bis I
.Range(.Cells(lngZeileR, 11), .Cells(lngZeileR, 16)).ClearContents 'Spalte K bis P
.Cells(lngZeileR, 18).ClearContents 'Spalte R
.Cells(lngZeileR, 20).ClearContents 'Spalte T
.Cells(lngZeileR, 22).ClearContents 'Spalte V
.Range(.Cells(lngZeileR, 26), .Cells(lngZeileR, 27)).ClearContents 'Spalte Z bis AA
End If
Next
'Zeilen Sortieren nach Spalte B um Leere Zeilen nach unten zu "schieben"
With .Range(.Cells(3, 1), .Cells(LastData, 27)) 'Datenzeilen
.Sort key1:=.Range("B1"), Order1:=xlAscending, _
header:=xlYes
End With
End With
End Sub


Anzeige
AW: Archivieren
02.12.2008 15:29:53
Paul
Hallo Franz,
danke für das super Macro, jetzt hätte ich noch eine letzte Bitte, da einige Leute mit der Tabelle arbeiten, würde ich diese gerne schützen, nur wenn die geschützt ist geht natürlich das Makro nicht mehr. Kann mann das Makro noch um den Startbefehl "Entsperren" und den letzen Schritt "Sperren" erweitern, dann glaube ich währe das Teil perfekt!
Gruß Paul
AW: Archivieren
02.12.2008 18:12:00
fcs
Hallo Robert,
mit Blattschutz schaut das ganze wie folgt aus, wobei beide Blätter geschützt werden. Ggf. anpassen, auch wenn Schutz inkl. Passwort erfolgen soll.
Gruß
Franz

Sub BezahlteRechnungen()
Dim wksRech As Worksheet, lngZeileR As Long
Dim wksBez As Worksheet, lngZeileB As Long
Const LastData = 39 'Letzte Zeile mit Formeln im Blatt Rechnungen
Set wksRech = Worksheets("Rechnungen")
Set wksBez = Worksheets("Bezahlt")
With wksRech
.Unprotect 'ggf .Unprotect Password:="XYZ"
wksBez.Unprotect 'ggf wksBez.Unprotect Password:="XYZ"
' im Blatt Rechnungen die Spalte W ab Zeile 4 auf Null prüfen, wenn in Spalte A _
eine Kundennummer eingetragen ist.
For lngZeileR = 4 To LastData
If .Cells(lngZeileR, 1)  "" _
And Application.WorksheetFunction.Round(.Cells(lngZeileR, 23), 2) = 0 Then
'Spalten A bis AA der Zeile kopieren
.Range(.Cells(lngZeileR, 1), .Cells(lngZeileR, 27)).Copy
With wksBez
'nächste freie Zeile in Spalte A im Blatt Bezahlt
lngZeileB = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
'Frmate udn Werte kopieren
.Cells(lngZeileB, 1).PasteSpecial Paste:=xlPasteFormats
.Cells(lngZeileB, 1).PasteSpecial Paste:=xlPasteValues
End With
'Inhalte der Eingabezellen in Zeile löschen
.Range(.Cells(lngZeileR, 1), .Cells(lngZeileR, 9)).ClearContents 'Spalte A bis I
.Range(.Cells(lngZeileR, 11), .Cells(lngZeileR, 16)).ClearContents 'Spalte K bis P
.Cells(lngZeileR, 18).ClearContents 'Spalte R
.Cells(lngZeileR, 20).ClearContents 'Spalte T
.Cells(lngZeileR, 22).ClearContents 'Spalte V
.Range(.Cells(lngZeileR, 26), .Cells(lngZeileR, 27)).ClearContents 'Spalte Z bis AA
End If
Next
'Zeilen Sortieren nach Spalte B um Leere Zeilen nach unten zu "schieben"
With .Range(.Cells(3, 1), .Cells(LastData, 27)) 'Datenzeilen
.Sort key1:=.Range("B1"), Order1:=xlAscending, _
header:=xlYes
End With
.Protect 'ggf .Protect Password:="XYZ"
wksBez.Protect 'ggf wksBez.Protect Password:="XYZ"
End With
End Sub


Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige