Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1952to1956
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

Makrolauf bei geöffnetem Editor

Makrolauf bei geöffnetem Editor
15.11.2023 19:34:57
Dieter Krüsemann
Moin aus Hamburg,

wenn ich ein Makro bei geöffnetem Editor laufen lasse, erhalte ich unter identischen Bedingungen verschiedene Ergebnisse. Wenn ich die bearbeiteten Daten speichere und neue lade und danach wiederum die vorigen Daten lade und ohne Änderung neu berechne, erhalte ich teilweise wieder andere Ergebnisse.

Bei meinem Projekt, die dieses Makro enthält, handelt es sich um eine umfangreiche Arbeitsmappe (ca. 11 MB). Aufgabe des Makros ist die Optimierung auf Basis vorgegebener Daten. Nach der Optimierung schreibt das Makro die optimierten Daten in ein definiertes Arbeitsblatt, darunter die Daten, die sich eigentlich nicht geändert haben dürfen.

Hier im Forum habe ich zwar eine eine Abfrage gefunden, mit der ich feststellen kann, ob der Editor geöffnet ist oder nicht, aber die löst mein Problem nicht, denn ich weiß nicht, ob die mit oder ohne geöffnetem Editor berechneten Werte die optimalen sind.

Können die Größe der Arbeitsmappe und die während des Makrolaufs bewegte hohen Datenmengen mit die Ursache sein, weil Daten zwar richtig berechnet werden (getestet mit MsgBox()), aber trotz eindeutiger Adressierung über eine "Set"-Variable manchmal nicht an die betreffende Stelle in der Arbeitsmappe geschrieben werden (Zelle bleibt leer)?

Bin neugierig auf Eure Ideen.

Dieter

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makrolauf bei geöffnetem Editor
15.11.2023 21:02:41
onur
"trotz eindeutiger Adressierung über eine "Set"-Variable manchmal nicht an die betreffende Stelle in der Arbeitsmappe geschrieben werden" ??? Was ist eine Set-Variable?
Du meinst wohl ein Range-Objekt.
Das hat doch nix damit zu tun, WOHIN die Werte geschrieben werden. sondern WOHER die Werte kommen, die in ein Range-Objekt kommen.
Wenn ein Makro im Editor-Fenster anders bzw falsch läuft als sonst, liegt meistens an irgend welchen "ActiveCell", "ActiveSheet", "Select" oder "Selection"´Befehlen zu tun oder Range-Befehlen OHNE Blattangabe.
AW: Makrolauf bei geöffnetem Editor
Dieter Krüsemann
Danke für Deine schnelle Antwort,

stimmt, ein mit Dim deklariertes Range Objekt, 'Set' für dieses Objekt kommt später im code.

Die Werte, die in dieses Range Objekt geschrieben werden, ermittelt der code und wird mit
z.B. RangeObjekt(i, j).Value = "im Makro ermittelter Wert" hineingeschrieben.

Den Makrocode habe ich durchgesehen. Darin stehen weder "ActiveCell", "ActiveSheet", "Select"
oder "Selection". Zugriffe auf Tabellenwerte erfolgen außer über Range Objekte z.B. so:

Stg_NbrStg = ThisWorkbook.Sheets("Stg").Range("Stg_NbrStg").Value

Der Vollständigkeit halber: Option Explicit ist gesetzt.

Damit dürfte der geöffnete Editor als Ursache sehr wahrscheinlich ausfallen. Könnte es dann
daran liegen, dass die Daten "zu schnell" ezeugt werden, um sicher in der Tabelle gespeichert
werden zu können.

Info: während das Makro läuft und die Daten geschrieben werden, gelten diese Einstellungen:

With Application
.ScreenUpdating = False
.Cursor = xlWait
.DisplayAlerts = False
.EnableEvents = False
.DisplayStatusBar = False
.Calculation = xlCalculationManual
End With

Ich hoffe, Du kannst mit diesen Infos etwas anfangen, danke.

Dieter


Anzeige
AW: Makrolauf bei geöffnetem Editor
onur
Geschrieben (korrekter: in Blatt angezeigt) wird erst, wenn
ScreenUpdating = True
aufgerufen wird.

Ausserdem: NIE gleiche Namen für Variable und Rangebereich verwenden:
Stg_NbrStg = ThisWorkbook.Sheets("Stg").Range("Stg_NbrStg").Value
AW: Makrolauf bei geöffnetem Editor
Dieter Krüsemann
Schade, dabei wurde es dadurch so schön übersichtlich.

Habe jetzt einige Arbeit vor mir. Hoffentlich ist die Sache damit erledigt, woran ich ehrlich gesagt, ein wenig zweifele.
AW: Makrolauf bei geöffnetem Editor
onur
Wo ist denn das Problem?
Einfach beim Testen einschalten und wenn Code einwandfrei läuft, wieder Bildschirmaktualisierung ausschalten.
AW: Makrolauf bei geöffnetem Editor
onur
Geschrieben (korrekter: in Blatt angezeigt) wird erst, wenn
ScreenUpdating = True
aufgerufen wird.

Ausserdem: NIE gleiche Namen für Variable und Rangebereich verwenden:
Stg_NbrStg = ThisWorkbook.Sheets("Stg").Range("Stg_NbrStg").Value
Anzeige
AW: Makrolauf bei geöffnetem Editor
onur
Geschrieben (korrekter: in Blatt angezeigt) wird erst, wenn
ScreenUpdating = True
aufgerufen wird.
AW: Makrolauf bei geöffnetem Editor
Dieter Krüsemann
Aber als Wert ist das in der Zelle vor dem 'ScreenUpdating = True' enthalten und kann verarbeitet werden?

Die Einstellungen With Application ... End With werden erst am Ende des Makros wieder auf Standard zurückgesetzt.
AW: Makrolauf bei geöffnetem Editor
onur
DAS war doch deine Frage:
"...manchmal nicht an die betreffende Stelle in der Arbeitsmappe geschrieben werden (Zelle bleibt leer)? "
Zelle bleibt leer, weil Bildschirm NICHT aktualisiert wird, solange Bildschirmaktualisierung deaktiviert ist.
Ich nehme an, du überprüfst die Zelle, während das Makro noch läuft (mittels Stop-Befhl oder Haltepunkt). Wenn ja, gib mal im Debugfenster ein:
Application.ScreenUpdating=True

und überprüfe die Zelle nochmal.
Anzeige
AW: Makrolauf bei geöffnetem Editor
Dieter Krüsemann
Danke für Deine schnelle Antwort,

stimmt, ein mit Dim deklariertes Range Objekt, 'Set' für dieses Objekt kommt später im code.

Die Werte, die in dieses Range Objekt geschrieben werden, ermittelt der code und wird mit
z.B. RangeObjekt(i, j).Value = "im Makro ermittelter Wert" hineingeschrieben.

Den Makrocode habe ich durchgesehen. Darin stehen weder "ActiveCell", "ActiveSheet", "Select"
oder "Selection". Zugriffe auf Tabellenwerte erfolgen außer über Range Objekte z.B. so:

Stg_NbrStg = ThisWorkbook.Sheets("Stg").Range("Stg_NbrStg").Value

Der Vollständigkeit halber: Option Explicit ist gesetzt.

Damit dürfte der geöffnete Editor als Ursache sehr wahrscheinlich ausfallen. Könnte es dann
daran liegen, dass die Daten "zu schnell" ezeugt werden, um sicher in der Tabelle gespeichert
werden zu können.

Info: während das Makro läuft und die Daten geschrieben werden, gelten diese Einstellungen:

With Application
.ScreenUpdating = False
.Cursor = xlWait
.DisplayAlerts = False
.EnableEvents = False
.DisplayStatusBar = False
.Calculation = xlCalculationManual
End With

Ich hoffe, Du kannst mit diesen Infos etwas anfangen, danke.

Dieter


Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige