Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Zeile anlegen oder löschen in zweiter Tabelle

Zeile anlegen oder löschen in zweiter Tabelle
18.10.2019 10:18:57
Christian
Hallo liebe Leute,
leider wurde mein alter Thread "userform 1:n Beziehung" geschlossen, deshalb hier ein Neuer.
Oberschlumpf hatte mir geholfen, eine Teilnehmererfassung mit einem userform zu realisieren.
Danke nochmal!
Nun geht es an die Berechnung und Ausgabe der Daten.
Die Datei findet Ihr hier: https://www.herber.de/bbs/user/132574.zip
In der Tabelle "Teilnehmer" befinden sich die Teilnehmerdaten.
In "Urlaub" erfasse ich den genommenen Urlaub.
In "Urlaub_kalkulation" wird der Urlaub berechnet.
Meine VBA-Kenntnisse sind sehr bescheiden, deshalb finde ich für folgende Aufgaben keine eigenen Lösungen.
Wenn ich einen neuen Teilnehmer anlege, muss in "Urlaub_kalkulation" eine neue Zeile angelegt werden.
Bei manuellem einfügen einer neuen Zeile, werden alle Daten richtig übernommen und berechnet.
Wenn ein Teilnehmer ausscheidet, möchte ich ihn archivieren können.
Die Daten sollen aus den Tabellen gelöscht werden und in Tabellen übertragen werden, die als Archiv dienen.
So könnte man später auch einen Teilnehmer reaktivieren.
Für Tipps, wie ich diese Aufgaben lösen kann, wäre ich sehr dankbar.
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeile anlegen oder löschen in zweiter Tabelle
20.10.2019 17:01:37
Piet
Hallo Christian
zum Theam Daten Archivieren kann ich dir evtl. eime Lösung anbieten.
Würde mich freuen wenn es so klappt ...
https://www.herber.de/bbs/user/132617.xlsm
mfg Piet
AW: Zeile anlegen oder löschen in zweiter Tabelle
21.10.2019 11:32:10
Christian
Hallo Piet,
danke für Deine Mühe.
Wenn ich im Tabellenblatt einen Key anklicke, egal welchen, und dann den Button betätige, kommt immer die Meldung: Der Datensatz ist bereits archiviert.
Die Archivtabelle habe ich daraufhin geleert. Leider weiterhin diese Fehlermeldung.
Dann habe ich den Button in das userform "form_Teilnehmeruebersicht" eingebunden. Auch der selbe Fehler.
Magst nochmal schauen, woran das liegen kann?
Sonnige Grüße
Christian
Anzeige
AW: Zeile anlegen oder löschen in zweiter Tabelle
21.10.2019 16:55:32
Piet
Hallo Christian
Sorry, ich hatte dir das Programm nicht erklaert. So funktioniert es auch nicht' Mein Fehler.
Wenn du im Archiv die Key Nr mit Namen + Vornamen angibst wird genau dieser Datensatz archiviert!
Das Makro prüft ob dieser Datensatz exisitiert. Kannst du damit leben, oder muss man das Makro aendern?
mfg Piet
Anzeige
AW: Zeile anlegen oder löschen in zweiter Tabelle
21.10.2019 16:57:51
Piet
Nachtrag
Der gelöschte Datensatz wird genau ab der Zeile archiviert wo die Key Nr. steht.
Ob du zwischen den Datensaetzen eine Lerrzeile laesst ist deine Entscheidung.
mfg Piet
AW: Zeile anlegen oder löschen in zweiter Tabelle
22.10.2019 13:56:10
Christian
Dank Dir für Deine Zeit, Piet.
Leider läuft es nicht so, wie es soll.
Beim ersten Versuch hat das Makro die Zeile in "Teilnehmer" gelöscht und richtig in "Archiv" eingetragen.
Ich habe es mit der nächsten Zeile versucht
Bei diesem und folgenden Versuchen gab es nur noch Chaos.
Ich kopiere Key, Vorname und Name nach "Archiv".
Klicke den Button.
Daraufhin bekomme ich jetzt einen Laufzeitfehler 13 "Typen unverträglich".
Die Zeile bleibt in "Teilnehmer" stehen.
Ins Archiv werden nur noch die Einträge aus "Urlaub" kopiert.
"Urlaub" braucht nicht archiviert zu werden.
Wichtig sind nur die Daten aus "Teilnehmer", damit ich sie reaktivieren kann, wenn der Teilnehmer eine neue Massnahme bei uns anfängt.
Kann das mit einem anderen Fehler zusammenhängen, der seit ein paar Tagen auftritt?
Wenn ich im userform "Teilnehmererfassung" einen neuen TN anlege, bekomme ich neuerdings auch einen Laufzeitfehler 13. Ich habe keine Idee, warum. Bisher lief das form einwandfrei.
Wenn Du das testen möchtest, musst Du Vorname, Name und Geb-Datum erfassen. Dann in Kontoinhaber den Eintrag bestätigen. Sonst kannst Du nicht speichern.
Sonnige Grüße
Christian
Anzeige
AW: Zeile anlegen oder löschen in zweiter Tabelle
25.10.2019 09:15:57
Christian
Das hat leider auch nichts gebracht, Piet.
Der erste Datensatz wird sauber kopiert und gelöscht.
Im Folgenden werden die Urlaubsdaten, passend zum Key, übernommen, was ja gar nicht gewollt ist. Die Daten werden dann auch nicht aus Teilnehmer gelöscht.
Mit dem Key habe ich sowieso meine Probleme, da er ja einmalig sein muss.
Wenn ich einen Teilnehmer lösche, entfällt damit auch der dazugehörige Key. Passiert das mit dem letzten Eintrag, wird dieser Key natürlich neu vergeben.
Kann man das vielleicht über eine Variable steuern, die den letzten Maxwert irgendwo ablegt?
Wie der Laufzeitfehler ausgelöst wird, habe ich inzwischen herausgefunden.
Er tritt auf, wenn ein Datensatz nicht vollständig, oder mit falschen Werten ausgefüllt wurde.
Dir ein erholsames Wochenende!
Viele gute Grüße
Christian
Anzeige
AW: Zeile anlegen oder löschen in zweiter Tabelle
24.10.2019 21:58:54
Piet
Hallo Christian
bitte tausche den Code im Modul1 mal gegen den neuen Code aus. Ich befürchte aber es bleibt beim Chaos? Ein Problem bei der KeyNr ist, das sie per Formel erzeugt wird. Beim löschen einer Zeile veraendert sie sich automatisch. D.h., sie müsste um das zu vermeiden als "statischer Wert" in der Zelle stehen.
mfg Piet
Sub Teilnehmer_archivieren()
Dim lloRow As Integer, lSpa As Integer
Dim Zeile As Integer, KeyNr As Integer
If ActiveCell.Row = 1 Then Exit Sub
Zeile = ActiveCell.Row
KeyNr = Cells(Zeile, 1).Value
lSpa = Cells(1, 100).End(xlToLeft).Column  'LastSpalte
If KeyNr = Empty Then MsgBox "Es wurde keine KeyNr ausgewählt!": Exit Sub
If Cells(Zeile, 4)  "" Then MsgBox "Der Datensatz ist bereits Archiviert!": Exit Sub
With Sheets("Teilnehmer")
For lloRow = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
If .Cells(lloRow, 1).Value = KeyNr Then
If .Cells(lloRow, 2) = Sheets("Archiv").Cells(Zeile, 2) And _
.Cells(lloRow, 3) = Sheets("Archiv").Cells(Zeile, 3) Then
'KeyNr: Formel zuerst in Wert umwandeln!
.Cells(lloRow, 1).Value = .Cells(lloRow, 1).Value
.Cells(lloRow, 1).Resize(1, lSpa).Cut Cells(Zeile, 1)
.Cells(lloRow, 1).Resize(1, lSpa).Delete Shift:=xlUp
End If
End If
Next
End With
With Sheets("Urlaub")
Zeile = Zeile + 1
For lloRow = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
If .Cells(lloRow, 1).Value = KeyNr Then
'KeyNr: Formel zuerst in Wert umwandeln!
.Cells(lloRow, 1).Value = .Cells(lloRow, 1).Value
.Cells(lloRow, 1).Resize(1, 5).Cut Cells(Zeile, 1)
.Cells(lloRow, 1).Resize(1, 5).Delete Shift:=xlUp
lloRow = lloRow - 1
Zeile = Zeile + 1
End If
Next
End With
End Sub

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige