Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1288to1292
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

CMD per Klick umbenennen?

CMD per Klick umbenennen?
16.12.2012 17:10:59
Heike
Hallo liebes Forum,
ich habe eine Userform eingerichtet mit CommondBoxen. Diese haben aber noch keinen festen Namen, da diese vom Anwender OHNE in den VBA-Editor wechseln zu müssen, umbenennen dürfen. Leider weiß ich nicht, wie ich das umsetzen kann.
Entweder mit Rechtsklick auf die Schaltfläche und dort auf Umbenennen gehen oder den Button "Namen ändern" anklicken, dort den vorhandenen eingeben und diesen mit dem neuen überschreiben oder ...
Vielleicht hat jemand von euch eine Idee? Würde mich natürlich sehr freuen und sage schon einmal Danke.
https://www.herber.de/bbs/user/83024.xlsm
Gruß
Heike

46
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: CMD per Klick umbenennen?
16.12.2012 17:13:42
Hajo_Zi
Hallo Heike,
Warum? Der Code zum dem Schalter wirkt dann nicht mehr.

AW: CMD per Klick umbenennen?
16.12.2012 17:21:57
Heike
Hallo Hajo,
wieso wirkt er nicht mehr, wenn der Name umbenannt wird?
Gruß
Heike

AW: CMD per Klick umbenennen?
16.12.2012 17:24:01
Hajo_Zi
Hallo Heike,
der Code wurde erstellt für den Schalter Cmd_Ok, Gibt's Du nun den Schalter einen neuen Namen wirkt der Code Cmd_Ok_click nicht mehr, da der Schalter einen anderen Namen hat.
Gruß Hajo

Anzeige
AW: CMD per Klick umbenennen?
16.12.2012 17:27:52
Heike
Hallo Hajo,
ich möchte nicht die cmd umbenennen (der Betreff ist etwas unglücklich gewählt), sondern der Name beispielsweise "Kunde 9" soll umbenannt werden in beispielsweise "Becker GmbH" und "Kunde 10" in beispielsweise "Kaiser GmbH".
Geht das?
Gruß
Heike

AW: CMD per Klick umbenennen?
16.12.2012 17:30:06
Hajo_Zi
Hallo Heike,
keine Ahnung was Du willst.
Ich bin der Auffassung Du kannst den Steuerelementen zur Laufzeit keinen anderen Namen geben.
Gruß Hajo

AW: CMD per Klick umbenennen?
16.12.2012 17:39:16
Heike
Hallo Hajo,
ich möchte die Caption ändern, ohne in den VBA-Editor gehen zu müssen. Evtl. über eine neue Schaltfläche?! Hatte ich ja schon eingefügt, nur ohne Code, da ich nicht weiß, wie der lauten muss.
Gruß
Heike

Anzeige
AW: CMD per Klick umbenennen?
16.12.2012 17:44:28
Hajo_Zi
Hallo Heike,
ich wieder mich warum.
Erstelle ich ein Programm dann haben die Schalter eine Beschriftung für die Funktion die sie auslösen z.B. Löschen welchen Sinn macht es diesen Schalter umzubenennen in "Heike" da sieht man die Funktion nicht mehr. Und falls die Beschriftung mal geändert werden muss mache ich dies im Programm, da sind dann aber auch die unterschiedlichen Aktionen abgelegt.
Also solche Programme habe ich noch nicht erstellt wo der Benutzer die Beschriftung ändert.
Ich bin dann raus.
Gruß Hajo

Anzeige
AW: 2 Commandbutton + 1 Textbox
16.12.2012 19:35:18
Heike
Hallo Matthias,
danke für deine Hilfe, nur weiß ich nicht, wie ich deine Lösung auf meine Tabelle umsetzen kann.
Hatte probiert, die Namen in einem neuen Tabellenblatt untereinander zu schreiben und mit folgendem Code zu aktualisieren, funktioniert leider nicht :-(
"Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Address
Case "$A$1"
Sheets("Farbe").UserForm1.CommandButton15.Caption = Target.Text
Case "$A$2"
Sheets("Farbe").UserForm1.CommandButton16.Caption = Target.Text"
Gruß
Heike

Anzeige
lad doch mal ein eigenes Beispiel hoch ...
16.12.2012 20:04:58
Matthias
Hallo Heike
Zitat:

danke für deine Hilfe, nur weiß ich nicht, wie ich deine Lösung auf meine Tabelle umsetzen kann.
Ich weiß das auch nicht, Heike. Deine Datei kenne ich nicht.
Erstelle doch eine Beispieldatei, entferne persönliche Informationen
Beschreibe dann bitte in der Datei was Du wann erwartest.
Die Datei kannst Du dann hier hochladen
Beachte dabei die Dateigröße und Tiefe der Verzeichnisebene.
Gruß Matthias

AW: lad doch mal ein eigenes Beispiel hoch ...
16.12.2012 20:10:29
Heike
Hallo Matthias,
ja habe ich doch ... in meinem 1. Beitrag ist die Beispieldatei.
Danke dir für deine Unterstützung, bin echt schon am verzweifeln.
Gruß
Heike

Anzeige
AW: lad doch mal ein eigenes Beispiel hoch ...
16.12.2012 20:29:16
Matthias
Hallo
Habe mir die Datei angeschaut kann aber keine Verbindung zu diesem Beitrag finden
Hier bin ich eingestiegen:
https://www.herber.de/forum/archiv/1288to1292/t1291102.htm#1291108
Dort wolltest Du den .Caption - Wert eines Buttons ändern.
Dazu habe ich Dir auch ein funktionierendes Bsp hochgeladen.
Was das Ganze jetzt mit Farben zu tun hat entzieht sich meiner Kenntnis.
Du solltest versuchen genauer zu beschreiben was Du umsetzen möchtest.
So (also ohne verständliche Beschreibung) kann ich Dir leider nicht helfen.
Gruß Matthias

Anzeige
AW: lad doch mal ein eigenes Beispiel hoch ...
16.12.2012 20:46:06
Heike
Hallo Matthias,
die Buttons sollen den markierten Zellbereich in der entsprechenden Farbe füllen. Das funktioniert ja auch. Nun möchte ich, das lediglich die Beschriftung des Buttons (Caption) geändert werden kann, ohne in den VBA-Editor gehen zu müssen.
Kunde9 umbenennen in Becker GmbH (als Beispiel).
Danke für deine Unterstützung.
Gruß
Heike

so geht das nicht, Heike ...
16.12.2012 21:29:58
Matthias
Hallo
Du willst auf ein Button klicken - der markierte Bereich der Tabelle bekommt die im Code hinterlegte Farbe und soll dann den .Caption-Wert z.B. Becker.GmbH erhalten ?
Was macht das für einen Sinn? Du enlädst nach jedem Klick auf jedes Button das Formular.
Somit wäre auch der neue String für .Caption wieder weg.
Gruß Matthias

Anzeige
Das hast du wohl nicht gut ...
17.12.2012 01:23:20
Luc:-?
…durchdacht, Heike,
da hat Matthias vollkommen recht. Alternativ könnte man sicher auch mit (ggf auch anderen) Steuerelementen arbeiten, die nach Bedarf ein und ausgeblendet wdn.
Wenn du deinen Kunden bzw MAn/Kollegen eine individuelle PgmEinrichtung erlauben willst, ist es üblich, so etwas in einem extra Initialisierungslauf zu tun. Das Ergebnis der Einstellungen muss dann natürlich gespeichert wdn, sonst ist es bei Neustart weg. Das gilt für jede Änderung des Userforms während der Laufzeit, die manifest wdn soll. Sollte sie das nicht, entbehren deine von Matthias geschilderten Aktionen tatsächlich der Sinnhaftigkeit.
Morrn, Luc :-?

Anzeige
AW: Das hast du wohl nicht gut ...
17.12.2012 07:16:08
Heike
Hallo, guten Morgen ihr Zwei,
nein, ich habe lediglich ein paar Button mehr eingefügt, als Kunden vorhanden sind. Kommt zukünftig ein neuer Kunde hinzu, bekommt diese Schaltfläche einen festen Kundennamen.
Gruß
Heike

Dann die Captions in einem extra Blatt speichern
17.12.2012 10:12:23
Klaus
Hallo Heike,
mach doch ein Extra Blatt, in dem steht zB.
Spalte A / Spalte B
Button1 / Müller GmbH
Button2 / Meier Transporte
Button3 / frei

und bei jeder Userform-Start weisst du den Buttons diese Werte zu:
Button1.caption = sheets("ExtraBlatt").Range("B1").value
Button2.caption = sheets("ExtraBlatt").Range("B2").value
Button3.caption = sheets("ExtraBlatt").Range("B3").value

Und dann sollte das gehen, oder?
Grüße,
Klaus M.vdT.
(wie oft kommen denn neue Kunden dazu? Wenns jeden Tag 5 sind, würd ich tatsächlich einen ähnlichen Weg gehen wie du hier einschlägst. Ist es aber nur einer alle paar Jahre, dann geht man eben den umständlichen Weg über den VBA-Editor ...)

Anzeige
Gute Idee
17.12.2012 13:53:06
Heike
Hallo Klaus M.vdT.,
ja, die Idee ist sehr gut und funktioniert "fast".
Das Einzige, ich muss die Userform auf meinem Blatt ein 2. Mal öffnen, damit die Namen übertragen werden. Woran kann das liegen? Aber ansonsten ist es so, wie ich es gerne haben möchte :-)))))
Habe die neue "Testdatei" mal angefügt:
https://www.herber.de/bbs/user/83033.xlsm
Danke!
Gruß
Heike

AW: Texbox als CMD verwenden
17.12.2012 11:20:39
Daniel
Hi
du könntest so vorgehen:
1. Verwende Textboxen anstelle der Buttons.
- setze die Locked-Eigenschaft der Textboxen auf false
- verlinke jede Textbox über die Controlsource-Eigenschaft mit einer freien Zelle
- schreibe in diese Zelle Überschrift
- verwende zum Ausführen des Codes das ENTER-Event der Textbox (anstelle des Click-Events der alten Commandbuttons)
die Textbox verhält sich jetzt so wie die alten Commandbuttons.
2. zum Ändern der Beschriftung reicht es jetzt, wenn du die Locked-Eigenschaft der Textboxen auf FALSE setzt.
dann können die Texboxinhalte vom Anwender überschrieben werden und die Inhalte werden über die Controlsource in einer Zelle dauerhaft gespeichert.
um wieder normal mit den Buttons arbeiten zu können, musst du die Locked-Eigenschaft wieder auf TRUE setzen.
Hierfür eignet sich ein Togglebutton sehr gut.
guckst du Beispieldatei:
https://www.herber.de/bbs/user/83031.xlsm
Gruß Daniel

AW: Texbox als CMD verwenden - korrektur
17.12.2012 11:25:49
Daniel
sorry muss im Punkt 1 natürlich heißen:
- setze die Locked-Eigenschaft der Textboxen auf true
Gruß Daniel

AW: noch ne korrektur
17.12.2012 14:15:36
Daniel
Sorry, das Unload ME im Enterevent der Textboxen muss natürlich innerhalb des If-Blocks stehen, damit du die Überschriften in der Textbox ändern kannst:
Private Sub TextBox1_Enter()
If Not ToggleButton1 Then
Selection.Interior.Color = TextBox1.BackColor
Unload Me
End If
End Sub
Gruß Daniel

AW: noch ne korrektur
17.12.2012 14:19:26
Heike
Huuuch ... Hallo Daniel,
sorry, hatte deinen Beitrag ganz übersehen (stand zu weit links).
Habe mir dir Datei gerade mal angeschaut, sieht ja auch schon gut aus, werde es gleich ausprobieren.
Auch dir herzlichen Dank!
Gruß
Heike

AW: noch ne korrektur
17.12.2012 21:21:40
Heike
Hallo Daniel,hallo Klaus M.vdT
nochmals danke für eure Vorschläge. Der von Klaus M.vdT passt am besten, da ich die Tabellenblätter kopiere und somit die Namen immer aktuell sind. Nur ist hier leider immer noch das Problem, dass erst beim 2. Öffnen der Userform die Namen aktualisiert werden.
Hat vielleicht noch jemand eine Idee? Wäre wirklich klasse.
Danke schön.
Gruß Heike

AW: noch ne korrektur
18.12.2012 09:11:14
Klaus
Hallo Heike,
achso hier links gehts weiter :-)
Wo aktualisierst du denn die Captions? Im Initialize-Ereigniss der Userform? Wenns da nicht geht, versuch mal die Captions direkt vor dem Userform.show zu ändern. Du wirst ja irgendwo einen Button oder sowas haben der die Userform aufruft, der müsste circa so aussehen:
Sub CommandButton99_click()
UserForm1.show
end sub
Gebe schon hier die neuen Captions an die Userform
Sub CommandButton99_click()
UserForm1.Button1.caption = sheets("anderesSheet").Range("B2")
UserForm1.Button2.caption = sheets("anderesSheet").Range("B3")
UserForm1.show
end sub
und dann müsste es schon beim ersten mal funktionieren.
Vielleicht hilft auch ein "me.repaint" im initialise-Ereigniss.
Grüße,
Klaus M.vdT.

nochmal richtig (ich hab in die Datei geschaut)
18.12.2012 09:19:10
Klaus
Hallo Heike,
du hattest oben deine Datei verlinkt, da hab ich mal reingeschaut. Der "Fehler" war genau der von mir vermutete:
Private Sub CommandButton18_Click()
UserForm1.Show
UserForm1.CommandButton21.Caption = Sheets("Tabelle1").Range("B1").Value
UserForm1.CommandButton20.Caption = Sheets("Tabelle1").Range("B2").Value
UserForm1.CommandButton23.Caption = Sheets("Tabelle1").Range("B3").Value
End Sub

du zeigst ERST die Userform, und änderst DANN die Buttons. Sichtbar wirds erst das nächste mal. Einfacher weg: das ganze drehen.
Private Sub CommandButton18_Click()
UserForm1.CommandButton21.Caption = Sheets("Tabelle1").Range("B1").Value
UserForm1.CommandButton20.Caption = Sheets("Tabelle1").Range("B2").Value
UserForm1.CommandButton23.Caption = Sheets("Tabelle1").Range("B3").Value
UserForm1.Show
End Sub
Das machst du eben für jeden deiner drei Buttons und es funktioniert.
ABER:
Szenario: Morgen kommen noch 12 Blätter dazu, und noch 15 Buttons in der Userform. Ausserdem benennst du einige Buttons um. Jetzt musst du jede Änderung X-Mal in den Code der einzelnen Userform-Aufruf-Buttons schreiben, und einen vergisst du bestimmt ... darum machen wirs gleich besser und lassen deun Userform-Aufruf-Button unberührt:
Private Sub CommandButton18_Click()
UserForm1.Show
End Sub

und schreiben das ganze Button-Caption-Gehabe EINMALIG in das Start-Ereignis der Userform:
Private Sub UserForm_Initialize()
Me.CommandButton21.Caption = Sheets("Tabelle1").Range("B1").Value
Me.CommandButton20.Caption = Sheets("Tabelle1").Range("B2").Value
Me.CommandButton23.Caption = Sheets("Tabelle1").Range("B3").Value
End Sub
und dann ist das sogar recht sauber programmiert ;-)
Grüße,
Klaus M.vdT.

Noch ein Nachtrag: vbmodeless
18.12.2012 09:27:02
Klaus
Hallo Heike,
noch ein Vorschlag zur Güte (hat nichts mit deiner Fragestellung zu tuen)
statt UserForm1.Show benutze UserForm1.show vbmodeless. Dann schmeiss von den Kundenbuttons jeweils das Unload Me raus.
Jetzt kann die Userform während der Arbeit in der Tabelle offen bleiben, der User sieht die Selection während er einfärbt und überhaupt spart man sich den ständigen click auf das Button für jedes einfärben. Doof zu erklären, probiers mal aus es ist einfacher :-)
Dass deine Userform übermäßig ausladend groß ist werde ich hier nicht sagen, da ich davon ausgehe dass du sie für den Dateiupload abgespeckt hast und dort sonst noch viel mehr drinnen ist.
Grüße,
Klaus M.vdT.

AW: Noch ein Nachtrag: vbmodeless
18.12.2012 10:25:27
Heike
Guten Morgen Klaus M.vdT,
ja, das ist ja "sauber" :-)
Und ohne UnloadMe gefällt es mir auch besser. Also, in der Testdatei klappt es jetzt wunderbar. Werde es heute Nachmittag an der echten ausprobieren. Aber die hat nur ca. 10 Buttons, geht doch oder?
Vielen vielen Dank für deine Unterstützung, bin gerade mal richtig glücklich.
Werde mich evtl. noch mal melden, falls ich auf ein Problem stoße ok?
Danke dir und einen schönen Tag.
Gruß
Heike

Danke für die Rückmeldung! mit Text
18.12.2012 10:35:28
Klaus
Hallo Heike,
danke für die Rückmeldung, freut mich geholfen zu haben! Klar, frag gerne nochmal wenn noch was ist. Wenn dieser Thread dann bereits im Archiv ist, darfst du gerne meinen Namen in die Betreffzeile eines neuen Threads übernehmen damit ich dich auch finde :-)
Noch was (schon wieder was anders) von meiner Seite:
In deiner Testdatei sind die Buttons nur "CommandButton1" bis "CommandButton999" benannt, aber es ist ja nur eine Testdatei. Ich gehe davon aus, in deinen "echten" Dateien vergibst du nachvollziehbare Namen für jedes Objekt. Wenn nicht: fang damit an :-)
Grüße,
Klaus M.vdT.

AW: Danke für die Rückmeldung! mit Text
18.12.2012 10:44:08
Heike
Hey Klaus M.vdT.,
hmmm *räusper* - nein, mache ich nicht. Heißen tatsächlich CommandButton1 bis 999!!! Bin ja für jeden Hinweis dankbar und erst einmal froh, dass es rund läuft. Werde sie mal umbenennen (links im Eigenschaften-Fenster wird das gemacht oder?)
Gruß
Heike

Button Properities
18.12.2012 10:55:59
Klaus
Hi,
im Sheet: Entwurfsmodus an, rechtsclick auf den Button, "Properities" (auf Englisch ... Deutsch? keine Ahnung, ich glaub "Eigenschaften") und dann ganz oben den Namen ändern. Kannst dir hier die anderen Eigenschaften auch ansehen, sind ein paar ganz nette Spielereien dabei.
Im VBA: genauso :-) Rechtclick auf den Button, dann "Properites" und dann den Namen ändern.
Überleg dir eine eigene Konvention, wie du die Dinger benennen willst. Ich vergebe gerne lange, eindeutige Namen - ZB würd ich den "UserFormAufrufen" Button in deinem Sheet3 "CmB_ZeigeUserFormSheet3" nennen - aber finde da deinen eigenen Weg.
Du wirst jetzt relativ viel "unnötige" Arbeit damit haben (denn es funktioniert ja bereits!), da du im Code auch alle Namen per Hand ändern musst. Gewöhnt man sich an, allen Objekten immer gleich als erstes einen richtigen Namen zu geben, hat man keine Mehrarbeit.
Jetzt gerade brauchst du das warscheinlich nicht, aber es gehört einfach zum guten und sauberem Stil das zu machen. Und wenn du in naher Zukunft mal ein größeres VBA Projekt startest, bist du froh dir das gleich anzugewöhnen :-)
Wenn ein Projekt erstmal um die 200 Buttons, Checkboxen, Userforms usw usw hat und du findest irgendwo im Code die Zeile "CommandButton197.enabled = FALSE" ... dann kommt nur das Fragezeichen im Gehirn. Steht da aber "CmB_ZeigeUserFormSheet3.enabled = FALSE" dann weisst du sofort: aha, hier verhindere ich das aufrufen der UserForm aus Sheet3 heraus.
Grüße,
Klaus M.vdT.

AW: Danke für die Rückmeldung! mit Text
18.12.2012 11:57:53
Matthias
Hallo
Ist doch gar nicht so schwer, Heike
Userbild
Du gibst dem Button 1 den ObjektNamen: Kunde1 (eingerahmt)
Die Eigenschaft: Caption wir dann im Code geändert. Der ObjektName bleibt bestehen
Wen Du so Deine Objekte übersichtlich benennst, hast Du es später leichter
Dich in Deinem eigenen Programm zurechtzufinden.
Ich hab auch nochmal nachgelegt, kannst ja mal schauen.
https://www.herber.de/bbs/user/83056.xls
Farbänderung der Zellen sind im Bsp. nur ab Spalte(C) möglich um ein versehentliches Entfernen
zu verhindern.
Ich habe im Bsp alle Commandbutton in einem eigenen Frame. Dadurch kann ich die Controls über eine For Each Schleife leichter ansprechen. Aber schau es Dir einfach mal an.
Gruß Matthias

AW: Danke für die Rückmeldung! mit Text
18.12.2012 12:10:08
Klaus
Hi Matthias,
zwei Anmerkungen von mir:
Dim ctrl As Control, i%
For Each ctrl In Frame1.Controls
ctrl.Caption = IIf(Range("B" & i + 1).Value = "x", Range("A" & i + 1).Value, "")
ctrl.Enabled = IIf(ctrl.Caption = "", 0, 1)
i = i + 1
Next

ist natürlich viel besser als mein repetives "Button1.caption = Range("A2") / Button2.caption [...]", keine Frage. Aber es ist auch ein bisschen Overkill, wenn das Level mit "nur Rekorder" angegeben ist, oder? Ich behaupte einfach mal, Heike kann 'mein' Codefetzen intuitiv verstehen und umsetzen, während 'dein' Code ihr nur Bahnhof sagt.
Du zeigst die UserForm mit .show und hast die Eigenschaft der Userform selbst auf showModal=False gesetzt. Danke sehr, ich wusste nicht dass das geht und mir hilft das weiter! Aber schon eine fiese Falle für Heike, direkt nachdem ich ihr das .show vbmodeless Kommando gezeigt habe :-)
Was mir sehr gut gefällt ist, wie du Heikes Userform "aufgeräumt" hast und der Hinweis mit dem Frame ist natürlich auch richtig.
Deine Buttons heissen "Kunde1" usw .. ich würd immer die Art des Objekts voranstellen, also "CmB_Kunde1" oder "CheckBox_Kunde1", aber jedem seine Konvention.
Die Objekte "Frame1", "Frame2" und "CommandButton10" und "CommandButton18" haben von dir keine Namen bekommen - wenn schon den schon!
Von mir:
vielen Dank für For Each ctrl In Frame1.Controls, das kannte ich noch nicht! Und zufällig hätte ich genau das für ein anderes Projekt von mir grad gebraucht.
Grüße,
Klaus M.vdT.

@Klaus
18.12.2012 12:56:58
Matthias
Hallo Klaus


das mit dem Level ...

  • ist für micht ein ewiges Ärgernis, weil nie korrekt einstellbar(leider):(




Aber schon eine fiese Falle für Heike, direkt nachdem ich ihr das .show vbmodeless Kommando gezeigt habe

  • Wieso Falle, es stört ja nicht.




ich würd immer die Art des Objekts voranstellen, also "CmB_Kunde1" oder

  • Richtig Klaus, das mach ich sonst auch so (also Sorry) ;-)




"CommandButton10" und "CommandButton18" haben von dir keine Namen bekommen

  • Diese Objete sind aber auch nicht in meiner Bsp.Datei vorhanden ;-)




vielen Dank für For Each ctrl In Frame1.Controls, das kannte ich noch nicht! Und zufällig hätte ich genau das für ein anderes Projekt von mir grad gebraucht.

  • Wow wie das gerade passt ;-)




Frame2 habe ich übrigens nun entfernt, das Objekt hatte eh nur visuelle Bedeutung.
Im Grunde liegen wir doch in allen Dingen nah beieinander ;o)
Bis zu nächsten Mal ...
Gruß Matthias

AW: Danke für die Rückmeldung! mit Text
18.12.2012 13:09:55
Heike
Hallo ihr Zwei,
unglaublich, was so alles möglich ist!!!!
Tatsächlich kann ich nicht programmieren, ich suche mir das Eine oder Andere aus diesem Forum heraus und habe Spaß daran, mir etwas zusammen zu bauen, manchmal klappt es, manchmal aber auch nicht ;-). Von daher kann ich den Code von Klaus M.vdT. gut nachvollziehen. Mit dem Eigenschaften-Fenster kenne ich mich auch aus, habe dort schon viel ausprobiert und instinktiv hätte ich auch hier die Boxen umbenannt.
Matthias, die UserForm (bzw. Frames) füllt sich aus dem aktuellen Tabellenblatt. Ist es möglich, so wie in unserem vorherigen Beispiel, die Tabelle als ein separates Blatt im Code anzusprechen? Da ich die Blätter (Register) kopiere, möchte ich nicht immer die Kundentabelle mit übernehmen.
Ansonsten: Bin echt begeistert und freue mich schon darauf, alles mal "in echt" auszuprobieren :-)
Dankeschön.
Gruß
Heike

AW: Danke für die Rückmeldung! mit Text
18.12.2012 13:26:14
Daniel
Hi
also wenn man sich Programmierarbeit sparen will, weil man das mit dem Programmieren nicht so gut kann, dann sollte man sich die verwendeten Steuerelemente sehr genau aussuchen.
wenn es wie im Beispiel von Klaus nicht erforderlich ist, daß die Buttons in der Userform selbst farbig sind und wenn es zulässig ist, daß man die Beschriftungen und Farben in einer kleinen Exceltabelle pflegt, dann würde ich statt der vielen Buttons eine Listbox verwenden.
damit kommt man dann mit minimalen Code aus.
der Code selbst braucht auch nicht verändert werden, wenn sich Farben ändern oder neue Einträge zur Liste hinzkommen oder wegfallen, hierzu muss man nur die Einträge in der Tabelle ändern, die Listbox passt sich dann automatisch an.
Einzige Bedingungen sind:
in der Liste, in der die Einträge stehen, dürfen keine Leerzellen dazwischen vorhanden sein und unterhalb der Liste (hier Spalte A) dürfen keine weiteren Werte stehen.
zusätzlich zur Makroprogrammierung wird noch ein berechneter Name für die Datenquelle der Listbox verwendet (Rowsource).
hier das Codebeispiel: https://www.herber.de/bbs/user/83058.xls
der erforderliche Makrocode für das Einfärben der selektierten Zellen beschränkt sich auf diese Zeile:
Private Sub ListBox1_Click()
With ListBox1
If .ListIndex >= 0 Then Selection.Interior.Color = Range(.RowSource).Cells(.ListIndex + 1, 1) _
.Interior.Color
End With
End Sub
und diese Namensdefinition für den Zellbereich der RowSource:
Name: Liste, Bezieht sich auf: =BEREICH.VERSCHIEBEN(Blanko!$A$1;0;0;ANZAHL2(Blanko!$A:$A);1)
that's all
Gruß Daniel

Namensvergabe!
18.12.2012 14:05:04
Klaus
Hi Daniel,
du hast den Namen der Listbox nicht geändert!
Echt schöne Lösung, vor allem der "Kniff" aus der Listbox-Position die Hintergrundfarbe der entsprechenden Zelle herauszusuchen. Ich hätte die Listbox im Initialise der Userform gefüllt, um mir die aufwendige Namensdefinition mit OFFSET zu ersparen, aber viele Wege führen nach Rom.
Magst du mir eins erklären:
Warum funktioniert "Range(.RowSource)" ohne direkte Referenzierung auf eine Tabelle? Ich hätt jetzt gedacht, diese Range bezieht sich auf das "ActiveSheet" und funktioniert nicht mehr beim Tabellenwechsel - dem ist aber nicht so.
Grüße,
Klaus M.vdT.

AW: Namensvergabe!
18.12.2012 14:20:08
Daniel
Hi
die Namensvergabe überlasse ich dem Fragesteller, der muss da eh seine eigene Systematik einbringen.
und da es sich eh nur um ein Steuerelement handelt, ist das auch nicht so tragisch.
Danke für das Lob.
zur Frage:
- in der RowSource steht ein Excelname
- Excelnamen sind nicht nur eine Addresse, sondern haben den Tabellenblattbezug gleich eingebaut
- Excelnamen können daher auch direkt als Parameter für die Range-Funktion verwendet werden. Solange man mit der aktiven Datei arbeitet, ist dann die Sheetangabe vor der Range nicht erforderlich.
aber auch ohne Namen kann man die RowSource auf ein bestimmtes Tabellenblatt verlinkten:
RowSource: Blanko!A1:A10
das kann man übrigens auch direkt in der Range verwenden:
Sheets("Blanko").Range("C1").Value = "Hallo Welt"
Range("Blanko!C1").Value = "Hallo Welt"
beides funktioniert, zumindest in der aktiven Datei.
Gruß Daniel

Danke für die Nachhilfe!
18.12.2012 14:24:56
Klaus
man hört nie auf zu lernen.
Grüße,
Klaus M.vdT.

klar geht das auch ...
18.12.2012 17:49:46
Matthias
Hallo Heike
https://www.herber.de/bbs/user/83065.xls
Farbänderungen aus dem Code heraus weden nicht in der Tabelle("Blanko") ausgeführt.
Die Farben für die Commandbutton hole ich mir aus den entsprechenden Zellen.
Es gibt viele Varianten. Du musst selbst wissen was für Dich in Frage kommt.
Was Du damit allerdings vorhast würde mich schon interessieren.
Gruß Matthias

AW: klar geht das auch ...
18.12.2012 22:36:14
Heike
Hallo Matthias,
vielen Dank für die Erweiterung. Jetzt habe ich so viele Möglichkeiten, da muss ich mich erst einmal durchwurschteln, bin mir aber sicher, es wird perfekt funktionieren :-)
Was ich vorhabe:
Jeder Mitarbeiter hat ein eigenes Tabellenblatt mit verschiedenen Kundeneinsätzen. Jede Zelle ist ein Tag und wenn der Mitarbeiter 4 Tage bei Meier GmbH war, werden 4 Zellen markiert und entsprechend dem Kunden farblich hinterlegt. Mit einer Zählenwenn auf Farbe werte ich die Einsätze anschließend aus (übrigens per VBA, auch hier im Forum gefunden, klappt suuuuuper).
Da in den zu markierenden Zellen aber noch Textkürzel und Zahlen stehen, für andere Auswertungen, benötige ich die Farben.
Hört sich ja eigentlich simpel an, irgendwie wurde das aber doch zum riesen Problem.
Es ist klasse, was mir jetzt hier für Möglichkeiten geboten wurden. Bin echt happy.
Viele Grüße
Heike

ganz neuer Ansatz:
18.12.2012 13:48:50
Klaus
Hallo zusammen,
nachdem sich jetzt ein paar mehr Leute dem Projekt angenommen habe, starte ich wieder ganz links mit einem neuen Ansatz:
So wie ich die Datei verstehe, werden diverse Kundennamen per Button farbig hervorgehoben. Vielleicht ist das ja schon zuviel des guten?
Idee: in einem seperatem Blatt werden alle Kunden gelistet, dazu der Farbcode.
Beispiel "Tabelle1"
Spalte A - Spalte B
Meier GmbH - 36
Müller AG - 39
Inter Trans - 43

per Button wird jetzt NICHT eine Userform aufgerufen, sondern es werden alle Kunden über alle Blätter automatisch entsprechend eingefärbt.
Das ganze ginge zwar auch per bedingter Formatierung, währ dann aber etwas aufwendiger zu pflegen als ein entsprechendes Makro.
Heike,
währ das eine Option für dich? Dann bräuchte ich mal eine Musterdatei (möglichst identisch mit deinem Dateiaufbau), in dem in den einzufärbenden Blättern ein paar Daten und Kundennamen stehen. Vielleicht auch ein Muster, wie diese einzufärben sind (ich nehme an, die ganze Zeile ...)
Grüße,
Klaus M.vdT.

AW: ganz neuer Ansatz:
18.12.2012 14:55:46
Heike
Hey Klaus,
mir raucht der Kopf :-))))
Es geht darum, jeder Kunde hat eine eigene Farbe und wenn ich in meiner Tabelle Zellen markiere, diese beinhalten Zahlen oder Textkürzel, möchte ich auf den entsprechenden Kundenbutton klicken und automatisch werden diesen Zellen die Farbe zugeordnet. Funktioniert nicht mit bedingter Formatierung, da keine Kundennamen hinterlegt sind.
Also, jeder Mitarbeiter hat ein eigenes Tabellenblatt mit verschiedenen Kundeneinsätzen. Jede Zelle ist ein Tag und wenn der Mitarbeiter 4 Tage bei Meier GmbH war, werden 4 Zellen markiert und entsprechend dem Kunden farblich hinterlegt. Mit einer Zählenwenn auf Farbe werte ich die Einsätze anschließend aus.
Gruß
Heike

AW: ganz neuer Ansatz:
18.12.2012 15:00:26
Klaus
Funktioniert nicht mit bedingter Formatierung, da keine Kundennamen hinterlegt sind.
Alles klar, dann funktioniert meine Idee auch nicht.
Grüße,
Klaus M.vdT.

ListBox finde ich klasse :-)
18.12.2012 23:26:58
Heike
Hallo,
jetzt habt ihr euch alle so viel Mühe gemacht - vielen Dank dafür.
Nachdem ich nun alles durchgetestet habe, ist es für spätere Änderungen einfacher, den Vorschlag von Daniel zu nutzen:
https://www.herber.de/bbs/user/83058.xls
Daniel, ist es möglich, die Kundennamen in einem extra Tabellenblatt (Kunden) zu hinterlegen,und deinen Code entsprechend anzupassen? Habe es versucht, sogar den "Namen in den Eigenschaften" geändert, klappt aber nicht :-(
Wie auch immer, ich kenne jetzt den Unterschied zu Frame/ListBox/CommandBox ... wirklich klasse.
Vielen herzlichen Dank noch einmal an euch!
Gruß
Heike

AW: ListBox finde ich klasse :-)
18.12.2012 23:58:53
Daniel
Hi
klar kannst du die Kunden-Farb-Tabelle auch in einem anderen Tabellenblatt platzieren.
Das Tabellenblatt muss sich nur in der gleichen Datei befinden.
Am Code selbst musst du gar nichts anpassen.
Du musst nur schauen, daß der verwendete Name (Liste) auf den richtigen Zellbereich verweist.
Gruß Daniel

AW: ListBox finde ich klasse :-)
19.12.2012 07:24:15
Heike
Guten Morgen Daniel,
super, habs im NamensManager gefunden, hattest ja auch vorher etwas dazu geschrieben ;-)
In der Testdatei klappt das wunderbar, werde es heute Nachmittag auf die echte umsetzen.
Vielen Dank an die fleißigen Helfer und jetzt schon einmal ein

schönes, stressfreies Weihnachtsfest!

Viele Grüße
Heike

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige