Office: Zellen löschen nach Auswahl eines Strings im Dropdownmenu

Helfe beim Thema Zellen löschen nach Auswahl eines Strings im Dropdownmenu in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo, bin irgendwie mit meinem Latein am ende, hab folgendes Problem: in der Zelle B6 ist ein Dropdownmenu mit dem Eintrag "leer"(ohne die ""),... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von mig77, 7. April 2009.

  1. mig77 Erfahrener User

    Zellen löschen nach Auswahl eines Strings im Dropdownmenu


    Hallo,

    bin irgendwie mit meinem Latein am ende, hab folgendes Problem:

    in der Zelle B6 ist ein Dropdownmenu mit dem Eintrag "leer"(ohne die ""),
    jetzt soll, wenn dieser Ausgewählt der Inhalt der Zellen:

    B14 / B16 / B18 / D6 / D8 / D10 / D12 / D14 / D16 / D18

    gelöscht werden. (aber bitte nur den Inhalt auf "" setzen, Formatierung bei behalten)

    Im Anschluss dazu dann die Datei speichern mit "ActiveWorkbook.Save".

    Hoffe Ihr könnt mir helfen

    Gruß mig77
     
    mig77, 7. April 2009
    #1
  2. schatzi Super-Moderator
    Hallo!

    Per VBA löscht du Zelleninhalte folgendermaßen:

    Range("A1:A10").ClearContents

    Die Formatierung bleibt erhalten.
     
    schatzi, 7. April 2009
    #2
  3. mig77 Erfahrener User
    also bei mir sieht das etwa so aus:


    Option Explicit

    Sub leeren()
    If Range("B6") = "leer" then Range("B14,.....D14,D16,D18").ClearContents
    endif

    End Sub


    oder wo ist mein denkfehler? den das Teil reagiert nicht auf die veränderung des Zelleninhalts.....
     
    mig77, 7. April 2009
    #3
  4. Exl121150 Erfahrener User

    Zellen löschen nach Auswahl eines Strings im Dropdownmenu

    Hallo mig77,

    es gibt in Excel2003 zwei verschieden Arten von Comboboxen (Formularsteuerelement bzw. ActiveX-Steuerelemente).

    Ich nehme an, Du hast eine Combobox aus den Formularsteuerelementen (weil Du die SUB mit 'leeren' benannt hast, wahrscheinlich in einem allg. Code-Modul).

    Dann hast Du das Steuerelement sicherlich formatiert, sprich im Tabulator 'Steuerung' ihm einen Eingabebereich zugewiesen (um die Listenanzeige zu definieren) und ferner eine Zellverknüpfung eingegeben.
    Die Zellverknüpfung kennzeichnet die Zelle, in der das Resultat der Listenauswahl vom Steuerelement ins Arbeitsblatt zurückgeliefert wird. Dort steht allerdings nicht der ausgewählte Listeneintrag (aus dem Eingabebereich) selbst, sondern die Nummer des Listeneintrags (aus dem Eingabebereich).
    Wenn der "leer"-Eintrag zB. an 3. Stelle im Eingabebereich steht, so steht in der Zellverknüpfung eine 3 (und nicht 'leer').

    Darüber hinaus muss dem Steuerelement Dein Makro zugewiesen werden, damit beide wissen, dass sie miteinander verheiratet sind.
    Darüber hinaus enthält das Makro einen Syntaxfehler. Da sich dieser offenbar bisher nicht bemerkbar gemacht hat, dürfte auch keine Makrozuweisung vorgenommen worden sein.

    Angenommen die Zellverknüpfung würde mit Zelle B6 erfolgt sein, der 'leer'-Listeneintrag stehe an 3. Stelle im festgelegten Listen-Eingabebereich und dem Steuerelement ist das Makro 'Leeren' zugewiesen worden, dann müsste dieses wie folgt lauten:

    Code:
    Sub Leeren()
      If Range("B6").Value=3 then Range("B14,D14,D16,D18").ClearContents
    End Sub
    (Bemerkung zum Syntaxfehler: Wenn in BASIC ein einzeiliges IF-Statement vorliegt, dann darf man kein 'END IF' in einer neuen Zeile verwenden. Dieses muss man dagegen bei einem mehrzeiligen IF verwenden; außerdem ist es prinzipiell getrennt zu schreiben, niemals 'ENDIF'. Ein einzeiliges IF liegt zwingend vor, wenn nach dem 'THEN' in derselben Zeile eine weitere Anweisung folgt - in diesem Fall 'Range....ClearContents').
     
    Exl121150, 7. April 2009
    #4
  5. mig77 Erfahrener User
    @exl:

    ich habe keine Userform oder ähnliches benutzt, es gibt diese dropdown Funktion auch in Excel selber (also ganz normale Excel Oberfläche) unter Gültigkeit oder so (hab hier gradkein Excel zum nachschauen)... dort werden die Einträge dann mit Semikolon getrennt.

    Mir würde sonst auch eine bedingte Formatierung reichen, aber irgendwie funzt alles nicht was ich probiert habe.

    Den Quellcode von oben hatte ich nur "schnell mal" aus dem Kopf hingeschrieben *lach* ... aber danke trotzdem für die berichtigung.

    Also wie gesagt die Zelle hat nacher "leer" drin stehen, aber ich weiss einfach nicht wie ich diesen Textstring abfragen kann und dann mehrere nicht miteinander verbunde Zellen löschen kann.

    Die geschichte mit Userform und Comboboxen kommt dann erst in der nä. Version, atm soll es erstmal ne ganz einfache excel lösung sein.
     
    mig77, 8. April 2009
    #5
  6. mig77 Erfahrener User
    mig77, 8. April 2009
    #6
  7. Exl121150 Erfahrener User
    Hallo mig77,

    es gibt in Excel2003 zwei verschiedene Arten von Steuerelementen, die man in einem ganz normalen Arbeitsblatt (nicht Userform) deponieren kann.
    Aber aufgrund dieser Bemerkung habe ich verstanden, dass es sich um etwas gänzlich anderes handelt: um die Gültigkeitsprüfung von Eingabewerten in Zellen.
    Dort und nur dort kann man auch semikolongetrennte Testlisten eingeben, aus der man dann einen einzelnen Wert bei der Zelleingabe auswählen kann.

    Für die Gültigkeitsprüfung gibt es keine spezielle Ereignisbehandlung, sondern nur die allgemeine für ein Arbeitsblatt bzw. für die Arbeitsmappe.
    Am besten man verwendet das Change-Ereignis des Arbeitsblattes oder aber das SheetChange-Ereignis der Arbeitsmappe.
    Im Folgenden habe ich das Change-Ereignis des betreffenden Arbeitsblattes verwendet:
    Code:
    Private Sub Worksheet_Change(ByVal Target As Range)
      If Target=Range("B6") Then
        If Target.Value="leer" Then Range("B14,B20,C24").ClearContents
      End If
    End Sub
    Dieses Makro darfst Du nicht ins allg. Code-Modul speichern, sondern in das Klassenmodul des betreffenden Arbeitsblattes, denn nur dort ist die Ereignisbehandlung aktiv, die dann die SUB mit dem passenden Namen ('WorkSheet_Change') aufruft, sofern sie vorhanden ist.

    Funktion: Hat sich im aktuellen Arbeitsblatt ein Zellwert geändert, so wird im Arbeitsblatt das Change-Ereignis ausgelöst. Die Ereignisbehandlung für das Blatt schaut dann nach, ob eine dazu passende Ereignisbehandlungs-Routine ("Event-Handler") vorliegt. Falls ja, wird dieser Routine der Zellbereich, in dem die Änderung aufgetreten ist, als Parameter (Variable 'Target') übergeben.
    Daher überprüft die SUB sofort, ob es sich bei Target dabei um die Zelle B6 handelt. Trifft dies zu, wird weiters überprüft, ob der Inhalt dieser Zelle die Zeichenkette 'leer' ist; falls ja, dann führe die Inhaltslöscherei für die angeführte Zellliste aus. Trifft eine der Bedingungen nicht zu, dann soll das Makro einfach nichts tun.
     
    Exl121150, 8. April 2009
    #7
  8. mig77 Erfahrener User

    Zellen löschen nach Auswahl eines Strings im Dropdownmenu

    PERFECT!!!! DANKE!!!!

    Funktioniert einwandfrei, habs jetzt noch um folgendes ergänzt:

    Code:
    Private Sub Worksheet_Change(ByVal Target As Range)
      If Target = Range("B6") Then
        If Target.Value = "leer" Then Range("B14,B16,B18,D6,D8,D10,D12,D14,D16,D18").ClearContents
        ActiveWorkbook.Save
      End If
    End Sub
     
    mig77, 8. April 2009
    #8
  9. Exl121150 Erfahrener User
    Hallo mig77,

    so wie Dein Makro jetzt ist, wird die aktive Arbeitsmappe immer dann gespeichert, wenn in Zelle B6 eine Änderung eingetreten ist (egal welche)!
    Falls Du haben wolltest, dass die Speicherung nur durchgeführt wird, wenn vorher die Löscherei ausgeführt wird (in Abhängigkeit von 'leer' in B6), muss das Makro lauten:
    Code:
    Private Sub Worksheet_Change(ByVal Target As Range) 
      If Target = Range("B6") Then 
        If Target.Value = "leer" Then 
          Range("B14,B16,B18,D6,D8,D10,D12,D14,D16,D18").ClearContents 
          ActiveWorkbook.Save 
        End If
      End If 
    End Sub
     
    Exl121150, 8. April 2009
    #9
  10. mig77 Erfahrener User
    muss noch schauen welches besser ist, oder ob ich "manuell" speichern lass ... hab

    ActiveWorkbook.Save

    jetzt erstmal raus gelassen und muss schauen wie die User das annehmen ... sollte es erforderlich sein würd ich jede Änderung speichern lassen.

    hab jetzt allerdings ca 30 if abfragen hinter einander ... gibts da nicht sowas wie CASE? .. der Rödelt sich hier durch die Felder wie ein irrer *lach*

    Wenn ich dann och das Speichern rein nehme, speichert er bei jedem IF Durchgang ...

    kann mann auch nur einmal Speichern, egal welche If Anweisung ausgeführt wurde?

    EDIT: ich seh da grad keinen unterschied zw den 2 Codes ... ?!? oder machts das eine ENDIF?
     
  11. Exl121150 Erfahrener User
    Hallo mig77,

    wie ich am 7.4. am Schluss bereits bemerkt habe, gibt es in BASIC hauptsächlich aus geschichtlichen Gründen 2 verschiedene IF-Anweisungen:
    1) die einzeilige (ursprüngliche) IF-Anweisung:
    Syntax: IF log.Ausdruck THEN Anweisung1 [ELSE Anweisung2]
    Das muss alles in 1 Zeile stehen; vor allem muss nach dem THEN die Anweisung1 folgen in der gleichen Zeile.
    2) die mehrzeilige (=spätere, strukturierte) IF-Anweisung: Syntax:
    IF log.Ausdruck THEN
      Anweisungsblock1
    [ELSEIF log.Ausdruck2 THEN
      Anweisungsblock2]
    [ELSE
      Anweisungsblock3]
    END IF

    Die mehrzeilige IF-Anweisung muss genau so auf mehrere Zeilen verteilt werden, wie ich sie hingeschrieben habe. Die Anweisungsblöcke können aus 1 oder mehreren Anweisungen bestehen. Die in eckigen Klammern gesetzten Teile können auch entfallen, wenn sie nicht benötigt werden. Die eckigen Klammern selbst muss man sich natürlich wegdenken.

    Wenn ich folgenden Visual-BASIC-Code analysiere:

    Private Sub Worksheet_Change(ByVal Target As Range)
      If Target = Range("B6") Then
        If Target.Value = "leer" Then Range("B14,B16,B18,D6,D8,D10,D12,D14,D16,D18").ClearContents
        ActiveWorkbook.Save
      End If
    End Sub

    1) Da gibt es 2 IF-Anweisungen: eine äußere IF-Anweisung. Dabei handelt es sich um eine mehrzeilige IF-Anweisung:
    IF Target=... THEN
    Anweisungsblock1
    END IF
    Nach dem THEN steht nichts mehr in dieser Zeile, es liegen mehrere Zeilen vor, die mit einem END IF beendet werden.
    Zu dem Anweisungsblock1 gehören 2 Anweisungen:
    a) IF .... THEN Range(...).clearcontents
    b) ActiveWorkbook.Save
    Dabei stellt die IF-Anweisung unter a) eine einzeilige IF-Anweisung dar, die nur für die eine Zeile gilt; d.h. die Anweisung in b) 'ActiveWorkbook.Save' ist nicht mehr vom IF Target.Value="leer" THEN .... unter a) abhängig.

    Dagegen im folgenden Code
    Private Sub Worksheet_Change(ByVal Target As Range)
      If Target = Range("B6") Then
        If Target.Value = "leer" Then
          Range("B14,B16,B18,D6,D8,D10,D12,D14,D16,D18").ClearContents
          ActiveWorkbook.Save
        End If
      End If
    End Sub

    habe ich wieder 2 IF-Anweisungen: eine äußere und eine innere IF-Anweisung; jedoch sich beide mehrzeilige IF-Anweisungen:
    Die Folge ist, dass die Bedingung der inneren IF-Anweisung IF Target.Value="leer" then für beide Anweisungen gilt:
    a) für Range(....).ClearContents und
    b) für ActiveWorkbook.Save

    Bitte weitere Details in der VBA-Hilfe nachlesen.
    Es gibt natürlich auch eine SELECT CASE.... ELSE ... END SELECT-Anweisung und eine Reihe weiterer.
     
    Exl121150, 8. April 2009
    #11
Thema:

Zellen löschen nach Auswahl eines Strings im Dropdownmenu

Die Seite wird geladen...
  1. Zellen löschen nach Auswahl eines Strings im Dropdownmenu - Similar Threads - Zellen löschen Auswahl

  2. Zweiten Wert aus einer Zelle löschen

    in Microsoft Excel Hilfe
    Zweiten Wert aus einer Zelle löschen: Hallo zusammen, ich benötige eure Hilfe bei folgendem Problem: Ich habe eine Exceltabelle mit über 1600 Kundenkontakten. Leider wurde bei der Erstellung der Tabelle durch die...
  3. Zellen löschen

    in Microsoft Excel Hilfe
    Zellen löschen: Hallo, es geht um Version 2021. Wenn ich einzelne Zellen markieren und rechte Maus taste, ist Zellen löschen deaktiviert. Wo ist der Fehler? <img...
  4. Zeilen löschen wenn eine Zelle der Zeile einen bestimmten Inhalt hat

    in Microsoft Excel Hilfe
    Zeilen löschen wenn eine Zelle der Zeile einen bestimmten Inhalt hat: Hallo, ich brauche mal wieder eure Hilfe. Für die beschriebene Aufgabe benutze ich folgenden Code der soweit auch gut funktioniert: Code: Sub ZeileLöschen() Dim Bereich As Range Dim Zelle As...
  5. Letzten 2 Zeichen löschen, leere Zellen überspringen.

    in Microsoft Excel Hilfe
    Letzten 2 Zeichen löschen, leere Zellen überspringen.: Hallo, ich suche nach einer Formel, die die letzten 2 Zeichen in einer Spalte löscht, aber die leeren Zellen überspringt. Die Formel die ich zur Zeit nutze überspringt die leeren Zellen nicht,...
  6. Bestimmte Ziffern in Zelle entfernen

    in Microsoft Excel Hilfe
    Bestimmte Ziffern in Zelle entfernen: Hallo zusammen, Ich habe z.B. in meiner Spalte A/ Zelle 146 folgendes stehen "P-100-301783-10001". Ich möchte gerne in Spalte B/ Zelle 146 den gleichen Text von Spalte A/ Zelle 146 kopieren und...
  7. Drucken nur wenn Zelle Wert hat / Automatisches Löschen der Zelle beim Start

    in Microsoft Excel Hilfe
    Drucken nur wenn Zelle Wert hat / Automatisches Löschen der Zelle beim Start: Hallo Zusammen, ich - VBA-Nullnummer - habe mal wieder etwas für die VBA-Profis. Es soll nur gedruckt werden können, wenn in einer Zelle ein Wert ist. Die Zelle ist zusammengeführt, G2:H4. Die...
  8. Wenn Formelergebnis leer Zelle ergibt, ganze Zeile Löschen

    in Microsoft Excel Hilfe
    Wenn Formelergebnis leer Zelle ergibt, ganze Zeile Löschen: Hallo, ich habe folgende Frage: Ich übernehme mit der Formel. =WENN(Alle!$Q3>1;Alle!A3;"") Daten aus einer anderen Datei. Wenn nun das Ergebnis eine leere Zelle (" ") ergibt, soll die ganze Zeile...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden