Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1568to1572
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Macro greift bei ALT STRG F9 auf falsches Blatt zu

Macro greift bei ALT STRG F9 auf falsches Blatt zu
15.07.2017 17:43:50
Wolfgang

Hallo,
vielleicht ist es nur ein allgemeines Einstellungsproblem aber ich komme trotz intensivster Suche im Internet und Lesens von gefühlt 10.000 Beiträgen einfach nicht weiter:
Ich habe ein Macro, welches in jeder Zelle einer Spalte aufgerufen wird und als Parammeter Zellen als Range-Objekte übergeben bekommt. Eine Spalte wird nach nicht leeren Zellen durchsucht und soll dann eine andere Zelle der selben Zeile als Range-Objekt zurückgeben.
Das ganze funktioniert seit Jahren sehr gut, so lange man nur ein Blatt hat.
Nun habe ich ein 2. Blatt, auf dem eine bis auf die Zellinhalte identische Tabelle ist.
Das Problem tritt auf, wenn im Macro Application.Volatile ausgeführt wird oder eben wie im Betreff angeführt eine Komplettberechnung durch Drücken von ALT STRG F9 durchgeführt wird.
Problem:
Schritt 1: Blatt 1 ist aktiv und selektiert, man drückt ALT STRG F9.
Ergebnis: Die Daten von Blatt 1 werden korrekt berechnet und angezeigt.
Ergebnis 2: Wechselt man nun auf Blatt 2 (via Reiter unten), sind die Daten dort auch geändert, allerdings falsch. Es sieht so aus, als ob bei Schritt 1 die übergebenen Range-Objekte bei Ausführung des Makros für die Zellen des nicht aktiven Blattes nicht auf dieses Blatt, sondern auf das aktive Blatt (was ja Blatt 1 war) gemacht werden.
Das Problem ist auch andersrum reproduzierbar. Also Blatt 2 aktiviert und selektiert und man drückt Alt STRG F9. Die Daten von Blatt 2 werden korrekt berechnet, di Daten von Blatt 1 sind danach auch neu berechnet, aber falsch.
Ich kann auf Wunsch natürlich gerne das Macro oder die gesamte Excel-Datei hier hochladen, ich will Euch aber nicht schon bei der Eingangsfrage "zutexten"
Danke für jede Antwort oder Hilfestellung, ich bin echt am Verzweifeln
Wolfgang

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Macro greift bei ALT STRG F9 auf falsches Blatt zu
15.07.2017 17:51:14
Werner
Hallo Wolfgang,
ob ich dir helfen kann -weiß ich nicht. Aber ohne deinen Code kann dir auch niemand anderes helfen.
Gruß Werner
AW: Macro greift bei ALT STRG F9 auf falsches Blatt zu
15.07.2017 18:02:45
Wolfgang
Hi,
hier der Code:

Function FindeNichtLeer_aufwaerts(UntersteZeile As Range, ObersteZeile As Range,  _
VergleichsSpalte As Range, RueckgabeSpalte As Range)
'Application.Volatile
FindeNichtLeer_aufwaerts = Cells(ObersteZeile.Row, RueckgabeSpalte.Column)
i = UntersteZeile.Row
While i > 0
If Cells(i, VergleichsSpalte.Column)  "" Then
FindeNichtLeer_aufwaerts = Cells(i, RueckgabeSpalte.Column)
i = 1
End If
i = i - 1
Wend
End Function

Ich verwende ausschließlich Cells() um auf die Zellen zuzugreifen.
Wie geschrieben: Wenn FindeNichtLeer_aufwaerts die Zellen des inaktiven Blattes berechnet greift es auf die Zellen des aktiven Blattes zu.
Bsp.: In beiden Blättern wird in jeder Zeile der Spalte D das obige Makro aufgerufen, wobei beispielhaft in Zelle D3 folgendes steht: =WENN(C3="";"";FindeNichtLeer_abwaerts(B4; $B$21; C3; B3)-B3).
Ich kann auch das gesamte Excel-File hochladen, da ist das ganz einfach auszuprobieren (die Daten sind jetzt nicht so geheim, dass irgend etwas schreckliches damit angestellt werden könnten)
Danke schonmal!
Wolfgang
Anzeige
AW: Macro greift bei ALT STRG F9 auf falsches Blatt zu
15.07.2017 18:23:20
Tino
Hallo,
ohne deine Funktion zu testen, vermute ich mal das Cells auf die aktive Tabelle verweist und UntersteZeile auf eine andere.
Versuch mal so
UntersteZeile.Parent.Celle(...)
Gruß Tino
Meine natürlich ...
15.07.2017 18:25:04
Tino
UntersteZeile.Parent.Cells(...)
Meine natürlich ...
15.07.2017 18:27:49
Tino
UntersteZeile.Parent.Cells(...)
AW: Meine natürlich ...
15.07.2017 21:46:07
Wolfgang
Hi Tino,
oh Mann, genau das ist es. mit UntersteZeile.Parent.Cells(...) funzt es!!!!!!
Zuerst einmal herzlichen Dank, da wäre ich niiiieeee selber draufgekommen.
Lernmodus on:
Wenn man also Macros schreibt und man hat mehrere Blätter, dann sollte man immer mit x.Parents.Cells() arbeiten (da ja jederzeit auf jedem beliebigen Blatt ALT STRG F9 gedrückt werden kann) insbesondere dann, wenn die Funktion Application.Volatile enthält. Ansonsten werden für Berechnungen im Macro die Range-Objekte immer vom aktiven Blatt herangezogen.
Ich habe, bevor ich hier nachgefragt habe, sehr viele Macros von anderen Leuten durchgsehen, die Application.Volatile verwendet haben und Range-Objekte als Parameter übergeben haben. Bei keinem einzigen dieser Macros habe ich dieses .Parent. gesehen (sonst hätte ich das sicherlich ausprobiert).
Gibt es da vielleicht irgend eine Einstellung oder ein "Codewort" oder sonst irgendetwas um Excel zu veranlassen, nicht die Zellen des aktivierten Blattes, sondern des "Parent"-Blattes (also des Blattes, von welchem aus die Funktion aufgerufen wurde) zu verwenden?
Oder - eine andere Idee - kann man in der Funktion das "Parent"-Blatt zum aktiven machen und danach wieder zurückschalten (da wäre der Code unverändert und man könnte eine weitere Funktion schreiben, die sich zuerst das aktivierte Blatt merkt, dann das "Parent"-Blatt zum aktivierten Blatt macht, dann die eigentliche Funktion aufruft und dann wieder das zuvor gemerkte Blatt zum aktivierten macht.
Aber auch wenn davon nix geht, Deine Lösung macht mich happy, weil das funktioniert schon mal... danke nochmals dafür.
Grüße
Wolfgang
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige