Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Zeilen suchen und löschen aus zwei ListObject

Zeilen suchen und löschen aus zwei ListObject
02.05.2024 22:34:29
TomTom
Moin Moin,

ich hab da ein bescheidenes Problem. Ich habe schon, meiner Meinung nach, alles mögliche probiert. Komme aber zu keiner Lösung.
Aber kommen wir gleich zum Punkt. Folgendes Szenario:

Ich habe eine Mitarbeiterliste... Aufgeteilt in eine Gesamtliste und ein paar Abteilungslisten. Trägt man in die Gesamtliste einen MA ein, wird er automatisch mit in die Abteilung eingetragen und andersrum genauso. Nun möchte ich die Funktion "MA löschen" einfügen, dies soll genauso funktionieren. Lösche ich den MA aus der Abteilung wird er ebenso aus der Gesamtliste gelöscht. Wird er aus der Gesamtliste gelöscht wird er aus der Abteilung gelöscht.
Bleiben wir bei Gesamtliste "ws01_gesamt" und Abteilung1 "ws02_Abteilung1". In beiden Worksheets sind zwei ListObject-Tabellen, "Tabelle01" und "Tabelle02".
Jeder MA besitzt eine lfd-Nr (1, 2, 3, usw), die ist in beiden Abteilungen gleich und liegt in der Spalte 1 der Tabellen.
Nun ist meine Idee: MA anklicken, Button "MA löschen" drücken, aus der Zeile wird Spalte 1 ausgelesen, in der zweiten Tabelle wird in der Spalte 1 die entsprechende lfd-Nr gesucht und die gesamte Zeile gelöscht, ebenso wird die ausgewählte Zeile in der ersten Tabelle gelöscht.

Mein letzter Versuch war folgender Code:

Sub MA_Loeschen()

Dim Wert As String
Dim listobj1 As ListObject
Dim listObj2 As ListObject
Dim gefunden As Range

Set listobj1 = ws11_Gesamt.ListObjects(1)
Set listObj2 = ws02_Abteilung1.ListObjects(1)

Wert = listobj1.DataBodyRange(ActiveCell.Row, 1).Value

Set gefunden = listObj2.ListColumns(1).DataBodyRange.Find(Wert)

If Not gefunden Is Nothing Then
gefunden.EntireRow.Delete
End If

End Sub


Leider funktioniert dies nicht...
Ich bin noch recht anfänglich in der VBA Geschichte drin und hoffe ihr könnt mir helfen meinen Fehler zu finden oder mir eine komplett neue Herangehensweise zu erläutern.

Vielen Dank im voraus
MfG TomTom
Anzeige

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeilen suchen und löschen aus zwei ListObject
02.05.2024 23:04:57
Onur
"Leider funktioniert dies nicht... " ist hier genauso hilfreich wie beim Arzt der Satz "ich bin krank".
AW: Zeilen suchen und löschen aus zwei ListObject
02.05.2024 23:30:08
ralf_b
basierend auf deinen Angaben, hier mal ein Versuch.

Sub MA_Loeschen()


Dim Wert As String
Dim listobj1 As ListObject
Dim listObj2 As ListObject
Dim gefunden

Set listobj1 = ws11_Gesamt.ListObjects(1)
Set listObj2 = ws02_Abteilung1.ListObjects(1)

If ActiveSheet.Name = ws11_Gesamt.Name Then
Wert = ws11_Gesamt.Cells(ActiveCell.Row, 1)
ElseIf ActiveSheet.Name = ws02_Abteilung1.Name Then
Wert = ws02_Abteilung1.Cells(ActiveCell.Row, 1)
Else
Exit Sub
End If

gefunden = Application.Match(Wert, listobj1.DataBodyRange, 0)
If IsNumeric(gefunden) Then
listobj1.ListRows(gefunden).Delete
End If

gefunden = Application.Match(Wert, listObj2.DataBodyRange, 0)
If IsNumeric(gefunden) Then
listObj2.ListRows(gefunden).Delete
End If

End Sub
Anzeige
AW: Zeilen suchen und löschen aus zwei ListObject
03.05.2024 12:06:24
Trägheit
Ohne mir die anderen Beiträge durchgelesen zu haben:

Bei dir ist das Problem vorhanden, dass der Zeilenindex, den ActiveCell.Row liefert, absolut ist.
Du benötigst jedoch den Index relativ zur ersten Datenzeile.


Dim relativeRow As Long

'...

relativeRow = ActiveCell.Row - listobj1.DataBodyRange.Row + 1 ' ACHTUNG, Fehlerquelle: Das Ergebnis könnte 0 oder negativ sein
Wert = listobj1.DataBodyRange(relativeRow, 1).Value

Set gefunden = listObj2.ListColumns(1).DataBodyRange.Find(Wert, , xlValues, xlWhole, xlByColumns, MatchCase:=False)


Dann sollte er den Eintrag finden.

Grüße
Anzeige
AW: Zeilen suchen und löschen aus zwei ListObject
02.05.2024 23:53:58
TomTom
Vielen dank für deine Hilfe, leider funktioniert dieser Versuch auch nicht.

"Dim gefunden As Range"? Hier hast du nichts definiert, ich habe dort Range ausprobiert. Klappt leider auch nicht.

"gefunden = Application.Match(Wert, listobj1.DataBodyRange, 0)"
Zeigt er mir an, hier habe ich auch anstelle einer 0 auch eine 1 getestet... Keine Veränderung...

Anzeige
AW: Zeilen suchen und löschen aus zwei ListObject
02.05.2024 23:55:18
Onur
Wir können hier weiter herumraten oder du postest endlich eine Datei dazu.....
AW: Zeilen suchen und löschen aus zwei ListObject
03.05.2024 00:47:32
TomTom
Hallo Onur,

entschuldige meine Unwissenheit, in diesem Forum bin ich noch nicht lange.
Und mit dem Thema VBA befasse ich mich auch erst seit diesem Jahr. Bin also noch ganz frisch im Rennen.

Ich habe jetzt eine Beispieldatei erstellt, in der Hoffnung das ihr damit etwas anfangen könnt.

https://www.herber.de/bbs/user/169225.xlsm

Vielen Dank für eure Bemühungen.
Anzeige
AW: Zeilen suchen und löschen aus zwei ListObject
03.05.2024 01:26:15
Onur
Weisst du eigentlich, was
Wert = ws11_Gesamt.Cells(ActiveCell.Row, 1)

GENAU bedeutet???
AW: Zeilen suchen und löschen aus zwei ListObject
03.05.2024 01:38:30
Onur
Und was
ListColumns(1)

GENAU bedeutet ?
AW: Zeilen suchen und löschen aus zwei ListObject
03.05.2024 08:54:51
TomTom
Guten Morgen Onur,

ja dies weiß ich...
Ich habe anhand eurer Tipps mein Problem nun gefunden. (Siehe Antwort an Ralf).

Ich danke auch dir für die Mühe und Hilfe.

MfG
Tom
Anzeige
AW: Zeilen suchen und löschen aus zwei ListObject
03.05.2024 00:03:37
ralf_b
da fehlten noch die listcolumns

gefunden = Application.Match(Wert, listobj1.ListColumns(1).DataBodyRange, 0)

If IsNumeric(gefunden) Then
listobj1.ListRows(gefunden).Delete
End If

gefunden = Application.Match(Wert, listObj2.ListColumns(1).DataBodyRange, 0)
If IsNumeric(gefunden) Then
listObj2.ListRows(gefunden).Delete
End If
Anzeige
AW: Zeilen suchen und löschen aus zwei ListObject
03.05.2024 00:10:22
ralf_b
"gefunden" darf keine Range sein, match() gibt entweder eine Zahl oder einen Text zurück. Find() gibt eine Range oder Nohting zurück .
AW: Zeilen suchen und löschen aus zwei ListObject
03.05.2024 01:13:38
TomTom
Danke ralf, so lernt man was dazu.

Nur leider funktioniert es immer noch nicht.
Die ListColumns habe ich hinzugefügt.
Er geht den Code nun durch, aber gelöscht wird weiterhin nichts.

Im Lokal-Fenster wir mir bei "gefunden = Application.Match(Wert, listobj1.ListColumns(1).DataBodyRange, 1)" Fehler 2042 angezeigt.
Hilft dir das weiter?


Vielen Dank für deine Mühe.
Anzeige
AW: Zeilen suchen und löschen aus zwei ListObject
03.05.2024 08:33:36
ralf_b
so ohne Beispieldatei ist das nichts. Nun habe ich meine kleinen Fehler( danke onur :) ) gefunden und mir dann was ganz Anderes ausgedacht
dieses Makro kannst/solltest du für beide Button benutzen.

Aber gundsätzlich sollte man keine Datensätze löschen. Man kann sie auch als gelöscht markieren.



Sub MA_LoeschenV2()

Dim Wert&, i&
Dim sSuche$
Dim objtmp As ListObject
Dim gefunden, arrloesch

'prüfen ob sich activecell in einem listobject befindet
Set objtmp = ActiveCell.ListObject
'abbruch wenn nicht
If objtmp Is Nothing Then Exit Sub

'Suchtext und array erzeugen
arrloesch = Array(ws11_Gesamt.ListObjects(1), ws02_Abteilung1.ListObjects(1))
sSuche = Join(arrloesch, "|")

'prüfen ob Tabelle in frage kommt und ermitteln der lfdnr
'wenn im text sSuche der tabellenname enthalten ist
If InStr(1, sSuche, objtmp.Name) > 0 Then
Wert = Cells(ActiveCell.Row, objtmp.ListColumns(1).Range.Column)
Else
Exit Sub
End If

'zeilen löschen in allen Tabellen, die im array zusammengefasst wurden.
For i = LBound(arrloesch) To UBound(arrloesch)
gefunden = Application.Match(Wert, arrloesch(i).ListColumns(1).DataBodyRange, 0)
If IsNumeric(gefunden) Then
arrloesch(i).ListRows(gefunden).Delete
End If

Next

End Sub
Anzeige
AW: Zeilen suchen und löschen aus zwei ListObject
03.05.2024 08:36:56
ralf_b
nur der Erklärung wegen
es macht einen Unterschied ob die Zahl eine Zahl 1 ist oder ein Text "1"
Wert = Cells(ActiveCell.Row, 1) 'das ist natürlich murks, denn Spalte 1 ist nicht erste Spalte der Tabelle
Wert = Cells(ActiveCell.Row, listobj1.ListColumns(1).Range.Column)

AW: Zeilen suchen und löschen aus zwei ListObject
03.05.2024 08:51:33
TomTom
Guten Morgen Ralf,

Vielen vielen dank für deine Hilfe.
Ich habe mich heut morgen nochmal drangesetzt, eure Tipps zu Herzen genommen und daraufhin meinen Fehler endlich gefunden.
Hier mein, nun endlich, funktionierender Code:

    Dim Wert As String

Dim lo1 As ListObject
Dim lo2 As ListObject
Dim gefunden As Boolean
Dim i As Long

Set lo1 = ws11_Gesamt.ListObjects(1)
Set lo2 = ws02_Abteilung1.ListObjects(1)

Wert = CDbl(lo1.DataBodyRange(ActiveCell.Row - lo1.HeaderRowRange.Row, 1).Value)

gefunden = False
For i = 1 To lo2.ListRows.Count

If CDbl(lo2.DataBodyRange(i, 1).Value) = Wert Then
lo2.ListRows(i).Delete
gefunden = True
Exit For
End If
Next i

If gefunden Then
lo1.ListRows(ActiveCell.Row - lo1.HeaderRowRange.Row).Delete
Else
MsgBox "Der MA wurde in der Abteilung nicht gefunden"
End If


Mfg
Tom
Anzeige
AW: Zeilen suchen und löschen aus zwei ListObject
03.05.2024 09:25:39
ralf_b
du solltest schon prüfen ob die ActiveCell überhaupt im Listobject drin ist. denn auf so einen Button kann man immer drücken.
ich finde du solltest lieber meine Lösung nutzen und noch ein paar aussagefähige Fehlermeldungen einpflegen :)
;

Forumthreads zu verwandten Themen

Anzeige
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