Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen

Activate manuell auslösen? | Herbers Excel-Forum


Betrifft: Activate manuell auslösen? von: dave
Geschrieben am: 16.02.2012 08:13:58

Hallo zusammen,

ich hoffe, ich blamier mich jetzt nicht, aber folgende kurze Frage:

Wenn ich in einem Blatt bin, für das es ein Ereignis-Makro "Worksheet_Activate" gibt, wie löse ich das für das aktuelle Blatt manuell aus, ohne erst auf ein anderes wechseln zu müssen?

Gruß
David

  

Betrifft: Worksheet_Activate von: Matthias L
Geschrieben am: 16.02.2012 08:22:39

Hallo

Beispiel Code in Tabelle1 (dem aktiven Blatt)

Option Explicit
Private Sub Worksheet_Activate()
MsgBox "Hallo"
End Sub

Sub ml()
Worksheet_Activate
End Sub
Gruß Matthias


  

Betrifft: AW: Worksheet_Activate von: dave
Geschrieben am: 16.02.2012 08:32:17

Oh, oh, kann ich meine Frage zurückziehen? ;-)
(Ist ja wirklich peinlich.)

Danke und Gruß
David


  

Betrifft: doch nicht so einfach? von: dave
Geschrieben am: 16.02.2012 08:46:08

Leider muss ich doch nochmal darauf zurückkommen, denn so wie gedacht, funzt das net.

Ich habe eine Tabelle mit mehreren Blättern, in denen jeweils ein Worksheet_Activate existiert. Dieses nimmt jeweils eine bestimmte Zelle und stellt den Zoom in Abhängigkeit von dieser Zelle ein, deswegen auch bei jedem Blatt eine andere Zelle.
Nun hab ich eine Userform, bei der bei einem Klick auf eine Schaltfläche einige Bildschirm-Elemente ausgeschaltet werden, Fullscreen-Modus ein etc., so dass anschließend mehr Platz auf dem Bildschirm ist. Dabei sollte anschließend das Activate-Makro ausgeführt werden, damit der Zoom wieder angepasst wird.
Die Userform ist "vbmodeless" und der Klick kann bei deshalb bei jedem beliebigen Blatt kommen.
Wenn ich nun in die Sub für den "Klick" ein Worksheet_Activate einbaue, kommt eine Fehlermeldung, "Sub nicht definiert". Auch ein vorangestelltes "Call" hilft nicht.

Vorschläge, wie ich das lösen kann?

Gruß
David


  

Betrifft: AW: doch nicht so einfach? von: Rudi Maintaire
Geschrieben am: 16.02.2012 09:13:00

Hallo,
nimm das Private raus.

Sub xxxx()
  Tabelle1.Worksheet_Activate
End Sub

Sub Worksheet_Activate()
  MsgBox "Hallo"
End Sub
Alternativ kannst du auch alles in eine eigene Sub auslagern und diese wechselweise aus Worksheet_Activate oder aus der UF heraus aufrufen.

Gruß
Rudi


  

Betrifft: AW: doch nicht so einfach? von: bst
Geschrieben am: 16.02.2012 09:38:06

Auch Hallo,

oder nimm:

Application.Run "Tabelle1.Worksheet_Activate"

das 'interessiert sich' (M.E. leider) nicht für Private/Public.

cu, Bernd


  

Betrifft: AW: doch nicht so einfach? von: dave
Geschrieben am: 16.02.2012 09:41:01

Das Problem ist ja, das die Tabelle jedesmal eine andere sein kann, je nachdem in welcher ich mich befinde, wenn ich den Button auf der UF auslöse - und daher kann ich diese nicht direkt adressieren!

Und ein einfaches Activesheet.Activate funzt auch nicht.

Gruß
David


  

Betrifft: AW: doch nicht so einfach? von: bst
Geschrieben am: 16.02.2012 09:59:50

Hi,

dann vielleicht:

Application.Run ActiveSheet.CodeName & ".Worksheet_Activate"

cu, Bernd


  

Betrifft: Im Prinzip IST es ganz einfach, ... von: Luc:-?
Geschrieben am: 16.02.2012 11:53:40

…David,
Das, was dir zuerst vorgeschlagen wurde, schreibst du (natürl ohne irgendein Private) in das gleiche DokKlassenModul, in dem auch die EventProc steht. Diese Proz rufst du dann v.d.UForm aus auf. Dabei können die Prozz nach ihrem Standort im UF-Pgm selektiert wdn.
Besser wäre es natürl, du könntest nur eine EventProc (näml Workbook_SheetActivate verwenden, die hat schon einen Parameter Sh, den du von der UF aus auch dem Aufruf-Pgm im gleichen Modul (analog oben) übergeben könntest. Das reicht den dann an die EventProc weiter. Habe ich zwar noch nie probiert (die andere Variante aber schon!), sollte aber fktionieren!
Gruß Luc :-?


  

Betrifft: AW: Im Prinzip IST es ganz einfach, ... von: dave
Geschrieben am: 16.02.2012 13:47:53

Sorry, da kann ich leider nicht folgen.

Die UF steht doch gar nicht in einem Modul?!

Ich habe einmal die einzelnen Blätter, in deren Code die "Worksheet_Activate"-Prozedur steht. Dann habe ich die UF, in der der Code für die Schaltfläche steht. Und drittens habe ich Module, in denen auch noch einige Sachen stehen, die aber mit dem hier beschriebenen Problem nichts zu tun haben.

Was soll jetzt wo stehen?

Ich muss das auch einigermaßen einfach halten, denn meine bescheidenen VBA-Kenntnisse sind noch die besten hier und irgendwann muss das vielleicht auch mal jemand anders verstehen.

Im Endeffekt geht es mir darum, dass bei Aktivierung von Fullscreen und Deaktiverung diverser "Drumherum"-Elemente mehr Platz vorhanden ist, der sich in einem höherem Zoom-Faktor niederschlagen soll. Bei Aktivierng des nächsten Blattes kommt ja auch wieder das Worksheet-Activate zum Zuge, aber das Blatt, was zum Zeitpunkt der Auslösung aktuell bleibt, bleibt halt auf dem Zoomfaktor stehen.
Ich habe mich jetzt erst mal damit beholfen, dass ich einfach den bestehenden Zoom-Faktor um 10 erhöhe, dass passt einigermaßen und ist hinsichltlich der Komplexität noch gut zu verstehen.
Wenn es keine einfache Lösung für die Aktivierung des Worksheet-Activate-Ereignisses gibt, werde ich das wohl dabei belassen.

Gruß
David


  

Betrifft: Du hast außerdem noch das Modul der Mappe, ... von: Luc:-?
Geschrieben am: 16.02.2012 14:41:52

…David,
in der, idR DieseArbeitsmappe genannt, kannst du die von mir genannte Ereignisprozedur einrichten, die dann für alle Blätter gilt. Man muss also in ihr die genannte ObjektVariable abfragen. Schau mal in die VBE-Hilfe, Stichwort: Ereignisse der Arbeitsmappe!
Gruß Luc :-?


  

Betrifft: AW: doch nicht so einfach? von: dave
Geschrieben am: 16.02.2012 13:52:16

Hi Bernd,

das funzt und ist auch für mich gut nachvollziehbar.

Danke (auch den anderen).

Gruß
David