leider bekomme ich es nicht hin zwei befehle miteinander zu kombinieren.
Ich wähle eine Zelle in meiner Excel-Datei aus und dann aktiviere ich das Makro:
Sub Zeile_Loeschen()
If TypeName(Selection) = "Range" Then Selection.EntireRow.Delete
End Sub
Die Zeile wird dann gelöscht aber leider nicht die Steuerelement (shape) in der Zeile
Kann mir jemand zeigen, wie man das shape.delete row in diese oben stehen Makro mit einarbeiten kann, damit auch die Steuerelement mit gelöscht werden?
Moin! Wenn Du mal Deine Datei zeigst, könnte ich viele sinnvolle Ratschläge geben. Ich befürchte aber bereits jetzt, dass sie Dir nicht gefallen, weil ich Tipps zu sinnvoller Gestaltung von Sheets geben würde. Aber ernsthaft: Einen Versuch sollte es Dir Wert sein!
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)
das kommt ganz drauf an wie schlau oder nicht das Shape angelegt wurde.
Wenn immer ein Name verwendet wird und die Zeilennummer hinten dran ist es recht einfach dies mit zu entfernen. beispielhaft so:
Code:
Tabelle1.Shapes("Name" & i Zeile).Delete
Ansonsten bleib nur der Weg via TopLeftcell die Zeilennummer mit dem Zeilennummernteil der TopLeftcell Adresse zu vergleichen. beispielhaft so:
Code:
Option Explicit Private Const delZeile As Long = 3
Sub ShapeLoeschen() Dim adr Dim sh As Shape For Each sh In ActiveSheet.Shapes adr = sh.TopLeftCell.Address adr = Split(adr, "$") If adr(2) = delZeile Then sh.Delete Next End Sub
Um auf die eine oder andere Art das passende Shape zu löschen kann man eine For Each / Next Schleife dazu durchlaufen lassen, wo alle Shapes auf Treffer geprüft werden.
Im Anhang findest du eine Excel-Datei als Beispiel.
Die Steuerelemente befinden sich immer in Spalte D aber immer in einer anderen Zeile. Wenn ich jetzt in der Excel-Datei in Spalte B z.B. Zeile 11 und 12 markiere und dann die Makro aktiviere in der Excel-Datei, werden die Zeilen gelöscht aber leider nicht das Steuerelement.
Ich habe versucht den ersten Code den du mir geschickt hast in das Makro einzuarbeiten.
Ich bekomme aber leider immer den Fehler ->Fehler beim Kompilieren: Erwartet: Listentrennzeichen oder)
Sub Zeile_Loeschen()
Tabelle1.Shapes("Name" & i Zeile).Delete
Next
If TypeName(Selection) = "Range" Then Selection.EntireRow.Delete x1up
End Sub
Kannst du mir zeigen wie die beiden Befehle zusammengfügt werden müssen, damit es funktioniert.
21.08.2024, 05:39 (Dieser Beitrag wurde zuletzt bearbeitet: 21.08.2024, 05:39 von RPP63.)
Moin und oha! Warum wählst Du einen Dropdown? Nimm Datengültigkeit, Liste (Zellendropdown) und Du hast keine Probleme. Warum willst Du "mit Macht" VBA verwenden? Schließlich fehlen Dir absolute Grundlagen. Die Konstante heißt nicht x1Up (1 wie Eins), sondern xlUp (xl wie Excel).
Ich lösche eine Zeile mittels Kontextmenue oder noch viel schneller mittels Shortcuts: • Umschalt+Leertaste markiert die Zeile • Strg+- (Minus) löscht die Zeile
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)
Welchen Vorteil versprichst Du Dir von einem Steuerelement? Ein Zelldropdown ist eindeutig der Zelle zugeordnet. Am Rand: Um ein Objekt an Zellrändern exakt auszurichten, hält man während der Platzierung die Alt-Taste gedrückt! Bei Dir schwebt der Dropdown "irgendwo".
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)
Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:1 Nutzer sagt Danke an RPP63 für diesen Beitrag 28 • Dietmar Henning
21.08.2024, 10:10 (Dieser Beitrag wurde zuletzt bearbeitet: 21.08.2024, 10:13 von Egon12.)
Hallo Robert,
du musst in deinen Dingen für Ordnung und klare Strukturen sorgen. Dann ist es ratsam alles was dir mitgeteilt wird einmal in Ruhe durchzulesen und danach zu Testen. Spätestens da hättest du erkannt, dass die Formularsteuerelemente nicht an die TopLeftcell Adresse der Zelle der zu löschenden Zeile gebunden ist.
Anbei deine Datei. Schau dir in Ruhe mal die 1. Zeile im Modul1 an.
Schreibe zukünftig Option Explicit dahin. Das stellt sicher, dass der VBA Compiler dir jede unsauber oder fehlerhaft geschriebene Anweisung anmeckert und du gezwungen wirst jede Variable zu deklarieren. Die Bedeutung der Funktionen/Befehle kannst du in der MS Hilfe nachschlagen.
Gruß Uwe
Folgende(r) 1 Nutzer sagt Danke an Egon12 für diesen Beitrag:1 Nutzer sagt Danke an Egon12 für diesen Beitrag 28 • Dietmar Henning
21.08.2024, 11:48 (Dieser Beitrag wurde zuletzt bearbeitet: 21.08.2024, 11:52 von Dietmar Henning.)
Hallo Uwe,
danke für die Makro. Diese funktioniert wie immer richtig super. Ich habe jetzt auch in jeder Makro Option Explicit reingeschrieben. Danke auch nochmal für den Hinweis.
Sorry, dass du es so schwer mit mir hast.
Ich werde versuchen beim nächsten mal gründlicher vorzugehen.
Danke für deine Zeit.
Ich wünsche dir noch eine gute Restwoche.
mfg
Robert Hallo Ralf,
das mit den Zelldropdown funktioniert auch super.
Danke das du mir auch noch eine zweite Möglichkeit aufgezeigt hast.