VBA_Löschen von Steuerelmenten in einer Zeile
#1
Hallo Zusammen,

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?

Danke für die Hilfe.

mfg

Dietmar
Antworten Top
#2
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)
Antworten Top
#3
Hallo Dietmar/Robert,

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.

Gruß Uwe
Antworten Top
#4
Hallo Uwe,

danke das du mir Hilfst.

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.

Danke nochmal.

mfg

Robert


Angehängte Dateien
.xlsm   Mappe1.xlsm (Größe: 18,63 KB / Downloads: 5)
Antworten Top
#5
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)
Antworten Top
#6
Hallo Ralf,

danke das du mir auch Helfen willst.

leider wird nicht das Steuerungselement mit gelöscht, wenn ich die Vorgehensweise Shortcuts von dir verwende.

Die Zeile ja aber nicht das Steuerungselement, was sich in der Zeile befindet.

mfg

Robert
Antworten Top
#7
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:
  • Dietmar Henning
Antworten Top
#8
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.
 
.xlsm   Steuerelement löschen.xlsm (Größe: 20,79 KB / Downloads: 2)

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:
  • Dietmar Henning
Antworten Top
#9
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.

Ich wünsche dir auch noch eine schöne Restwoche.

mfg

Robert
Antworten Top


Gehe zu:


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