Datensatz suchen und mit hilfe vba Makro löschen

Hallo liebe Helfer,

habe eine Bitte, ich habe in der Tabelle bzw. Tabellenblatt Eingabemaske in der Zelle A3 einen Bereich, wo ich eine Objektnr. eingeben kann. Nun muss ich ein Makro erstellen, bzw. mit VBA Code verweisen das des jetzt in den Tabellen Flächen, Objekt und Sonstige-Daten nach diesem Datensatz gesucht wird, und wenn er gefunden wird soll die Ganze Zeile gelöscht werden.
Dh. wenn in der Tabelle Eingabemaske Zelle A3 die Objektnr. 32 steht, dann drücke ich auf den Löschbutton nun muss das Makro Starten und in den Tabellen Flächen, Objekt und Sonstige-Daten nach der Zelle mit der Objektnr. 32 suchen wenn er diese findet, soll er sie dann Löschen.

In der Tabelle Flächen und Objekt ist die Objektnr. in Spalte A und in der Tabelle Sonstigen-Daten ist die Objektnr. in der Spalte G. Ich weiß nicht ob diese info etwas hilft.

Ich bin ein Anfänger und deswegen hoffe ich, dass ihr mir helfen könnte.

Mit freundlichen Grüßen und vielen Dank im Voraus

Manu Haller

Hallo liebe Helfer,

Hallo Manu,

habe eine Bitte, ich habe in der Tabelle bzw. Tabellenblatt
Eingabemaske in der Zelle A3 einen Bereich, wo ich eine
Objektnr. eingeben kann. Nun muss ich ein Makro erstellen,

Also: Quelle ist Blatt „Eingabemaske“, Zelle „A3“. Hey, die Tabellennamen kommen mir irgendwie bekannt vor…

bzw. mit VBA Code verweisen das des jetzt in den Tabellen
Flächen, Objekt und Sonstige-Daten nach diesem Datensatz

Also Zielblätter wären „Flächen“, „Objekt“ und „Sonstige-Daten“.

gesucht wird, und wenn er gefunden wird soll die Ganze Zeile
gelöscht werden.
Dh. wenn in der Tabelle Eingabemaske Zelle A3 die Objektnr. 32
steht, dann drücke ich auf den Löschbutton nun muss das Makro

Den Button gibt es schon?

Starten und in den Tabellen Flächen, Objekt und Sonstige-Daten
nach der Zelle mit der Objektnr. 32 suchen wenn er diese
findet, soll er sie dann Löschen.

In der Tabelle Flächen und Objekt ist die Objektnr. in Spalte
A und in der Tabelle Sonstigen-Daten ist die Objektnr. in der
Spalte G. Ich weiß nicht ob diese info etwas hilft.

Ich bin ein Anfänger und deswegen hoffe ich, dass ihr mir
helfen könnte.

Mit Alt + F11 wechselst Du in die Entwicklungsumgebung.
Hier musst Du im Projekt-Explorer (Fenster links oben) Deine Datei anklicken, und dann mit Einfügen // Modul eines erzeugen (wenn nicht schon vorhanden). Dann Doppelklick auf das Modul. Anschließend kannst Du den Text unten in dieses Modul kopieren.
Entweder muss der Button auf dieses Makro verweisen, oder Du rufst es mit Alt + F8 auf. Zurück zu Excel kommst Du wieder mit Alt + F11.
Bitte zum Testen eine Kopie verwenden.

Mit freundlichen Grüßen und vielen Dank im Voraus

Manu Haller

MfG MwieMichel

Option Explicit
’ globale Variablen
Dim ObjektNummer As String
Dim Spalte As Long, Zeile As Long

Sub DatenSatzLoeschen() 'Name des Makros
ObjektNummer = ActiveWorkbook.Sheets(„Eingabemaske“).Range(„A3“).Value
’ Welches Objekt gelöscht werden soll
If ObjektNummer = „“ Then Exit Sub ’ wenn leer, dann nix machen
’ MsgBox (ObjektNummer)
Sheets(„Flächen“).Activate ’ auf Blatt Flächen
Spalte = 1 ’ Spalte A untersuchen
Loeschen ’ aufrufen einer Schleife zum löschen
Sheets(„Objekt“).Activate ’ auf Blatt Objekte, Spalte A
Loeschen
Sheets(„Sonstige-Daten“).Activate ’ Blatt Sonstige
Spalte = 7 'Spalte G
Loeschen
End Sub

Private Sub Loeschen() ’ dieses Makro wird oben aufgerufen
With ActiveWorkbook.ActiveSheet ’ auf diesem Blatt
For Zeile = 1 To .UsedRange.Rows.Count ’ von 1 bis Ende
If Cells(Zeile, Spalte).Value = ObjektNummer Then
’ MsgBox („Zeile " & Zeile & " wird gelöscht.“)
Rows(Zeile).Delete ’ ganze Zeile Löschen
End If
Next
End With
End Sub

Hallo,
ich würde es mit mit Makro aufzeichnen versuchen und dann den Code im VBA Editor anpassen,

Gruss

Hallo Andreahuber84,

das hört sich etwas kompliziert an damit kann ich
nichts anfangen.

Gruß Hugo

Hallo!
Das hört sich recht verworren an, und erweckt den Eindruck, daß Du selbst nicht richtig weißt, was. Deshalb mein vorschlag:

Nimm Dir eine Tabelle mit Deinen Daten, und erstelle eine Kopie. Dann kannst du - Schrit für Schritt - das tun, was zu tun ist. Schreib Dir dabei alles genau auf.

Dann nimmst Du eine erneute Kopie, startest den Makro-Recorder, und tust das gleich noch einmal. Wenn du fertig bist, beendest du den Makro-Recorder, und hast ein Makro, in dem Du evtl. nur noch die eingegebenen Werte durch Verweise ersetzern musst.

Wichtig ist dabei, daß Du möglichst viel mit der Tastatur, nicht mit der Maus, machst. Und zeichne die Makros mit der Option „relativer verweis“ auf. Genauere Information findest du in der Excel-Hilfe „erstellen eines Makro“

Das mit der Kopie hat folgenden Sinn: Du wirst mit ziemlicher sicherheit mehrere versuche brauchen, bis Du Deinen Weg klar aufgeschrieben hast. Und wenn Du dann jedesmal mit anderen Daten arbeitest, rennst du ins Chaos.

Hallo Andreahuber84,

Du brauchst eine Funktion, die als Parameter den Suchbegriff und die Spalte annimmt und Dir die Zeile zurückgibt
ODER
eine Funktion, die den Suchbegriff in der angegebenen Tabelle sucht und dann die ermittelte Zeile löscht.
Code hierzu gibts bei http://www.herber.de/forum/archiv/296to300/299116_Mi…

Gruß
Harry

Hallo Andrea,
Deine Frage enthält ein wenig zu wenig Informationen. Zum Beispiel :

befindet sich die zu löschende Objektnummer immer in der gleichen Spalte ? (wenn nicht: kann es Zellen geben, die zwar eine 32, nicht aber als Objekt enthalten ? Verwechselungsgefahr!)

Gibt es mehrere Zeilen, die sich auf das Objekt beziehen?

Soll wirklich die ganze Zeile gelöscht werden ? (Dann dürfen da auch wirklich nur Daten zum Objekt liegen)
Vom Grundsatz her kannst Du das auch ohne Makro, sondern über den Autofilter erschlagen.

Mit freundlichem Gruße,

Matthias

Hi,
Puuh , hört sich kompliziert an.
Normalerweise würde ich sagen, einfach den Bereich zeilen- und spaltenweise durchgehen mit for-Schleifen, wenn das Objekt gefunden wurde, die Zellen der Zeile löschen und fertig.
Problem ist aber, dann bleibt da eine leere Zelle im Blatt stehen.
Eine VBA Funktion Zeile löschen und die anderen nach oben verschieben kenne ich leider nicht.
Grüße
femtofarad

Hallo Manu
Mit dem Befehl SVerweis wäre so etwas womöglich ohne makro möglich.
Grüsse Sebastian

Hallo Manu,

hier entsprechende Makros zum Löschen der Zeilen mit der Objektnummer

Mit freundlichen Grüßen

Franz

Sub LoeschenObjekt()
 Dim wksEingabe As Worksheet
 Dim varObjekt As Variant
 Set wksEingabe = ActiveWorkbook.Worksheets("Eingabemaske")
 varObjekt = wksEingabe.Range("A3").Value
 If varObjekt = "" Then
 MsgBox "In Zelle ""A3"" ist kein Objekt eingetragen!", \_
 vbInformation + vbOKOnly, \_
 "O b j e k t d a t e n l ö s c h e n"
 Exit Sub
 End If
 If MsgBox("Daten zu Objekt """ & varObjekt & """ wirklich löschen?", \_
 vbQuestion + vbOKCancel + vbDefaultButton2, \_
 "O b j e k t d a t e n l ö s c h e n") = vbOK Then
 If Objektloeschen(Suchwert:=varObjekt, \_
 wks:=ActiveWorkbook.Worksheets("Flächen"), Spalte:=1) = False Then Exit Sub
 If Objektloeschen(Suchwert:=varObjekt, \_
 wks:=ActiveWorkbook.Worksheets("Objekt"), Spalte:=1) = False Then Exit Sub
 If Objektloeschen(Suchwert:=varObjekt, \_
 wks:=ActiveWorkbook.Worksheets("Sonstigen-Daten"), Spalte:=7) = False Then Exit Sub
 End If
End Sub

Private Function Objektloeschen(Suchwert As Variant, wks As Worksheet, \_
 Spalte As Long) As Boolean
 Dim Zelle As Range, bolGeloescht As Boolean
 Do
 Set Zelle = wks.Columns(Spalte).Find(what:=Suchwert, LookIn:=xlValues, lookat:=xlWhole)
 Objektloeschen = True
 If Zelle Is Nothing Then
 If bolGeloescht = False Then
 If MsgBox("Objekt """ & Suchwert & """ in Blatt """ & wks.Name & """ nicht gefunden", \_
 vbRetryCancel, "Makro: Objektloeschen") = vbCancel Then Objektloeschen = False
 End If
 Exit Do
 Else
 Zelle.EntireRow.Delete shift:=xlShiftUp
 bolGeloescht = True
 End If
 Loop

End Function

Hallo Manu,

einfach auf jedem Blatt eine Schleife durchlaufen lassen, bis die Objektnummer gefunden wurde (Achtung, sehr rudimentär, keine Prüfung, was ist, wenn die Objektnummer nicht existiert bzw. sind hier keine optimierten Suchalgorithmen/-funktionen verwendet!)

Annahme, Deine Datensammlung auf den Zielblättern fängt immer in Zeile 1 an.

Sub …
Dim Zeile as Long

'Initialisierung
Zeile = 0

'Objektnummer suchen
Do
Zeile=Zeile+1
Loop until Sheets(„Flächen“).Range(„A“ & Zeile).Value ="" or Sheets(„Flächen“).Range(„A“ & Zeile).Value = Range(„A3“).Value 'hier müssen dann je Blatt die Tabellenblattnamen ausgetauscht und für das Blatt „Sonstige-Daten“ auch die Spalte (in den ersten beiden Range-Eigenschaften) auf G statt A gewechselt werden

Sheets(„Flächen“).Row(Zeile).Delete

End Sub

Die Schleife müsste dann je Tabellenblatt einmal durchlaufen werden.