Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1112to1116
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
CommandButton Verweis auf Zelle
Andre´
Hallo alle zusammen,
ich habe eine UserForm mit 154 CommandButton und ein Tabellenblatt ebenfalls mit 154 Zellen
Beim initialisieren der UserForm soll quasi jeder Button mit einer Zelle überprüft werden, ob ein "B" enthalten ist.
Wenn ja, dann soll die Farbe des Button rot sein.
In dem angehängten Bsp.: https://www.herber.de/bbs/user/65535.xls
CommandButton1 für Zelle E2
CommandButton2 für Zelle F2
.
.
CommandButton154 für Zelle Z8
habe ich manuell die Buttonfarbe rot gesetzt, so wie es nach der Initialisierung aussehen soll.
Hat Jemand eine Lösung, wie man so etwas automatisiern kann.
Vielen Dank im Voraus!
MFG Andre
AW: CommandButton Verweis auf Zelle
02.11.2009 16:38:17
Chris
Servus André,
in deinem Falle so:
Private Sub UserForm_Initialize()
Dim i As Long, zelle As Range, Bereich As Range
Set Bereich = Sheets("Tabelle2").Range("E2:Z8")
i = 1
For Each zelle In Bereich
If zelle.Value = "B" Then
Me.Controls("CommandButton" & i).BackColor = &HFF&
End If
i = i + 1
Next zelle
End Sub
Gruß
Chris
AW: Korrektur
02.11.2009 16:44:24
Chris
Servus André,
ich hatte das Zurücksetzten auf die Ausgangsfarbe nicht drin:
Private Sub UserForm_Initialize()
Dim i As Long, zelle As Range, Bereich As Range, z As Long
Set Bereich = Sheets("Tabelle2").Range("E2:Z8")
i = 1
For z = 1 To 154
Me.Controls("CommandButton" & z).BackColor = &H8000000F
Next z
For Each zelle In Bereich
If zelle.Value = "B" Then
Me.Controls("Commandbutton" & i).BackColor = &HFF&
End If
i = i + 1
Next zelle
End Sub
Gruß
Chris
Anzeige
CommandButtons gemäss Zellwert einfärben
02.11.2009 16:41:33
NoNet
Hallo Andre,
kopiere dazu das folgende Makro in das UserForm (Doppelklick auf UserForm im VBA-Editor und Code dort einfügen) :
Private Sub UserForm_Activate()
Dim cnt As Control
Dim intCB As Integer
intCB = -1
For Each cnt In Me.Controls
If TypeName(cnt) = "CommandButton" Then intCB = intCB + 1
cnt.BackColor = IIf(Cells(2 + intCB \ 22 _
+ , 5 + intCB Mod 22) = "B", vbRed, &H8000000F)
Next
End Sub
Die 2 bedeutet, dass die Werte in Zeile 2 der Tabelle beginnen, die 5 bedeutet, dass die Werte in Spalte 5 (=Spalte E) beginnen.
Die 22 bedeutet, dass es 22 Werte pro Zeile sind.
Das "B" ist der ausschlaggebende Wert : Bei "B" in der Zelle wird der CommandButton rot (vbRed), ansonsten bleibt er grau (&H8000000F).
Gruß, NoNet
Anzeige
AW: CommandButtons gemäss Zellwert einfärben
02.11.2009 17:13:49
Andre´
Hallo NoNet, Hallo Chris
Danke für die schnelle Hilfe, beide Varianten funktionieren.
Durch Eure Bsp habe ich gemerkt, dass der Button134 nicht nach der 133 angeordnet war sonder 135, 136, 137...134
Jetzt funzt aber alles.
Nochmals Vielen Dank!
MFG Andre
@NoNet
02.11.2009 19:42:35
Andre
Hallo NoNet,
Dein Bespiel funktioniert doch nicht richtig.
Habe Deinen Code kopiert und eingefügt und es kommt Syntaxfehler bei:
cnt.BackColor = IIf(Cells(2 + intCB \ 22 + , 5 + intCB Mod 22) = "B"....
Das habe ich wie folgt geändert
cnt.BackColor = IIf(Cells(2 + intCB \ 22, 5 + intCB Mod 22) = "B", ....
Nach dem Durchlauf werden jetzt z.B. von links oben die ersten 2 grau angezeigt dann rot, obwohl grau sein müsste.
Kannst Du bitte nochmals nachschauen. https://www.herber.de/bbs/user/65543.xls
Wenn nicht wäre es auch nicht so schlimm, denn die anderen Codes funktionieren.
Vielen Dank!
MFG Andre
Anzeige
Schuld ist "Das dreckige Dutzend" ;-)
02.11.2009 21:05:16
NoNet
Hallo André,
es stimmt : Die Farbreihenfolge der Commandbuttons ist mit meinem Code (respektive : mit Deinem UserForm) nicht OK.
Das liegt jedoch nicht direkt an meinem Code (dieser würde mit einem "sauber" erstellten UserForm einwandfrei funktionieren), sondern daran, dass zwischen "CommandButton1" und "Commandbutton2" noch der "CommandButton12" liegt.
Das lässt sich per Rechtsklick auf das UserForm - "Aktivierreihenfolge" auch sehr gut nachvollziehen.
Leider genügt es nicht, diese Aktivierreihenfolge zu korrigieren, da sich Excel intern "merkt", in welcher Reihenfolge die CommandButtons erstellt wurden und exakt diese Reihenfolge wird in der For Each...-Schleife abgearbeitet !
Userbild
Sehr gut nachvollziehen kannst Du das auch, wenn Du in alle Zellen das "F" einträgst, nur in die 2.Zelle (Zelle F2) das "B" !
Übrigens beinhaltet Deine Mappe noch etliche (überflüssige ?) Verweise auf diverse Libraries (z.B. "MS Voice Control" etc.), die zusätzliche Fehlerquellen bieten. Benötigst Du all diese Verweise in der Mappe ? - Falls nicht : Entferne diese Verweise und speichere die Mappe nochmals ohne diese Verweise.
Gruß, NoNet
Anzeige
AW: Schuld ist "Das dreckige Dutzend" ;-)
02.11.2009 21:31:38
Andre
Hallo NoNet,
vielen Dank für die Antwort,
habe auch alle überflüssigen Verweise entfernt.
Hast Du oder ein Anderer Helfer vielleicht noch eine Antwort auf :
https://www.herber.de/forum/messages/1113934.html
MFG Andre
AW: Schuld ist "Das dreckige Dutzend" ;-)
02.11.2009 22:11:31
Andre
Hallo alle zusammen,
ich habe mein Bsp. Datei auf NoNet Hinweis nochmals angepasst und die CommandButton neu erstellt, damit die "Aktivierreihenfolge" stimmt.
https://www.herber.de/bbs/user/65547.xls
Ich hoffe, dass auf meine Frage: https://www.herber.de/forum/messages/1113934.html
geanwortet wird.
Vielen Dank an Alle Helfer!
MFG Andre
Anzeige
Ich hab mal Deine Button neu geordnet
02.11.2009 17:00:52
Matthias
Hallo
Mein Vorschlag:
Ich habe dem Bereich der Tabelle einen Namen vergeben Name:="Bereich"
Setze für die Button generell die Farbe Rot als
.backcolor
.backstyle setzt Du auf 0
jetzt läuft eine kleine Schleife (For Each... ) die prüft ob in der Zelle ein "B" steht
die Variable X wird dabei immer um 1 erhöht (deshalb habe ich die Button neu angeordnet)
Da Deine Button alle CommandButton(x) heißen ist das so möglich.
Ich prüfe hier jetzt aber nicht ob es tatsächlich Commandbutton sind!
Ist nun ein "B" in der Zelle wird .backstyle für den einen Button auf 1 gesetzt.
Probiers einfach mal:
https://www.herber.de/bbs/user/65536.xls
Gruß Matthias
Anzeige
AW: Ich hab mal Deine Button neu geordnet
02.11.2009 17:27:43
Andre´
Hallo Matthias
auch Dein Bsp. funktioniert :-))
Vielen Dank!
MFG Andre
geht es auch umgedreht
02.11.2009 20:14:34
Andre
wenn jetzt die UserForm geladen ist und man einen Button drückt, dass dann in die dazu gehörige
Zelle geschrieben wird.
Z.B. CommandButton1 ist grau, also steht in der Zelle E2 ein "F"
auf druck soll nun in die Zelle E2 ein "B" geschrieben werden und somit wird der Button rot.
Kann man das auch über eine Schleife abarbeiten oder muss ich alle 154 Zellen zuweisen.
Ich hoffe mir kann Jemand ein Bsp. geben.
Vielen Dank an alle Helfer im Voraus!
MFG Andre
Zellwerte und Farbe toggeln per Klassenmodul
02.11.2009 23:07:32
NoNet
Hallo André,
natürlich könnte man für alle 154 CommandButtons eine entsprechende Routine programmieren, aber selbst ein Laie dürfte erkennen, dass das absurd wäre und dringend Optimierungsbedarf bestünde... ;-)
In VBA (bzw. auch in anderen Programmiersprachen) besteht daher die Möglichkeit mehrere Objekte (z.B. die 154 CommandButtons) als KLASSE zusammenzufassen und dann pauschal auf alle Member (bzw.Elemente) der Klasse zu reagieren.
Ich habe das nun für Dein UserForm (bzw. die darin enthaltenen CommandButtons) umgesetzt.
Die Klasse heißt hier clsCMD. DerCode in clsCMD gilt für jeden einzelnen CommandButton und wird jeweils beim Anklicken ausgeführt.
https://www.herber.de/bbs/user/65548.xls
Schau Dir den Code in den unterschiedlichen Module einfach mal in einer ruhigen Minute an und versuche ihn zumindest teilweise zu verstehen...
Zur besseren Orientierung der Buttons im UserForm habe ich diese zunächst in eine "saubere" Reihenfolge gebracht (siehe meinen Beitrag "Dreckiges Dutzend" oben !) und auch mit der entsprechenden Nummer beschriftet (die Codezeile kannst Du auch gerne wieder löschen).
Ich hoffe, das hilft Dir weiter, auch wenn ich Dir hier keinen ausführliche Kurs zum Thema "Klassenprogrammierung" anbieten kann ;-)
Gruß und Gute Nacht, NoNet
PS: Wozu dient dieses UserForm eigentlich, was wird damit bearbeitet ?
Anzeige
AW: Zellwerte und Farbe toggeln per Klassenmodul
03.11.2009 08:10:17
Andre´
Hallo NoNet,
das ist echt KLASSE!
Ich werde mich demnächst mal mit den KLASSEN auseinandersetzen, da steckt viel Potenzial drin.
PS: Wozu dient dieses UserForm eigentlich, was wird damit bearbeitet ?

Hiermit möchte ich eine Zeitleiste für eine Raumreservierung darstellen.
Also, nochmals vielen Dank für die ausführliche Beschreibung, Du hast mir damit sehr geholfen!
MFG Andre

310 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige