Excel-Grafiken aus SAS via DDE und VBA-Macros erstellen
Hallo,
ich nehme Daten aus einer SAS-Tabelle, führe (immer noch in SAS) statistische Auswertungen auf diesen durch und stelle die Ergebnisse in Form von Tabellen und Balkendiagrammen in Excel dar. Die tabellarische Darstellung in Excel erfolgt nur über DDE-Befehle, die Erstellung des Balkendiagrammes über den Aufruf eines VBA-Macros.
Die einzelnen Komponenten (Generierung der Tabellen in Excel, Starten des VBA-Macros) sind in eigenen Macros gespeichert und werden in einer Schleife aufgerufen.
Nun zu meinem Problem:
Die einzelnen Komponenten lassen sich separat und auch in einer Schleife ganz normal starten und laufen einwandfrei. Allerdings sobald es zu viele Schleifendurchläufe werden, hängt sich Excel entweder auf oder generiert einen unsinnigen VBA-Macrofehler (Objekteigenschaften mit Lese-/Schreibzugriff sollen auf einmal Schreibgeschützt sein). Das SAS-Programm hängt dann ebenfalls, da es auf Excels Rückmeldung wartet. Schließe ich dann Excel, läuft SAS weiter durch, allerdings funktioniert dann das Programm nicht mehr, die DDE-Befehle nun ins Leere laufen.
Kann es sein, dass irgendwo ein Puffer volläuft oder Excel nur eine bestimmte Anzahl von DDE-Befehlen verarbeiten kann?
Folgende Lösungsversuche schlugen bereits fehl:
- Einbauen von sleep() nach DDE-Befehlen.
- Excel nach einer bestimmten Anzahl von Schleifendurchläufen speichern, schließen und wieder öffnen.
- Auslassen der vom VBA-Debugger bemoserten Variablen. Wenn die einen auskommentiert sind, werden andere bemeckert, die keinen Einfluss haben können. Meistens friert Excel aber einfach ohne Debbuger-Meldung ein.
Bin dankbar für jeden Tipp und jede Erfahrung, die Jemand schonmal in dem Bereich gesammelt hat.
Gruß Frederik
- Anmelden oder Registrieren um Kommentare zu schreiben

DDE ist speicherhungrig und etwas hakelig,
die Erfahrung habe ich auch schon gemacht. Daher würde ich es von der anderen Seite her aufbauen. EXCEL-VBA-Makro als Steuermakro, dass SAS im Batchmode aufruft. SAS kann dan Ausgabetabellen im Excelformat generieren, dei dann vom VBA-Macro eingelesen werden und dann starte das Makro den neuen SAS-Codeabschnitt. Das ist deutlich stabiler als DDE. Ansonsten kann viel Speicher DDE stabilisieren, aber sicher wird das eingentlich nie.
Grüße // Martin Schaefer
Nächster Versuch
Danke Martin für die rasche Antwort!
Ein Start aus Excel heraus könnte etwas schwierig werden, da das Programm später in eine SAS-Steuerdatei eingebunden werden soll und auf diverse globale Macro-Variablen zugreift. Außerdem scheint es weniger an vollem SAS-Speicher, als an vollem Excel-Speicher zu liegen, da das SAS-Programm ja nach Schließen des aufgehängten Excels weiterläuft.
Gestern habe ich mit einem Kollegen entdeckt, dass das Programm fehlerlos durchläuft, wenn ich im Diagramm generierenden VBA-Macro die Formatierungen der Grafik rausnehme. Heute werde ich dann ein weiteres VBA-Macro bauen, welches ich einmal am Ende des SAS-Programms aufrufen werde und welches dann in einem Rutsch selbstständig alle Diagramme formatiert. Vielleicht klappt das.
Werde das Ergebnis später mitteilen.
Gruß Frederik
Lösung des Problems
Hallo,
der Versuch ist geglückt und das Programm läuft jetzt ohne Fehler durch. Warum sich Excel jetzt genau bei der ersten Variante mittendrin aufhängt, ist mir schleierhaft.
Die einzige Auffälligkeit, die wärend der Programmierung des Formatierungs-VBA-Macros ins Auge stach, war die Tatsache, dass die ChartObjects in einer Exceldatei auch nach dem Löschen noch als Objektleichen mitgeschleift werden. Auch das Neustarten von Excel bringt keine Abhilfe. Die Objektleichen werden mitgespeichert und sind beim Neustart wieder vorhanden. Ich habe dieses Problem jetzt mit einem VBA-Macro, welches alle ChartObjects zu Beginn meines Programms automatisch löscht, umgangen.
Ansonsten funktioniert die Lösung so wie in meinem vorherigen Beitrag beschrieben.
Ansonsten noch mal danke, Martin, für deine Hilfestellung!
Gruß Frederik