4.8k Aufrufe
Gefragt in Tabellenkalkulation von Mitglied (439 Punkte)
Guten Morgen zusammen,

ich habe in Excel 2010 ein VBA-Makro, welcher beim Wechsel auf das Blatt Tabelle2 automatisch ausgeführt wird:

Private Sub Worksheet_Activate()

Call Makro_1

End Sub


Mein Problem dabei: Innerhalb von Makro_1 wird mehrere Male erst Tabelle1 und dann wieder Tabelle2 aufgerufen. Und das Aufrufen von Tabelle2 startet dann aber den o. g. Makro Private Sub Worksheet_Activate(). Der Makro wird also quasi neu gestartet, noch bevor er selber beendet wurde, was verständlicherweise zu Fehlern führt.

Auch andere Makros in meiner Arbeitsmappe rufen Tabelle2 auf, wodurch der Makro Private Sub Worksheet_Activate() gestartet wird.

Ich möchte aber, dass der Makro nur dann gestartet wird, wenn ich manuell, d. h. mit Maus oder Tastatur, auf Tabelle2 wechsle. Ein Wechsel auf Tabelle2 innerhalb eines Makros soll den Private Sub Worksheet_Activate() nicht starten.

Geht das?


Dank für eure Hilfe, Gruß, Heiko1985

10 Antworten

0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Heiko,

verwende kein Activate/Select in deinem Code, dann wird das Worksheet_Activate-Ereignis auch nicht erneut ausgeführt. Daten aus Tabellenblättern übernehmen/kopieren kann man auch ohne Select/Activate, z.B.

Worksheets("Tabelle2").Range("A1")=Worksheets("Tabelle1").Range("B15")

oder

Worksheets("Tabelle1").Range("B15").Copy Worksheets("Tabelle2").Range("A1")



Bis später,
Karin[
0 Punkte
Beantwortet von Mitglied (439 Punkte)
Danke für Deine Antwort!

verwende kein Activate/Select in deinem Code, dann wird das Worksheet_Activate-Ereignis auch nicht erneut ausgeführt.
Darauf kann ich leider nicht verzichten. Es handelt sich um einen Makro, welcher eine umfangreiche Operation durchführt. Im Laufe dieser Operation wird mehrere Male zwischen den Tabellenblättern hin- und hergewechselt, um Zwischenergebnisse ablesen zu können, ohne auf das Ende des Makros warten zu müssen.

Kann man nicht irgendwie differenzieren zwischen manueller Auswahl eines Tabellenblatts und Auswahl per Makro?
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Heiko,

die Anwort 1 von Beverly gilt natürlich auch für das Auslesen der Zwischenergebnisse aus Zellen etc.
Beispiel:

Zwischenergebnis = Worksheets("Tabelle2").Range("A1").Value


oder

Zwischenergebnis = Worksheets("Tabelle2").Range("A1").Value + Worksheets("Tabelle1").Range("A5").Value


Gruß

M.O.
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Heiko,

es gibt keine Unterscheidung zwischen einem manuellen oder durch Code ausgelösten Aktiveren eines Tabellenblattes - Worksheet_Activate wird immer ausgelösst, wenn auf das Tabellenblatt gewechselt wird.
Niemand kennt deinen Code, sodass man nicht sagen kann, ob überhaupt ein Aktivieren des anderen Tabellenblasttes erforderlich ist, aber generell gilt: in 99% aller Fälle kann auf Activate/Select verzichtet werden und man kann (fast) alles machen, ohne auf das andere Tabellenblatt wechseln zu müssen.

Bis später,
Karin
0 Punkte
Beantwortet von Mitglied (439 Punkte)
Wie ich schon sagte: Zum Ablesen von Zwischenergebnissen muss ich in diesem und auch in anderen Makros die Tabellenblätter wechseln können, bevor der jeweilige Makro beendet ist.

es gibt keine Unterscheidung zwischen einem manuellen oder durch Code ausgelösten Aktiveren eines Tabellenblattes
OK, diese Information hilft mir weiter, d. h. meine favorisierte Lösung ist nicht möglich.
Ich werde mir etwas anderes ausdenken müssen.



Vielen Dank für eure Antworten!
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Heiko,

da du deinen Code nicht posten möchtest, kannst du auch niemanden überzeugen, dass du unbedingt auf das andere Tabellenbatt wechseln musst. Aber des Menschen Wille ist sein Himmelreich und wer es unbedingt will, muss sich die Arbeit eben erschweren bzw. vielleicht ganz unmöglich machen. ;-)

Bis später,
Karin
0 Punkte
Beantwortet von Mitglied (439 Punkte)
Richtig ist: Ich will ihn nicht posten.
Richtig ist aber auch: Ich kann ihn nicht posten.

Der fragliche Code ist ca. acht DIN-A-4-Seiten lang.
Und ich habe noch vier weitere Makros ähnlicher Länge, die auf das Blatt Tabelle2 wechseln.


Vielen Dank nochmals für Deine Mühe und auch für Deinen Willen, meine Makros durchzuschauen.
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi :-)

setze eine globale variable zum anfang des makros auf true,bei ende auf false

frage nun im ereignismodul der arbeitsmappe die variable ab um darauf zu reagieren

somit ist das ereignis getrennt

gruss nighty
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi :-)

ein beispiel ^^

gruss nighty

Global Schalter01 As Boolean

Sub beispiel()
Schalter01 = True
'dein code
Schalter01 = False
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Schalter01 = True Then
End
Else
'dein code
End If
End Sub
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi :-)

offtopic hihi

die problematik der fragesteller ist ja oftmals recht verzwickt da ja meist im buero mehrere daran arbeiten und datenschutz auch beruecksichtigt werden muss

aus der situation heraus das mehrere die makros gestaltet haben ist es doch eher selten das der fragesteller diese korrigieren koennte

daher ist es oft muessig von sich selbst auszu gehen

gruss nighty
...