Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1484to1488
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

Löschen per VBA

Löschen per VBA
10.04.2016 11:59:59
Michael
Hallo Experten, das eine Problem wurde dank eurer Hilfe beseitig und nun tut sich dadurch ein anderes auf. "Wut"
Ich habe Tabellenblatt1(Stammdaten) und Tabellenblatt9(Geburtstag)
Mein Prolem ist, alles was ich in Tabellenblatt1(Stammdaten) an Mitarbeitern neu anlege wird auch Tabellenblatt9(Geburtstag) hinzugefügt! Von Tabellenblatt9(Geburtstag) wird nun meine Listbox Geburtstag befüllt. klappt auch super!
Jetzt möchte ich aber, wenn ein Mitarbeiter in Tabellenblatt1(Stammdaten) gelöscht wird, dieser auch in dem Tabellenblatt9(Geburtstag) gelöscht wird, da ich sonst Laufzeitfehler 2147467259 (Nicht näher bezeichneter Fehler)bekomme und unten der Befehl ListGeb.Clear gelb markiert wird. Habe versucht unten anzupassen, hat aber leider nicht funktioniert.
Wär für eure Hilfe sehr Dankbar.
Gruss Michael
'############################ Mitarbeiter löschen ######################################################################################
Private Sub cmdLöschen_Click()
Dim lZeile As Long
If MsgBox("Möchtest du den Mitarbeiter wirklich löschen?", vbYesNo) = vbNo Then
Unload Me
FormularMitarbeiter.Show
End If
'Wenn kein Datensatz in der ListBox markiert wurde, wird die Routine beendet
If ListBox1.ListIndex = -1 Then Exit Sub
'Zum Löschen benötigen wir die Zeilennummer des ausgewählten Datensatzes
lZeile = 2 'Start in Zeile 2, Zeile 1 sind ja die Überschriften
'Schleife solange etwas in der ersten Spalte in Tabelle 1 drin steht
Do While Trim(CStr(Tabelle1.Cells(lZeile, 3).Value))  ""
'Datensatz Name Spalte mit selektiertem Eintrag der ListBox vergleichen
If ListBox1.Text = Trim(CStr(Tabelle1.Cells(lZeile, 3).Value)) Then
'Eintrag gefunden, die ganze Zeile wird nun gelöscht
Tabelle1.Rows(CStr(lZeile & ":" & lZeile)).Delete
'Die ListBox muss nun neu geladen werden!
Call UserForm_Initialize
If ListBox1.ListCount > 0 Then ListBox1.ListIndex = 0
Exit Do 'Vorzeitiges Ende, da der Datensatz schon gefunden ist
End If
lZeile = lZeile + 1 'Nächste Zeile bearbeiten
Loop
'Mitarbeiter aus Geburtstagsliste löschen
If MsgBox("Möchtest du den Mitarbeiter wirklich löschen?", vbYesNo) = vbNo Then
Unload Me
FormularMitarbeiter.Show
End If
'Wenn kein Datensatz in der ListBox markiert wurde, wird die Routine beendet
If ListBox1.ListIndex = -1 Then Exit Sub
'Zum Löschen benötigen wir die Zeilennummer des ausgewählten Datensatzes
lZeile = 2 'Start in Zeile 2, Zeile 1 sind ja die Überschriften
'Schleife solange etwas in der ersten Spalte in Tabelle 1 drin steht
Do While Trim(CStr(Tabelle1.Cells(lZeile, 3).Value))  ""
'Datensatz Name Spalte mit selektiertem Eintrag der ListBox vergleichen
If ListBox1.Text = Trim(CStr(Tabelle9.Cells(lZeile, 5).Value)) Then
'Eintrag gefunden, die ganze Zeile wird nun gelöscht
Tabelle9.Rows(CStr(lZeile & ":" & lZeile)).Delete
'Die ListBox muss nun neu geladen werden!
Call UserForm_Initialize
If ListBox1.ListCount > 0 Then ListBox1.ListIndex = 0
Exit Do 'Vorzeitiges Ende, da der Datensatz schon gefunden ist
End If
lZeile = lZeile + 1 'Nächste Zeile bearbeiten
Loop
'Liste Stammdaten neu sortieren
loLetzte = Sheets("Stammdaten").Cells(Rows.Count, 3).End(xlUp).Row
ActiveWorkbook.Worksheets("Stammdaten").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Stammdaten").Sort.SortFields.Add Key:=Range( _
"C2:C" & loLetzte), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Stammdaten").Sort
.SetRange Range("A2:W" & loLetzte)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Unload Me
FormularMitarbeiter.Show
End Sub

'###################################### Geburts-und Jubilarstage aus Geburtstage In Listbox einlesen ###########################################################################
ListGeb.Clear
Dim breite(4 To 11) As Single
Dim spaltenbreite As String
For i = 4 To 11
breite(i) = Sheets(1).Columns(i).ColumnWidth * 6 '5.075 ##Spaltenbreite angepasst##
spaltenbreite = spaltenbreite & breite(i) & ";"
Next
With Me.ListGeb
.ColumnCount = 8
.ColumnHeads = True
.RowSource = "Geburtstag!D2:K500" '##Geburtstagsliste in Userform einlesen##
.ColumnWidths = spaltenbreite
ListGeb.ColumnWidths = "2,5cm;2,5cm;2,5cm;1,3cm;3cm;2,5cm;3,2cm;3cm"
End With
End Sub

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

Betreff
Datum
Anwender
Anzeige
AW: Löschen per VBA
10.04.2016 14:20:04
Daniel
Hi
du hast zum Löschen auf dem zweiten Tabellenblatt (Tabelle9) einfach den Code zum Löschen auf dem ersten Tabellenblatt (Tabelle1) kopiert.
das funktioniert so nicht. Zum einen hast du die Tabellenblattbezeichnung nicht überall von Tabelle1 auf Tabelle9 geändert.
zum Zweiten versuchst du auch beim zweiten Löschen den zu löschenden Namen aus der Listbox zu lesen.
das kann nicht funktionieren weil du ja schon beim ersten Löschen die Listbox aktualisiert hast und damit dieser Name in der Listbox nicht mehr stehen kann.
im Prinzip solltest du das so programmieren:
Private Sub cmdLöschen_Click()
Dim lZeile As Long
Dim Mitarbeiter
If MsgBox("Möchtest du den Mitarbeiter wirklich löschen?", vbYesNo) = vbNo Then
Unload Me
FormularMitarbeiter.Show
End If
'Wenn kein Datensatz in der ListBox markiert wurde, wird die Routine beendet
If Listbox1.ListIndex = -1 Then Exit Sub
Mitarbeiter = Listbox1.Text
'--- Löschen Zeilen in Tabelle 1
'Zum Löschen benötigen wir die Zeilennummer des ausgewählten Datensatzes
lZeile = 2 'Start in Zeile 2, Zeile 1 sind ja die Überschriften
'Schleife solange etwas in der ersten Spalte in Tabelle 1 drin steht
Do While Trim(CStr(Tabelle1.Cells(lZeile, 3).Value))  ""
'Datensatz Name Spalte mit selektiertem Eintrag der ListBox vergleichen
If Mitarbeiter = Trim(CStr(Tabelle1.Cells(lZeile, 3).Value)) Then
'Eintrag gefunden, die ganze Zeile wird nun gelöscht
Tabelle1.Rows(CStr(lZeile & ":" & lZeile)).Delete
Exit Do 'Vorzeitiges Ende, da der Datensatz schon gefunden ist
End If
lZeile = lZeile + 1 'Nächste Zeile bearbeiten
Loop
'Mitarbeiter aus Geburtstagsliste löschen
'--- Löschen Zeile in Tabelle 9
'Zum Löschen benötigen wir die Zeilennummer des ausgewählten Datensatzes
lZeile = 2 'Start in Zeile 2, Zeile 1 sind ja die Überschriften
'Schleife solange etwas in der ersten Spalte in Tabelle 1 drin steht
Do While Trim(CStr(Tabelle9.Cells(lZeile, 3).Value))  ""
'Datensatz Name Spalte mit selektiertem Eintrag der ListBox vergleichen
If Mitarbeiter = Trim(CStr(Tabelle9.Cells(lZeile, 5).Value)) Then
'Eintrag gefunden, die ganze Zeile wird nun gelöscht
Tabelle9.Rows(CStr(lZeile & ":" & lZeile)).Delete
Exit Do 'Vorzeitiges Ende, da der Datensatz schon gefunden ist
End If
lZeile = lZeile + 1 'Nächste Zeile bearbeiten
Loop
'Liste Stammdaten neu sortieren
loLetzte = Sheets("Stammdaten").Cells(Rows.Count, 3).End(xlUp).Row
ActiveWorkbook.Worksheets("Stammdaten").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Stammdaten").Sort.SortFields.Add Key:=Range( _
"C2:C" & loLetzte), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Stammdaten").Sort
.SetRange Range("A2:W" & loLetzte)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'Die ListBox muss nun neu geladen werden!
Call UserForm_Initialize
If Listbox1.ListCount > 0 Then Listbox1.ListIndex = 0
Unload Me
FormularMitarbeiter.Show
End Sub
Code ist nicht getestet, da ich zum Testen auch die Datei brauche und nicht nur einen Codeausschnitt.
Gruß Daniel

Anzeige
AW: Löschen per VBA
10.04.2016 19:20:21
Michael
Hallo Daniel,
klappt leider nicht.
Ich habe ne Datei auf dem Server mit der du es testen kannst.
Hier der Link:
https://www.herber.de/bbs/user/104794.xlsm
Gruss Michael

AW: Löschen per VBA
10.04.2016 20:28:18
Daniel
Hi
auf eine Listbox, die mit .Rowsource mit einem Zellbereich verknüpft ist, kannst du den Befehl.Clear nicht anwenden.
Da musst du entweder die .RowSource-Verknüpfung löschen, oder den vernküpften Zellbereich leeren.
Gruß Daniel

AW: Löschen per VBA
10.04.2016 20:59:39
Michael
Hallo Daniel
Bin leider Anfänger und verstehe nicht soviel von VBA. Könntest du mir das genauer erklären?
Gruss Michael

Anzeige
AW: Löschen per VBA
10.04.2016 21:20:17
Michael
Habe das clear einfach rausgenommen, ist ja eigendlich auch logisch das er den Name nicht findet wenn ich ihn vorher lösche. Jetzt klappt es.
Dank deiner Hilfe Daniel bin ich zur Lösung gekommen!
Vielen Dank und noch einen schönen Abend

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige