Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: UserForm bedienen durch öffnen eines Tabellenblatt

UserForm bedienen durch öffnen eines Tabellenblatt
23.08.2017 13:15:25
reiner
bei Anwahl eines beliebigen Tabellenblatts wird die dem Tabellenblatt zugeordnete Befehlsschaltfläche auf der UF "gelb" eingefärbt.
Es können auch andere Tabellenblätter angewählt werden, die zugehörige Befehlsschaltfläche wird immer passend eingefärbt.
Private Sub Worksheet_Activate()
UserForm1.Show
dem Tabellenblatt zugeordnete Befehlsschaltfläche "gelb" einfärben, und alle anderen  _
Befehlsschaltflächen "grau" einfärben
End Sub
Jedoch wird nach Betätigung eines der Bedienelemente auf der UF und Anwahl eines anderen Tabellenblattreiters zwar das entsprechende Tabellenblatt geöffnet, die zugeordnete Befehlsschaltfläche wird dann aber nicht mehr entsprechend eingefärbt.
Ich weiß nicht woran dieses Verhalten liegt, vielleicht hat jemand im Forum eine Idee wie dieses Verhalten geändert werden kann?
mfG
reiner
Anzeige

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: UserForm bedienen durch öffnen eines Tabellenblatt
23.08.2017 13:57:22
Marcel
Hallo Reiner,
folgenden Code in die UserForm1 einfügen. Die Buttons sind beim Erstellen standardmäßig grau, das kannst du so lassen. Der jeweils zum Tabellenblatt zugehörige Button wird dann entsprechend umgefärbt.

Private Sub UserForm_Initialize()
UserForm1.Controls("CommandButton" & ActiveSheet.Index).BackColor = RGB(243, 218, 11)
End Sub
In die Tabellenblätter dann einfach folgendes eingeben:

Private Sub worksheet_activate()
UserForm1.Show
End Sub
LG,
Marcel
Anzeige
AW: UserForm bedienen durch öffnen eines Tabellenblatt
23.08.2017 14:10:41
reiner
hallo Marcel, das hilft mir nicht weiter, Die UF ist dauerhaft geöffnet, durch die Anwahl der Tabellenblattreiter soll lediglich die Farbe der einelnen cmd "grau" bzw. "gelb" eingefärbt werden.
Selbst wenn ich die UF ausblende wird durch Anwahl eines Tabellenblattreiters UserForm_Initialize nicht angesprochen
Anzeige
AW: UserForm bedienen durch öffnen eines Tabellenblatt
23.08.2017 14:21:28
Matthias
Moin! Ich würde das so lösen. Ist jetzt nur ein Beispiel und muss / kann noch angepasst bzw. erweitert werden. VG
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Select Case Sh.Name
Case "Tabelle1"
UserForm1.CommandButton1.BackColor = vbRed
Case "Tabelle2"
UserForm1.CommandButton1.BackColor = vbYellow
Case Else
End Select
End Sub

Anzeige
AW: UserForm bedienen durch öffnen eines Tabellenblatt
23.08.2017 14:30:54
reiner
hallo Matthias,
leider hilft mir das auch nicht.
Was ich nicht verstehe ist, dass der Programmcode auf den jeweiligen Tabellenblättern am gesetztetn Haltepunkt nicht angesprungen wird.
Ich denke da liegt das Problem.
Die Farbumschaltung funktioniert ja auch nach Aufruf der Datei einwandfrei, wenn ich jedoch eine Schaltfläche auf der UF betätige klaptt die Farbumschaltung mittels Tabellenblattreitern nicht mehr, das ist das Problem.
Anzeige
AW: UserForm bedienen durch öffnen eines Tabellenblatt
23.08.2017 14:52:47
Matthias
Kannst du ggf. mal die Tabelle hochladen? ICh wüßte jetzt nicht, woran das Problem liegt.
AW: UserForm bedienen durch öffnen eines Tabellenblatt
23.08.2017 15:02:24
reiner
die Datei ist wohl zu groß zum Hochladen, 3,5 MB
AW: UserForm bedienen durch öffnen eines Tabellenblatt
23.08.2017 15:15:58
Matthias
Es würde ja schon deine Tabelle ohne Daten reichen. Es sollten nur die Blätter (leer) und die UF da sein. DAmit könnte man dann erkennen, wie der Code genau aussieht und was die UF macht / blockiert. Ich habe mir zwar eine Datei mit UF gebastelt aber da klappt es. VG
Anzeige
AW: UserForm bedienen durch öffnen eines Tabellenblatt
23.08.2017 15:34:25
reiner
hallo matthias,
https://www.herber.de/bbs/user/115671.xlsm
hier habe ich die Datei hochgeladen, du wirst wohl Fehlermeldungen erhalten, ignoriere sie, ich habe die Datei abgespeckt, es geht ja nur um die beschriebene Problematik
beim ersten Öffnen und "Sichtbarmachung" der Blattregisterkarten kannst du sehen wie sich die Farben der Befehlsschaltflächen beim Blattwechsel ändern; nach Betätigung einer Schaltfläche auf dcer UF klappt das nicht mehtr, das ist das Problem
Anzeige
AW: UserForm bedienen durch öffnen eines Tabellenblatt
23.08.2017 14:26:06
Marcel
Das hier in ein allg. Modul:

Sub cmd_colorchange()
Dim i As Integer
For i = 1 To ActiveWorkbook.Worksheets.Count
UserForm1.Controls("CommandButton" & i).BackColor = RGB(239, 239, 239)
Next i
UserForm1.Controls("CommandButton" & ActiveSheet.Index).BackColor = RGB(243, 218, 11)
End Sub
Die Sub beim Worksheet_activate Ereignis ausführen lassen.
Anzeige
AW: UserForm bedienen durch öffnen eines Tabellenblatt
23.08.2017 14:36:29
reiner
hallo Marcel,
meine Farbumschaltung funktioniert nach Aufruf der Datei einwandfrei, wenn ich jedoch eine Schaltfläche auf der UF betätige klaptt die Farbumschaltung mittels Tabellenblattreitern nicht mehr, das ist das Problem.
Wenn der Programmcode nicht angesprochen wird dann hilft auch dein Vorschlag nicht weiter, weil er nicht abgearbeitet werden kann!! das ist leider so
Anzeige
AW: UserForm bedienen durch öffnen eines Tabellenblatt
23.08.2017 14:49:28
Marcel
Hallo Reiner,
Was genau bewirken/machen deine Schaltflächen denn?
Wenn man manuell auf ein Tabellenblatt wechselt, während die UserForm noch nicht aufgerufen ist, was soll dann alles passieren?
LG,
Marcel
AW: UserForm bedienen durch öffnen eines Tabellenblatt
23.08.2017 14:57:21
reiner
hallo marcel,
lies dir bitte noch mal meinen ersten Beitrag mit der entsprechenden Frage durch, da habe ich beschrieben was durch den Blattwechsel ausgelöst werden soll.
Ein anderer Nutzer hatte ein ähnliches Problem, ich habe seinen Text mal eingefügt da auch hier die gleiche Problematk wie bei mir besteht:
Im Eigentlichen geht es nur darum, dass das Makro nur beim ersten Wechsel in eine andere Tabelle aufgerufen wird. anschliessend scheint es, als ob "Private Sub Worksheet_Activate() " gar nicht mehr berücksichtigt wird.
Leider wurde zu dieser Frage keine Antwort erteilt
Anzeige
AW: UserForm bedienen durch öffnen eines Tabellenblatt
23.08.2017 14:54:30
EtoPHG
Hallo Reiner,
Zitat: Jedoch wird nach Betätigung eines der Bedienelemente auf der UF und Anwahl eines anderen Tabellenblattreiters zwar das entsprechende Tabellenblatt geöffnet, die zugeordnete Befehlsschaltfläche wird dann aber nicht mehr entsprechend eingefärbt.
Natürlich nicht, wenn dein Code nur im _Initalize der Userform abläuft.
Du musst die in dem Code-Teil vornehme, in dem du auch das Blatt wechselst!
Gruess Hansueli
Anzeige
AW: UserForm bedienen durch öffnen eines Tabellenblatt
23.08.2017 15:01:20
reiner
hallo Hansueli,
kannst du mir deinen Vorschlag bitte etwas ausführlicher beschreiben?
Grundsätzlich funktioniert mein Code nach Aufruf der Datei, solange bis ich eine Schaltfläche auf der UF betätige; danach reagiert der den einzelnen Tabellenblättern zugeordnete Code nicht mehr, das ist das Problem.
Anzeige
Grundsätzlich sehe ich deinen Code nicht! (owT)
23.08.2017 15:30:17
EtoPHG

AW: Grundsätzlich sehe ich deinen Code nicht! (owT)
23.08.2017 15:36:08
reiner
hallo hansueli,
ich habe gerade als Antwort an Matthias die Datei hochgeladen, vieleicht hilft dir das mein Problem nachzuvollziehen
AW: Grundsätzlich sehe ich deinen Code nicht! (owT)
23.08.2017 16:00:52
EtoPHG
Hallo Reiner,
1. Korrigier zuerst die Kompilierungsfehler!
2. Man sollte schon genau wissen, was der Befehl
Application.EnableEvents = False
verursacht und wenn nicht, könnte man in der VBA-Hilfe nachschauen!
Das ist der Befehl, der verhindert, dass die _Activate auf die Blätter ausgelöst wird!
Gruess Hansueli
Anzeige
AW: Grundsätzlich sehe ich deinen Code nicht! (owT)
23.08.2017 16:21:14
reiner
ja Hansueli, das war's
danke
reiner
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

UserForm bedienen durch das Öffnen eines Tabellenblatts


Schritt-für-Schritt-Anleitung

  1. UserForm erstellen: Zuerst musst du eine UserForm (z.B. UserForm1) in deiner Excel-Datei erstellen und entsprechende Befehlsschaltflächen hinzufügen.

  2. Code zum Einfärben der Schaltflächen: Füge den folgenden Code in das Codefenster der UserForm ein, um die Befehlsschaltflächen abhängig vom aktiven Tabellenblatt einzufärben:

    Private Sub UserForm_Initialize()
       UserForm1.Controls("CommandButton" & ActiveSheet.Index).BackColor = RGB(243, 218, 11)
    End Sub
  3. Worksheet_Aktivierung: Füge den folgenden Code in jedes Tabellenblatt ein, um die UserForm zu zeigen, wenn das Blatt aktiviert wird:

    Private Sub Worksheet_Activate()
       UserForm1.Show
    End Sub
  4. Farbänderung bei Blattwechsel: Um die Schaltflächen bei einem Tabellenblattwechsel korrekt einzufärben, kannst du folgenden Code in ein allgemeines Modul einfügen:

    Sub cmd_colorchange()
       Dim i As Integer
       For i = 1 To ActiveWorkbook.Worksheets.Count
           UserForm1.Controls("CommandButton" & i).BackColor = RGB(239, 239, 239)
       Next i
       UserForm1.Controls("CommandButton" & ActiveSheet.Index).BackColor = RGB(243, 218, 11)
    End Sub
  5. Ereignisbindung: Stelle sicher, dass du cmd_colorchange beim Worksheet_Activate-Ereignis aufrufst, um die Farbänderung zu aktivieren.


Häufige Fehler und Lösungen

  • Problem: Die Befehlsschaltflächen ändern ihre Farbe nicht nach dem Aktivieren eines neuen Tabellenblatts.

    • Lösung: Stelle sicher, dass das cmd_colorchange-Sub im Worksheet_Activate-Ereignis aufgerufen wird.
  • Problem: Der Code in UserForm_Initialize wird nicht ausgeführt, nachdem eine Schaltfläche auf der UserForm betätigt wurde.

    • Lösung: Vermeide es, die UserForm zu schließen, bevor du die Farbänderungen vornimmst. Nutze stattdessen das Workbook_SheetActivate-Ereignis.

Alternative Methoden

Eine alternative Methode zur Verwaltung der Farben besteht darin, das Workbook_SheetActivate-Ereignis zu verwenden, um die Schaltflächen direkt bei jedem Blattwechsel zu aktualisieren:

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Select Case Sh.Name
        Case "Tabelle1"
            UserForm1.CommandButton1.BackColor = vbRed
        Case "Tabelle2"
            UserForm1.CommandButton1.BackColor = vbYellow
        Case Else
            ' Weitere Tabellenblätter
    End Select
End Sub

Praktische Beispiele

Ein Beispiel für das Einfärben von Befehlsschaltflächen:

  • Tabelle1: Wenn du auf Tabelle1 wechselst, wird CommandButton1 rot.
  • Tabelle2: Bei Wechsel zu Tabelle2 wird CommandButton1 gelb.

Das sorgt für eine visuelle Rückmeldung, die dir hilft, den Status der UserForm besser zu erkennen.


Tipps für Profis

  • Debugging: Nutze Haltepunkte in deinem Code, um sicherzustellen, dass die Ereignisse ausgelöst werden. Dies hilft, Probleme schnell zu identifizieren.
  • Fehlerbehebung: Wenn ein Application.EnableEvents = False verwendet wird, stelle sicher, dass es zu einem späteren Zeitpunkt wieder auf True gesetzt wird, da dies die Ereignisse blockieren kann.

FAQ: Häufige Fragen

1. Warum funktioniert die Farbänderung nicht? Die Farbänderung funktioniert möglicherweise nicht, weil das Worksheet_Activate-Ereignis nicht ausgelöst wird. Überprüfe, ob dein Code korrekt an das Ereignis gebunden ist.

2. Was kann ich tun, wenn die UserForm nicht erscheint? Stelle sicher, dass die UserForm angezeigt wird, indem du UserForm1.Show im Worksheet_Activate-Ereignis verwendest. Überprüfe auch, ob die UserForm nicht im Hintergrund geöffnet ist.

3. Wie kann ich die UserForm nach dem Schließen wieder aktivieren? Du kannst die UserForm in einem anderen Ereignis, wie einem Button-Klick, erneut aktivieren, indem du den Code UserForm1.Show verwendest.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige