Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1460to1464
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA: Ellipse rot oder grün

VBA: Ellipse rot oder grün
11.12.2015 15:57:29
Dieter(Drummer)
Gute Tag, VBA Spezialisten.
Kann der Code verkürzt werden und wie muss er dann lauten?
In der Musterdatei ist die Ellipse 5, die durch Klick rot oder grün gefärbt wird.
https://www.herber.de/bbs/user/102187.xlsm
Der Code für Ellipse 5, der auch funktioniert, ist im Modul 1:
  • Option Explicit
    Sub RotGruen()
    If ActiveSheet.Shapes("Ellipse 2").Fill.ForeColor.RGB = RGB(255, 0, 0) Then
    ActiveSheet.Shapes("Ellipse 2").Fill.ForeColor.RGB = RGB(0, 255, 0)
    Else: ActiveSheet.Shapes("Ellipse 2").Fill.ForeColor.RGB = RGB(0, 255, 0)
    ActiveSheet.Shapes("Ellipse 2").Fill.ForeColor.RGB = RGB(255, 0, 0)
    End If
    End Sub
    

  • Danke für evtl. Hilfe.
    Gruß, Dieter(Drummer)

    22
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: VBA: Ellipse rot oder grün
    11.12.2015 16:11:49
    Daniel
    Hi
    mit weniger Zeilen so:
    Dim Farbe
    Farbe = Array(RGB(255, 0, 0), RGB(0, 255, 0))
    With ActiveSheet.Shapes(Application.Caller).Fill.ForeColor
    .RGB = Farbe(-1 * (.RGB = Farbe(0)))
    End With
    
    etwas näher an deinem Code, aber übersichlicher durch Verwendung der WITH-Klammer:
    With ActiveSheet.Shapes(Application.Caller).Fill.ForeColor
    If .RGB = RGB(255, 0, 0) Then
    .RGB = RGB(0, 255, 0)
    Else
    .RGB = RGB(255, 0, 0)
    End If
    End With
    

    die Verwendung von Application.Caller zum Ermitteln den geklickten Buttons erlaubt es, diesen Code für mehrere gleichartige Buttons zu verwenden.
    gruß Daniel

    Anzeige
    AW: Danke Daniel, beide Codes ...
    11.12.2015 16:30:25
    Dieter(Drummer)
    ... funktionieren prima.
    Noch einen schönen Tag, mit Gruß, Dieter(Drummer)

    AW: VBA: Ellipse rot oder grün
    11.12.2015 16:16:09
    Sepp
    Hallo Dieter,
    Sub RotGruen()

    With ActiveSheet.Shapes(Application.Caller).Fill.ForeColor
      If .RGB = RGB(255, 0, 0) Then
        .RGB = RGB(0, 255, 0)
      Else
        .RGB = RGB(255, 0, 0)
      End If
    End With

    End Sub

    so kannst du den Code jedem Shape zuweisen, unabhängig vom Namen.
    Gruß Sepp

    Anzeige
    AW: Kommt leider Fehler ...
    11.12.2015 16:28:26
    Dieter(Drummer)
    Hi Sepp, danke für deine Rückmeldung. Es kommt leider Anzeige eines Kompilierumngsfehlers:
      If .RGB = RGB(255, 0, 0) Then
    
    .
    Gruß, Dieter(Drummer)
    Dein ganzer Code:
    'Von Herber: Sepp, 11.12.2105
  • Sub RotGruen3()
    With ActiveSheet.Shapes(Application.Caller).Fill.ForeColor
      If .RGB = RGB(255, 0, 0) Then
        .RGB = RGB(0, 255, 0)
      Else
        .RGB = RGB(255, 0, 0)
      End If
    End With
    End Sub

  • AW: Kommt leider Fehler ...
    11.12.2015 16:35:49
    Matthias
    Hallo Dieter,
    das kann ich nicht bestätigen, sein Code läuft perfekt. Du kannst ihn nur nicht händig ausführen, da in der Anweisung 'Application.Caller' der Name des Objektes steht, welcher das Makro aufruft. Drückst du also im VBA-Editor auf Play oder in Excel im Register Entwicklertools auf Makro ausführen, so klappt das nicht, weil kein Objekt dahinter steht.
    Mit einem Rechtsklick auf deine Ellipse - 'Makro zuweisen' wird dem Objekt das Makro zugeordnet, klickst du die Ellipse an, klappt es. Das Makro kannst du dann allen möglichen Objekten zuordnen ohne jedes Mal den Namen ändern zu müssen.
    lg Matthias

    Anzeige
    AW: Sorry, Mattias, aber bei mir ...
    11.12.2015 16:45:22
    Dieter(Drummer)
    ... kommt immer noch der Fehler. Mit Rechtsklickk habe ich der Form das Makro zugeweisen. Hier meine Musterdatei mit Sepp's, Makro: https://www.herber.de/bbs/user/102188.xlsm
    Was mache ich denn falsch?
    Gruß, Dieter(Drummer)

    AW: Sorry, Mattias, aber bei mir ...
    11.12.2015 16:50:14
    Sepp
    Hallo Dieter,
    da hast du beim kopieren irgendwelche unsichtbaren Steuerzeichen mitkopiert.
    Lösche die Leerzeichen vor dem If-Block, dann läuft es.
    Gruß Sepp

    Anzeige
    AW: Danke Sepp, das war's ...
    11.12.2015 16:56:33
    Dieter(Drummer)
    ... da lag das Problem, dass wohl durch kopieren Zeichen eingefügt wurden, die nicht da sein dürfen.
    Danke nochmal für deine Hilfe, die perfekt funktioniert.
    Noch einen schönen Tag und
    Gruß, Dieter(Drummer)

    AW: Sorry, Mattias, aber bei mir ...
    11.12.2015 16:54:34
    Daniel
    Hi
    der Code von Matthias ist schon richtig und funktioniert auch (ist ja auch der gleich wie mein Vorschlag)
    allerdings nutzt er eine eigene Funktion, um seinen Code hier im Forum entsprechend darzustellen.
    diese Funktion erzeugt die Einrückungen durch das geschützte Leerzeichen mit dem ASCII-Code 160 anstelle es normalen Leerzeichens mit dem Code 32.
    (das normale Leerzeichen am Anfang einer Zeile wird durch die Forensoftware entfernt, wenn du keine Codetags verwendest, allerdings lassen die Codetags keine weitere Formatierung zu, daher nimmt Matthias seine Funktion um den Code formatieren zu können)
    wenn du jetzt seinen Code per Copy-Paste in den VBA-Editor überträgst, dann stehen da am Anfang der eingerückten Zeilen jedenfalls diese Leerzeichen mit Code 160 und die versteht dein VBA-Editor nicht.
    Lösche also die Leerzeichen am Anfang jeder Zeile und mache die Einrückungen mit der TAB-Taste, dann läufts.
    Gruß Daniel

    Anzeige
    AW: Danke Daniel für Hinweis und wieder ...
    11.12.2015 16:58:48
    Dieter(Drummer)
    ... etwas gelernt :-). Jetzt klappt es prima.
    Gruß, Dieter(Drummer)

    Um die Ecke gedacht, aber sehr kurz
    11.12.2015 17:40:43
    RPP63
    Hi!
    With ActiveSheet.Shapes("Ellipse 2").Fill.ForeColor
    .RGB = 255 * IIf(.RGB = 255, 256, 1)
    End With
    
    Gruß Ralf

    AW: Danke Ralf, funktioniert auch prima
    11.12.2015 18:12:26
    Dieter(Drummer)
    ... Danke an alle Helfer für prima Lösungen.
    Gruß, Dieter(Drummer)

    AW: Um die Ecke gedacht, aber sehr kurz
    11.12.2015 18:21:47
    Daniel
    und es schränkt die Auswahl der Farben etwas ein, oder?

    AW: Ich komme damit gut klar ...
    11.12.2015 18:29:57
    Dieter(Drummer)
    ... für meinen Zweck. Danke Ralf.
    Jetzt suche ich nur noch, dass ebim Klick auf den Button ein Beep ertönt. Nur aus Interesse werde ich das noch ausprobieren.
    Gruß, Dieter(Drummer)

    Anzeige
    schon wieder ein endloser.......
    11.12.2015 18:36:30
    robert
    ..rot und grün und Beep und sprechen und tanzen usw.............

    OT: Hatte dich schon vermisst! ;-) Gruß owT
    11.12.2015 18:43:41
    Luc:-?
    :-?

    @Beide
    11.12.2015 18:45:55
    RPP63
    @Dieter:
    Dafür gibt es erstaunlicherweise den Befehl Beep
    @robert:
    LausÜberDieLeberLaufend?
    Gruß Ralf

    AW:Danke, Ralf und habe es schon geschafft.
    11.12.2015 18:51:30
    DieterDrummer)
    Gruß, Dieter(Drummer)

    Keine Laus,aber.....
    12.12.2015 17:19:30
    robert
    ..was anderes :-)
    Dieter ist meiner Schätzung mindestens 10 Jahre hier vertreten und er bringt Probleme,
    die ein "Anfänger" lösen könnte-wenn er wollte.
    Aber Dieter will anscheinend nicht und lässt Andere für ihn arbeiten.
    Das Problem mit den Leerzeichen vor den Codezeilen spricht Bände. Jemand der Excel sprechen lässt,
    der alles bunt haben will, der Töne haben will, sollte in der Lage sein,
    Leerzeichen zu finden !
    Aber statt selbst zu suchen und testen, schreibt er zig mal, dass es nicht geht!
    Es ist mir schon klar, dass ich mich auch raushalten könnte, aber wie ist das mit dem roten
    Tuch und dem Stier?
    ;-)
    Gruß
    robert

    Anzeige
    AW:robert, spar dir doch einfach deine Kommentare
    11.12.2015 18:56:39
    DieterDrummer)
    ... deine Kommentare sind kein gutes Image für's Forum und du solltest dies wohl besser lassen!
    Dennoch ein Gruß und ich hoffe, du lernst aus deinen sehr gut verzichtbaren Mitteilungen.
    Dieter(Drummer)

    Sicherlich nicht!
    11.12.2015 18:32:55
    RPP63
    Hi Daniel!
    Ich komme auf:
    255*256^0 = 255
    + 255*256^1 = 65.280
    + 255*256^2 = 16.711.680
    also 16.777.215 Farben.
    Dies dürfte fürs Erste reichen …
    Gruß Ralf

    Korrektur
    11.12.2015 18:36:06
    RPP63
    255^3, also nur 16.581.375 Farben
    Gruß Ralf

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige