Clever-Excel-Forum

Normale Version: [VBA] Löschen eines Datensatzes
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3
Hi Stefan,

mit Deiner vorgeschlagenen Zeile kommt auch wieder:

"Die Delete-Methode des Range-Objektes konnte nicht ausgeführt werden."
@Stefan!
Puuuh! Gefährlich, was Du da vorschlägst!
So von wegen ActiveSheet und so …

Gruß Ralf
@Ralf:
Ich hab Dir Deine PN beantwortet.
Vielleicht ist es ja wirklich am sinnvollsten, dass Du mir die Datei schickst.

Gruß Ralf
Hi,

Zitat:- Die Daten in der Tabelle sind als intelligente Tabelle formatiert.


CodeNameSheet.ListObjects("Name_der_Liste").ListRows(suchErgebnis.Row).Delete

Wobei Blattname und Listenname natürlich angepasst werden sollten.

Und bei dem Blattschutz gibt es den Parameter UserInterfaceOnly
Soderle!
Ich habe mir die Datei angesehen.
Loeschen sieht jetzt so aus und funktioniert problemlos.
(Ich schrieb aber ja auch vom Switchen des Blattschutzes)
Sub Loeschen()    'Datensatz löschen 
   If MsgBox("FGGK: " & frm_UserForm1.Controls("TextBox" & 1).Value & " wirklich löschen?", vbYesNo) = vbYes Then
      MsgBox suchErgebnis.Row
      Tabelle1.Unprotect
      suchErgebnis.EntireRow.Delete
      Tabelle1.Protect
   End If
   
   Call Controls_Urzustand1
End Sub

Gruß Ralf
Ohne Datei bleibt's nur Raterei.
HI,

Zitat:Ich schrieb aber ja auch vom Switchen des Blattschutzes
Warum switchen?
Ich verstehe einfach nicht warum aufmachen und zumachen!?
Du hast natürlich Recht, dass man dies auch im WB_Open() oder im UF_Initialize() mit dem Parameter UserInterfaceOnly:= regeln kann.
Aber ist im Prinzip Jacke wie Hose … Wink
hi,

nun habe ich die Lösung:
in dem Löschen-Makro muß nochmal direkt der Blattschutz ausgeschaltet werden.

Dann hat es mit diesem Code funktioniert:
Code:
Sub Loeschen()    'Datensatz löschen
 
  Sheets("Stammdaten").Unprotect
  If MsgBox("FGGK: " & frm_UserForm1.Controls("TextBox" & 1).Value & " wirklich löschen?", vbYesNo) = vbYes Then
     'MsgBox suchErgebnis.Row
     Sheets("Stammdaten").ListObjects("Tabelle3").ListRows(suchErgebnis.Row - 6).Delete
  End If
  Sheets("Stammdaten").Protect AllowDeletingRows:=True
 
  Call Controls_Urzustand1
End Sub
-6, weil da die Zeilen-Nummer der intelligenten Tabelle genommen wird und nicht die Blattzeile.
Die anderen vorgeschlagenen Code-Zeilen habe ich jetzt nicht mehr getestet.


Bei diesem Code
Code:
  Sheets("Stammdaten").Unprotect
  frm_UserForm1.Show
  Sheets("Stammdaten").Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowDeletingRows:=True
wird also nicht der Blattschutz aufgehoben, bis die Userform geschlossen wird, sondern nur so lange, bis das Userform-CodeModul verlassen wird. Wenn die Löschen-Sub also in einem allgemeinen Modul steht, dann ist der Blattschutz schon wieder aktiv.

PS: da das Tool für einen VBA-Anfänger entwickelt wurde, wird überall "Call" und ".Value" verwendet.
Hi,

^^
Zitat:Aber ist im Prinzip Jacke wie Hose … [img]
Dateiupload bitte im Forum! So geht es: Klick mich!
]
nöö,

Warum ich der Meinung bin:
  • Viele Anwender haben ein Problem wo Sie nun auf und zumachen sollten.
  • Bleibt der Code jetzt zwischen unprotect und Protect hängen, ist das Blatt nicht geschützt und ist ggf. einer Herde von Dau's ausgeliefert.
  • Es ist zumeist kürzer, da ja zumeist PW und andere Parameter auch noch übergeben werden.
  • Mir bislang kein Nachteil eingefallen ist.

lg
Chris
Seiten: 1 2 3