Optimieren von VBA zum Ändern der Form, Farbe auf klicken Sie auf in excel

Ich habe eine 'form' , enthält eine Reihe von Fragen auf einem Arbeitsblatt (Hinweis: dies ist nicht ein userform und möchte ich nicht verwenden).
Einige Antworten sind ja/Nein, andere haben mehrere Antworten wie der Menge (ie und die Antwort kann 1 oder 2 oder 3 oder 4 usw).

Das design der "form" auf diesem Arbeitsblatt fordert dazu auf, diese Antworten zu Formen, die der Benutzer klickt auf eine Schaltfläche, um zu wählen Sie Ihre Antwort - bitte beachten ich nicht verwenden Sie die Befehlsschaltflächen.

In diesem einfachen Beispiel habe ich 2 Rechteck Formen einen Namen als "ja" und einem Namen - "Nein"
Wenn Benutzer klickt auf "ja", die Farbe, die Füllung der Form ändert sich zu blau (und die "Nein" - Form weiß bleibt). Klickt der Benutzer auf "Nein" , "Nein" - Form, blau dargestellt, und "ja" geht weiß. Außerdem füllt und Antwort in A1 in diesem Beispiel.

Ich den folgenden code verwenden, welches einwandfrei funktioniert (obwohl ich sicher sein könnte, Schnitt unten etwas) aber das problem kommt, wenn ich wiederholen muss dieser code mehrere Male. Zum Beispiel, wenn ich eine Frage mit mehreren Antworten wie der Menge (Antworten könnten sein 1 oder 2 oder 3 oder 4 oder 5), dann wird jedes makro (also für die Taste "1" ) muss und "aktiv" Stück "coder" und "nicht aktiv" - Stück zu benennen, die Farben auf dem active-shape und all die anderen nicht-aktiven-Formen. Dies ist sehr repetitiv, und der code wird schnell langatmig.
Ich hoffte es gibt einen Weg, um die Formatierung (Füllfarbe, Schriftfarbe usw.) in ein separates makro, wie "Sub Active" und "Sub Non_Active" anstatt zu wiederholen, es von Zeit zu Zeit. Ich habe versucht, verwenden Sie "Anruf" zu greifen, das makro mit der Formatierung (wie Anruf Aktiv) aber bekomme immer eine Fehlermeldung.

Sub yes_button()

'active
ActiveSheet.Shapes("yes").Select
ActiveSheet.Shapes("yes").Fill.ForeColor.RGB = RGB(85, 142, 213)                          ' fill: dark blue color
ActiveSheet.Shapes("yes").Line.BackColor.RGB = RGB(198, 217, 241)                        ' border: light blue color
ActiveSheet.Shapes("yes").TextFrame.Characters.Font.Color = RGB(255, 255, 255)       '         text: white color
Range("A1").Formula = "YES" ' fills cell with button value

' nonactive
ActiveSheet.Shapes("no").Select
ActiveSheet.Shapes("no").Fill.ForeColor.RGB = RGB(255, 255, 255)                  '     fill: light blue color
ActiveSheet.Shapes("no").Line.BackColor.RGB = RGB(198, 217, 241)                  ' border: light blue color
ActiveSheet.Shapes("no").TextFrame.Characters.Font.Color = RGB(85, 142, 213)     ' text: dark blue color



End Sub

Sub no_button()

'active
ActiveSheet.Shapes("no").Select
ActiveSheet.Shapes("no").Fill.ForeColor.RGB = RGB(85, 142, 213)                       '     fill: dark blue color
ActiveSheet.Shapes("no").Line.BackColor.RGB = RGB(198, 217, 241)                      '    border: light blue color
ActiveSheet.Shapes("no").TextFrame.Characters.Font.Color = RGB(255, 255, 255)       ' text: white color
Range("A1").Formula = "NO" ' fill scell with button value
' nonactive

ActiveSheet.Shapes("yes").Select
ActiveSheet.Shapes("yes").Fill.ForeColor.RGB = RGB(255, 255, 255)                  ' fill: light blue color
ActiveSheet.Shapes("yes").Line.BackColor.RGB = RGB(198, 217, 241)                  '     border: light blue color
ActiveSheet.Shapes("yes").TextFrame.Characters.Font.Color = RGB(85, 142, 213)     '     text: dark blue color

End Sub

Würde schätzen, Anregungen.
Danke

InformationsquelleAutor user1872463 | 2014-07-15

Schreibe einen Kommentar