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
Du musst angemeldet sein, um einen Kommentar abzugeben.
ja, du hast Recht, Sie schreiben, könnte ein Sub mit Ihrer Form als input-und schließlich füllen Sie es mit "ja" und "Nein" - Veranstaltungen. E. g.
ClickOnButton MyShape, YesNo
wo YesNo können Sie eine Flagge, löst eines der Ereignisse.Dann könnte man nennen, dass die Sub für jede Taste.
Ich würde auch vorschlagen, die Verwendung von einigen
With
s:With Activesheet.MyShape
wird gut gehen würde. Schließlich, verwenden Sie bitte nicht die.Select
. Es gibt Tonnen von Gründen, dies nicht zu tun und die meisten wählen nicht wirklich etwas in deinem code... Nun ja, ist es langsam nach unten.Ich werde Ihnen ein Beispiel geben, um zu versuchen, besser zu erklären: Man könnte eine Funktion schreiben geben, eine Form und ein Boolean (zum Beispiel) als eine Eingabe (das wäre der
YesNo
variable). Innerhalb des Unterprogramms können Sie schreiben die 2 verschiedenen Verhaltensweisen bedingt (If
...Else
...End If
) derYesNo
variable (oder tun wir es nennen wollenGreenRed
/ActiveInactive
?). In beiden Bedingungen, können Sie schreiben, was Sie wollen.Die folgenden verwendet werden können, sowohl für "ja" und "Nein" - Schaltflächen.
Können Sie dann in Ihrem Main-Programm schreiben
Example ActiveSheet.Shapes("yes"), True
um eine Schaltfläche zu aktivieren, sich selbst undExample ActiveSheet.Shapes("no"), False
zum deaktivieren des anderen.Bearbeitet meine Vorherige Antwort, um besser zu erklären was ich meinte 🙂
Dank Der Noldor. Ill versuchen Sie es und lassen Sie wissen, wie ich gehen.
Gerne helfen! Wenn Sie stolpern über neue Fehler, aktualisieren Sie Ihre Frage und ich werde geben ihm einen Blick
InformationsquelleAutor Noldor130884
So, nach der Einnahme einige Zeit Weg von diesem Ive begann mit den folgenden.
In diesem Beispiel habe ich 2 Formen (Quadrate)- "radio_1" und "radio_2". Ich habe auch eine Zelle, füllt mit einer Leistung ie "Radio 1 "ausgewählt". In Jeder Form habe ich die schriftart auf Wingdings und eine weiß-farbigen "tick" in jeder Form.
Habe ich auch erstellt separate Module - "radio" und "Stil" .Das radio-Modul enthält den code, der angibt, welche Form geklickt wurde und ruft dann die entsprechenden styling-makro (aktiv/inaktiv) aus der "style" - Modul.
Dies ist der code reduziert, hat den ursprünglichen code hatte ich oben stark und ist viel leichter zu manipulieren, aber Sie können denken, andere Wege zu machen diese noch mehr prägnante id Liebe zu sehen, es (immer noch lernen!)
- Und das style-Modul, das ändert die Farben des ausgewählten bzw. nicht ausgewählten Form (aktiv/nicht aktiv):
Dies funktioniert für mich und ich habe es angepasst zu replizieren, Checkboxen , Kippschalter, tabs, etc. Warum Sie Fragen können??? Ich finde das wesentlich flexiblere form einer design-Perspektive, AciveX-Steuerelemente. Manchmal Baue ich die Blätter, die ähnlich Aussehen und sich fühlen, websites und so habe ich die Möglichkeit eine ähnliche Funktionalität und design, ist erhältlich in aktuellen web-design.
Würde gerne hören, wenn diese weiter verbessert werden kann. Cheers
InformationsquelleAutor user1872463