8.9k Aufrufe
Gefragt in Tabellenkalkulation von desiato Mitglied (115 Punkte)
Hallo zusammen,

ich bin leider totaler Anfänger und habe ein großes Problem, ich möchte ein Makro automatisch starten, wenn sich Werte, die aus Formeln berechnet werden, ändern.

Ich habe in Tabelle 3 in A1 und A2 Formeln stehen, die sich durch Werte und andere Formeln in den Tabellen 1 und 2 berechnen.
In Tabelle 3 soll jetzt ein Makro gestartet werden, wenn sich die berechneten Werte in A1 oder A2 ändern.

Mit Worksheet_SelectionChange geht es leider nicht, da das nur bei manuell eingegebenen Zelländerungen anspringt.

Worksheet_Calculate soll wohl funktionieren, aber ich habe nicht verstanden wie.

Kann mir jemand damit oder einer anderen Lösung helfen?

13 Antworten

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

das SelectionChange Ereignis reagiert nicht auf direkte Eingabe in Zellen sondern auf das Selektieren von Zellen (mit der Maus oder per Anfahren mit den Cursortasten) - was du meinst ist das Change-Ereignis, und das kann man schon verwenden, nur musst du die betreffenden Zellen in den Tabellen überwachen, wo die Eingabe (von Hand) erfolgt, die die Ergebnisse der Zellen A1 und A2 in Tabelle3 beeinflussen.

Du kannst zwar auch das Calculate-Ereignis verwenden, aber es würde bei jeder Neuberechnung (also auch anderer Formeln) im betreffenden Tabellenblatt ausgelöst werden.

Bis später,
Karin
0 Punkte
Beantwortet von desiato Mitglied (115 Punkte)
Hallo Beverly,

danke erst einmal für die Erklärung, klingt einleuchtend wenn man mal über das Wort "Selection" nachdenkt...

Also die Eingaben direkt zu überwachen würde aufwendig werden, da sie über mehrere Tabellen gehen und dort in verschiedenen Bereichen stehen, aber wenn es nicht anders geht, muss das wohl sein.

Da dies gleich mein erstes Makro ist, habe ich leider keine Ahnung wie der Code bzw. die Syntax aussehen muss, kannst du (oder auch andere, die sich angesprochen fühlen) mir dabei helfen?
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi,

du müsstest - wie ich schon geschrieben habe - mal die Bereiche nennen (zumindest für 1 Tabellenblatt, an die anderen kannst du das dann entsprechend anpassen), in die die Eingaben erfolgen, die das Formelergebnis beeinflussen.

Bis später,
Karin
0 Punkte
Beantwortet von desiato Mitglied (115 Punkte)
Hallo Beverly / Karin...ich komm schon ganz durcheinander ;-)...

also folgende Bereiche müssten überwacht werden:
Tabelle 1, C2 und C11 und C12
Tabelle 2, C9
Tabelle 3, D3:D15

Bei Änderung einer der Werte soll ein Sub "Wege_breit" ausgeführt werden, dass eine bestimmte Berechnung durchführt und das Ergebnis in Tabelle 4, G7 ausgibt.
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all :-)

ein beispiel ^^

gruss nighty

einzufuegen
alt+f11/projektexplorer/DeineArbeitsmappe

verschiedene bereiche wie auch verschiedene Tabellen

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Application.EnableEvents = False
If Selection.Count = 1 Then
If Not Intersect(Target, Range("A2:B5")) Is Nothing And Sh.Name = "Tabelle1" Then Call DeinMakro1
If Not Intersect(Target, Range("B2:C5")) Is Nothing And Sh.Name = "Tabelle2" Then Call DeinMakro2
If Not Intersect(Target, Range("C2:D5")) Is Nothing And Sh.Name = "Tabelle3" Then Call DeinMakro3
If Not Intersect(Target, Range("D2:E5")) Is Nothing And Sh.Name = "Tabelle4" Then Call DeinMakro4
End If
Application.EnableEvents = True
End Sub
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all :-))

oder auch so ^^

gruss nighty

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Application.EnableEvents = False
If Selection.Count = 1 Then
If Not Intersect(Target, Union(Range("A2"), Range("B2"))) Is Nothing And Sh.Name = "Tabelle1" Then Call DeinMakro1
If Not Intersect(Target, Union(Range("A2"), Range("B2"), Range("B2"))) Is Nothing And Sh.Name = "Tabelle2" Then Call DeinMakro2
If Not Intersect(Target, Union(Range("A2"), Range("B2"), Range("F2"), Range("G2:G6"))) Is Nothing And Sh.Name = "Tabelle3" Then Call DeinMakro3
If Not Intersect(Target, Union(Range("N1:N5"), Range("B2"), Range("B2"))) Is Nothing And Sh.Name = "Tabelle4" Then Call DeinMakro4
End If
Application.EnableEvents = True
End Sub
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi,

ich reagiere auf beide Namen ;-)

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Not Intersect(Target, Union(Range("C2"), Range("C11"), Range("C12"))) Is Nothing _
And Sh.Name = "Tabelle1" Then Wege_bereit
If Not Intersect(Target, Range("C9")) Is Nothing And Sh.Name = "Tabelle2" Then Wege_bereit
If Not Intersect(Target, Range("D3:D15")) Is Nothing And Sh.Name = "Tabelle3" Then Wege_bereit
End Sub

Bis später,
Karin
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi beverly :-))

*hihi* hatten wir doch die gleiche idee :-)))

gruss nighty

p.s.
ich wünsch dir besonders schöne weihnacht beverly :-)
0 Punkte
Beantwortet von desiato Mitglied (115 Punkte)
Hallo nighty,

ich verstehe es zwar nicht ganz, aber es funktioniert.

Danke
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
@nighty,

nichts für ungut, aber ein wenig unterscheiden sich unsere Ideen schon ;-)

- ich verwende kein Application.EnableEvents
- mein Code kommt ohne Target.Count aus und funktioniert deshalb auch, wenn mehrere Zellen ausgewählt wurden
- Call habe ich ebenfalls nicht in meinem Code

Bis später,
Karin

P.S. wünsche dir ebenfalls Frohe Weihnachten und einen guten Rutsch
...