Microsoft Excel

Herbers Excel/VBA-Archiv

Macro greift bei ALT STRG F9 auf falsches Blatt zu


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


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

  

Betrifft: AW: Macro greift bei ALT STRG F9 auf falsches Blatt zu von: Werner
Geschrieben am: 15.07.2017 17:51:14

Hallo Wolfgang,

ob ich dir helfen kann -weiß ich nicht. Aber ohne deinen Code kann dir auch niemand anderes helfen.

Gruß Werner


  

Betrifft: AW: Macro greift bei ALT STRG F9 auf falsches Blatt zu von: Wolfgang
Geschrieben am: 15.07.2017 18:02:45

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


  

Betrifft: AW: Macro greift bei ALT STRG F9 auf falsches Blatt zu von: Tino
Geschrieben am: 15.07.2017 18:23:20

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


  

Betrifft: Meine natürlich ... von: Tino
Geschrieben am: 15.07.2017 18:25:04


UntersteZeile.Parent.Cells(...)


  

Betrifft: Meine natürlich ... von: Tino
Geschrieben am: 15.07.2017 18:27:49

UntersteZeile.Parent.Cells(...)


  

Betrifft: AW: Meine natürlich ... von: Wolfgang
Geschrieben am: 15.07.2017 21:46:07

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


Beiträge aus den Excel-Beispielen zum Thema "Macro greift bei ALT STRG F9 auf falsches Blatt zu"