Hallo Alle Miteinander,
ich versuche gerade eine wunderbar in VBA programmierte Exceltabelle (nicht von mir programmiert, aber meine Tabelle und von mir ergänzt)mit 16 Tabellenblättern noch weiter zu ergänzen und komme nicht weiter.
In Tabellenblatt 1 „wksEL = Worksheets("Einladung")“ stehen u.a. Adressdaten Name, Straße etc.
in Tabellenblatt 16 „wksSPQUIT = Worksheets("Sp_Quitt")“ brauche ich nur bestimmte Eintragungen aus dem Tabellenblatt „Einladung“ um daraus einen Serienbrief zu generieren.
Die Angaben in den einzelnen Zellen des Tabellenblattes „Einladung“ werden immer wieder ergänzt oder auch geändert,es ist eine Tabelle für Zu- und Absagen zu Veranstaltungen einer Hilfsorganisation für hilfsbedürftige Kinder.
Bestimmte Zelleinträge aus Tabellenblatt 1 sollen übertragen werden wenn gezahlt wurde:
„If UCase(.Cells(lngZ, 6).Value) > "0" “, usw. das klappt.
aber dazu gibt es zwei Bedingungen:
Wenn gezahlt wurde und keine andere Adresse in der Zusage (die kommt per Fax) angegeben wurde
können die Daten so in das Tabellenblatt „Worksheets("Sp_Quitt")“ übernommen werden,
wie diese im Tabellenblatt „Worksheets("Einladung")“ schon stehen
If UCase(.Cells(lngZ, 6).Value) > "0" And .Cells(lngZ, 25).Value = "" Then
wksSPQUIT.Cells(lngLastRowSPQUIT, 3).Value = .Cells(lngZ, 6).Value 'bez. am
wksSPQUIT.Cells(lngLastRowSPQUIT, 4).Value = .Cells(lngZ, 5).Value 'Betrag
wksSPQUIT.Cells(lngLastRowSPQUIT, 7).Value = .Cells(lngZ, 9).Value 'Vorname
wksSPQUIT.Cells(lngLastRowSPQUIT, 6).Value = .Cells(lngZ, 10).Value 'Nachname
usw. das klappt auch, ist aber leider noch nicht das was ich brauche.
Wenn ich andere Adressdaten z.B. eine andere Straße oder Firma bekomme, mach ich einen Eintrag “X“ im Tabellenblatt „Worksheets("Einladung")“
in der Spalte „Andere Adresse“ und übernehme nur die Einträge aus den Spalten zum Namen ohne Adressdaten
bzw. Wenn kein “X” in der Spalte „Andere Adresse“ steht werden alle Einträge übernommen das geht auch
'Sp.-Quitt
If UCase(.Cells(lngZ, 6).Value) > "0" And .Cells(lngZ, 25).Value = "X" Then
wksSPQUIT.Cells(lngLastRowSPQUIT, 3).Value = .Cells(lngZ, 6).Value 'bez. am
wksSPQUIT.Cells(lngLastRowSPQUIT, 4).Value = .Cells(lngZ, 5).Value 'Betrag
wksSPQUIT.Cells(lngLastRowSPQUIT, 7).Value = .Cells(lngZ, 9).Value 'Vorname
wksSPQUIT.Cells(lngLastRowSPQUIT, 6).Value = .Cells(lngZ, 10).Value 'Nachname
ElseIf UCase(.Cells(lngZ, 6).Value) > "0" And .Cells(lngZ, 25).Value = "" Then
wksSPQUIT.Cells(lngLastRowSPQUIT, 3).Value = .Cells(lngZ, 6).Value 'bez. am
wksSPQUIT.Cells(lngLastRowSPQUIT, 4).Value = .Cells(lngZ, 5).Value 'Betrag
wksSPQUIT.Cells(lngLastRowSPQUIT, 7).Value = .Cells(lngZ, 9).Value 'Vorname
wksSPQUIT.Cells(lngLastRowSPQUIT, 6).Value = .Cells(lngZ, 10).Value 'Nachname
usw. das klappt.
ABER die neuen Adressdaten werden per Hand in das Tabellenblatt Worksheets("Sp_Quitt")“
in die leeren Zellen für Straße, Ort etc eingetragen, denn in Tabelle 1 MÜSSEN die Adressdaten erhalten bleiben.
Bei der nächsten Abfrage durch das Makro werden die händisch eingetragenen Werte
wieder gelöscht und die sollen eigentlich erhalten bleiben.
Mir ist schon klar, dass die händisch eingetragenen Werte überschrieben werden,
weil ja in der Bedingung steht, „ Value = "X" Then“
nur bestimmte Zellen übernehmen aus Tabellenblatt „Einladung“, auf das sich die Formel bezieht.
Ich bräuchte hier also einen Befehl, der die händisch gemachten Einträge im Tabellenblatt „Sp_Quitt“
zu dem betreffenden Namen beibehält aber das Tabellenblatt „SP-Quitt“ muss trotzdem mit den neuen Daten,
die im Tabellenblatt „Einladung“ zu anderen Namen gemacht wurden, aktualisiert werden.
Ergänzen sollte ich vielleicht noch, dass es zu den Tabellenblättern auch noch einen Befehl gibt „Altdaten löschen“,
wksSPQUIT.Range("C3:K" & wksSPQUIT.Cells(Rows.Count, 2).End(xlUp).Row + 3).ClearContents
der müsste dann bestimmt auch angepasst werden, oder?
Die Sortierung der Liste funktioniert leider auch nicht:
'### Listen sortieren ###
'Sp_Quitt
With wksSPQUIT.Range("A3:K" & wksSPQUIT.Cells(Rows.Count, 1).End(xlUp).Row + 2)
.Sort Key1:=.Range("C3"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End With
Kann man das mit VBA lösen?
Ich wäre für eine Lösung sehr dankbar, da ich die Tabelle ständig benutze, für verschiedene Veranstaltungen
der Hilfsorganisation, immer mit anderen Daten in den Zellen, aber immer das Gleiche Prozedere.
Vielen Dank im Voraus
liebe Grüße
Melanie
|