HERBERS Excel-Forum - das Archiv

Thema: Worksheet_Activate für alle Sheets

Worksheet_Activate für alle Sheets
Markus Klar
Guten Abend zusammen,

ich habe eine unbestimmte Anzahl von Excel-Sheets, welche alle von einem Dummy-Sheet geklont wurden.
D.h., der Code hinter den Sheets wird auch jedes Mal geklont.
Nun meine Frage: gibt es eine Möglichkeit, das "Worksheet_Activate", welches auf allen Sheets genau gleich ist, nur 1 Mal zu generieren und es auf allen Sheets anwendbar zu machen? Sozusagen wie eine Public Sub? Gleiches soll natürlich auch für die selbst erzeugten "Private Sub" gelten.

Vielen Dank schon mal.
VG Markus
AW: Worksheet_Activate für alle Sheets
Markus Klar
Ach schau mal an, so weit reichen meine angeblich guten VBA-Kenntnisse dann doch nicht ;)
Das hatte ich nicht gewusst, vielen Dank, damit lässt sich was anfangen.
Gerne !
Onur
"Ach schau mal an, so weit reichen meine angeblich guten VBA-Kenntnisse dann doch nicht" - Wenn ich das früher gesehen hätte, hätte ich meinen Senf dazu gegeben. :)
AW: Gerne !
Markus Klar
Na bloß gut, dass Du nicht richtig geguckt hast ^^
Wie würde sich das Ganze denn verhalten, wenn ich z.B. ein "Private Sub ComboBox1_Change()" auslagern wollte?
AW: Gerne !
Onur
Hast du denn auf jedem Blatt eine Combobox?
AW: Gerne !
Markus Klar
Ja genau, und es sind auch alles ComboBox1-er.
AW: Gerne !
Onur
Wird so nicht gehen, nimm doch einfach eine Userform mit einer Combobox.
AW: Gerne !
Markus Klar
Hm...muss ich mal schauen. Ich hatte mal in einem anderen Projekt eine Klasse für OptionButton, irgendwas mit


Public WithEvents myOB as MSForms.OptionButton

Private Sub myOB_Click()
.
.
.
End Sub


Aber das scheint hier nicht zu funktionieren...schade.
AW: Gerne !
Onur
Wenn die alle auf dem selben Blatt oder Userform liegen würden, schon.
AW: Gerne !
Onur
Du kannst doch ein Formularsteuerelement nehmen und ihm immer das selbe Makro zuweisen.
AW: Gerne !
Markus Klar
Joa das könnte ich machen...
AW: Gerne !
Onur
Ist doch GENAU das, was du wolltest.
ja, abeeer...
Yal
Ich fürchte, erstens dass es unter den Formularsteuerelemente keine richtigen ComboBox gibt, zweitens dass damit kein richtigen Ereignis Change sich überwachen lässt.

Gern nehme ich aber eine funktionierende Lösung entgegen, bin ja neugierig.

VG
Yal
AW: ja, abeeer...
Onur
Punkt 1) Da irrst du dich
Punkt 2) Da irrst du dich.
AW: ja, abeeer...
Yal
wie gesagt, wenn dem nicht so ist, nehme ich gern eine funktionierende Lösung entgegen.

Mein Forschungsdrang ist für diesen Usecase beschrenkt, da ich mit dem verteilten Code zufrieden wäre.

VG
Yal
AW: ja, abeeer...
Onur
Vielen Dank!
Yal
schon wieder was gelernt.

VG
Yal
AW: Gerne !
Yal
Hallo Markus,

Bei ComboBox auf dem Blatt kommst Du nicht darum, auf jedem Blatt einen ComboBox1_Change zu haben.

Aber Du könntest den Aktionscode in einer Sub in einem Modul haben:
Public Sub HauptAktion(ByVal Sh As Object)

'...
End Sub

Dann in dem "DieseArbeitsmappe"-Codepane einen Zuruf dieses Sub:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)

HauptAktion Sh
End Sub

Und in jedem Blatt-Codepane
Private Sub ComboBox1_Change()

HauptAktion Me
End Sub
"Me" ist in dem Fall das Blatt, worauf ComboBox1 steht.

So wäre die Wiederholung des Codes minimiert.

VG
Yal
AW: Gerne !
Onur
Und doch hätte er für jedes Blaat einen Code. DAS hätte er auch mit Sheet_Activate haben können, aber er will das ja nicht.
AW: Gerne !
Yal
So sehe ich das auch, aber in dem Fall ist es nicht vermeidbar. Das einzig möglich ist, diesen repetitiven Code aufs minimal zu reduzieren.

Ohne alle Details zu kennen, gehe ich davon aus, dass das wesentliche Problem ist, dass wenn eine Änderung im Code vorgenommen werden muss, diese Änderung an mehrere Stelle übertragen werden muss. Je minimalistischer der Code, desto kleiner die Wahrscheinlichkeit eines Änderungsbedarfs.

VG
Yal