[VBA] Löschen eines Datensatzes
#1
Hi,

mit folgendem Code möchte ich eine Datensatzzeile löschen:
Sub Loeschen()    'Datensatz löschen 
  If MsgBox("FGGK " & frm_UserForm1.Controls("TextBox" & 1).Value & " wirklich löschen?", vbYesNo) = vbYes Then
     suchErgebnis.EntireRow.Delete
  End If
  Call Controls_Urzustand1
End Sub

Die Variable "suchErgebnis" ist eine globale Range-Variable, die vorher im Such-Modul gefüllt wird.

Bei Aufruf des Makros kommt folgende Fehlermeldung in der Delete-Zeile:
   

Was mache ich falsch?
Top
#2
Hallo Ralf,

die Variable ist zu dem Zeitpunkt gefüllt und nicht Nothing? Und das Tabellenblatt ist nicht geschützt?
Gruß Stefan
Win 10 / Office 2016
Top
#3
Hi Stefan,

ja, sie ist gefüllt.
Das Tabellenblatt ist zwar geschützt, aber diese Zeilen sind frei.

So, nochmal nachgeschaut:
- die Variable ist zwar gefüllt, aber mit dem Inhalt der gefundenen Zelle. Mit "MsgBox suchErgebnis.Row" wird dann die Zeilennummer gezeigt.
- Die Daten in der Tabelle sind als intelligente Tabelle formatiert.

Was erwartet denn das obige Makro als Variablenwert (suchErgebnis) für diese Zeile:
suchErgebnis.EntireRow.Delete
oder wie könnte ich das sonst lös(ch)en?
Top
#4
(12.06.2018, 12:54)Rabe schrieb: Was erwartet denn das obige Makro als Variablenwert (suchErgebnis)?

Moin Ralf!
Ein Range-Objekt.
Aber dies scheint ja (siehe die Threaderöffnung) korrekt übergeben worden zu sein.
Ich befürchte, dass eine zielgerichtete Hilfe ohne Beispieldatei nicht möglich ist.

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#5
Ich habe es mal nachgestellt.
Der "Sperrzustand" der Zeile ist unerheblich!
Damit gelöscht werden kann, musst Du explizit im Blattschutz das Löschen von Zeilen erlauben oder schlicht den Schutz switchen.
   

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#6
Sub Loeschen()
  If MsgBox("FGGK " & TextBox1 & " löschen?") = vbYes Then sheet1.cells.find(Textbox1,,,1).entirerow.delete

   Controls_Urzustand1
End Sub


Call ist überflüssig.
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Top
#7
Ändert aber nix am Lösch-Problem im geschützten Blatt, snb!
(siehe meinen letzten Beitrag)

Edit:
Du hast schon Excel 2020? :19:

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#8
Hi,

ich habe das Löschen nun erlaubt und der Blattschutz wurde auch vorher schon beim Aufruf der Userform (und damit vor dem Suchen) aufgehoben.

Vorgehen:
  1. Aufruf Userform, Entsperren des Blattes
  2. Auswahl der Zeile, Button Suchen
  3. Button "löschen" ruft das Makro auf
  4. Nachfrage "löschen ja/nein"
  5. Anzeige Löschzeilen-Nr.
  6. Fehlermeldung (s.o.)
Top
#9
Hallo,

und so?

Code:
Sub Loeschen()    'Datensatz löschen
  If MsgBox("FGGK " & frm_UserForm1.Controls("TextBox" & 1).Value & " wirklich löschen?", vbYesNo) = vbYes Then
     Rows(suchErgebnis.Row).Delete
  End If
  Call Controls_Urzustand1
End Sub
Gruß Stefan
Win 10 / Office 2016
Top
#10
Hi snb,

(12.06.2018, 13:10)snb schrieb:   If MsgBox("FGGK " & TextBox1 & " löschen?") = vbYes Then sheet1.cells.find(Textbox1,,,1).entirerow.delete

da wird nun der Inhalt der Userboxen gelöscht, aber die Zeile in der intelligenten Tabelle ist trotzdem noch vorhanden.
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste