Collapse column

Beiträge anzeigen

Diese Sektion erlaubt es dir alle Beiträge dieses Mitglieds zu sehen. Beachte, dass du nur solche Beiträge sehen kannst, zu denen du auch Zugriffsrechte hast.


Nachrichten - RainerW

Seiten: [1]
1
Excel / Antw: Limit Code-Größe
« am: Juni 21, 2017, 07:34:39 Vormittag »
Hallo René,

das mit der 64bit Version hat sich bei mir ergeben, da ich in unserem Migrationsprojekt unseres ERP-Systems sehr große Datenmengen ausgelesen, geprüft und bewegt habe. Aktuell Programmiere ich ein Projektcontrolling auf Basis von SQL-Durchgriffen auf die SQL Datenbank des ERP-Systems. Als Abfallprodukt ist aktuell eine Kapazitätsplanung auch noch auf Basis des Projektcontrollings dran.

Da kommen große Mengen Programmcode aber auch Daten zusammen. Das Ganze läuft als Nachtjob im Scheduler.

Abschließend empfiehlt EPlan (System zur Erstellung von Elektroplänen) - hier lese ich Excel-Elektrostücklisten in unser ERP-System ein - auch noch die 64bit Version.

Da komme ich nicht um die 64bit Version herum und ein "Mischbetrieb mit 32bit" ist ja bekanntlich nicht möglich.

Mein Problem habe ich dahingehend gelöst, dass ich die betroffene Prozedur auf zwei Prozeduren aufgeteilt habe.

Wie gesagt, mein Code kann sicherlich optimiert werden, habe mich aber zum Aufsplitten entschieden.

Vielen Dank für Deinen Hinweis

Herzliche Grüße
Rainer

2
Excel / Antw: Limit Code-Größe
« am: Juni 20, 2017, 14:21:39 Nachmittag »
Hallo maninweb,

ja ja, ich weiß - ich bin mal wieder zu wenig nachsichtig  8)

Bin halt nur der Meinung, dass dies einem modernen System nicht gerecht wird.

Natürlich will ich nicht nachtreten - aber die 64k Grenze erinnert mich doch stark an MS-DOS  :P
Scheint wirklich schon etwas in die Jahre gekommen zu sein.

Was ist denn die Alternative - außerhalb mit den Produkten des .net-Framework (z. B. vb.net) Add-Ins programmieren? Oder gibt es bereits Planung von Nachfolgeprodukten zu VBA?

BG
Rainer

3
Excel / Antw: Limit Code-Größe
« am: Juni 20, 2017, 11:13:39 Vormittag »
Hallo maninweb,

vielen Dank für Deine Hilfe!

Das Ergebnis ist aber ein Armutszeugnis seinens Microsoft. Als Entwickler soll ich eine 32bit Version zum Entwickeln benutzen, kann also keine 64bit optimierte Version nutzen, wenn es z. B. um große Datenmengen geht. Das geht nicht an mich.

Aber was soll es, Microsoft wird das soviel interessieren wie der berühmte Sack Reis, der in China aufplatzt ...

Nochmal Danke

BG, Rainer

4
Excel / Antw: Limit Code-Größe
« am: Juni 20, 2017, 08:26:38 Vormittag »
Hallo Lupo1,

Danke für den Hinweis. Wie immer ist der Code optimierbar. Da ich aber bis auf wenige Ausnahmen keinen Makrorecorder-Code verwende und versuche, einigermaßen effektiv zu programmieren, ist das Kürzungspotential mit meinen Mitteln nicht stark sondern ehr mäßig.

Ich bin schon dabei, die betroffene Prozedur in zwei aufzuteilen. Mich interessiert einfach nur, warum das auf einem Rechner funktioniert und auf dem andern nicht (mich machen Zufallsergebnisse immer ein wenig nervös). Ferner würde ich auch gerne sehen, inwieweit ich die 64k bereits ausnutze. Dann könnte ich bzw. man reagieren, bevor eine Auswertung auf die Bretter geht.

BG, Rainer

5
Excel / Limit Code-Größe
« am: Juni 19, 2017, 09:58:24 Vormittag »
Hallo,

ich habe folgendes Problem.

In einer Exceldatei habe ich mehrere Subs in einem Modul. Das Ganze ist sehr umfangreich (insgesamt ca. 4000 Programmzeilen).

Die Subs werden über einen Schedulerjob angestoßen. Neuerdings erhalte ich die Meldung am Server mit dem Schedulerjob:
"Fehler beim Kompilieren: Prozedur zu groß"

Wenn ich das ganze lokal auf meinem Rechner laufen lasse, erhalte ich die Fehlermeldung nicht.

Beide Maschinen laufen mit Excel 2010, auf dem Server allerdings die 32bit Version, auf meinem Rechner 64bit.

Ich kann natürlich (mit einigem Aufwand) die kritische Sub in mehrere Subs aufteilen um das Problem zu umgehen. Allerdings wüsste ich gerne, wo genau mein Problem liegt. Dazu finde ich leider nirgendwo folgende Informationen:
- Unterschied in der 64k Kompilatgröße bei 32-/64bit Versionen?
- wo kann ich die Größe des erzeugten Kompilats feststellen (Anzahl von Zeilen sind ja beliebig und haben nichts mit dem ausführbaren Code zu tun)?

Ich bin über jeden Hinweis dankbar!

Vielen Dank und Grüße
Rainer

6
... den Rainer-Bug, wenn schon kein Komet und keine Rose nach mir benannt wurde ;D

7
Hallo maninweb,

das Problem ist gelöst- scheinbar war die 2. Datei korrupt.

Der Befehl Workbooks(strManuelleDatei).Close savechanges:=True hat KEINEN Laufzeitfehler produziert. Ebenfalls lässt sich die Datei ohne Fehler öffnen ...

Beim Umstellen des Codes auf
1. Workbooks(strManuelleDatei).Save
2. Workbooks(strManuelleDatei).Close
ist der .Save auf Laufzeitfehler 1004 gelaufen.

Dann habe ich versucht, die 2. Datei über das Menü zu speichern. Dabei habe ich auch eine Fehlermeldung kassiert:
"Fehler beim Speiern von xxx. Durch Entfernen oder Reparieren einiger Features kann die Datei von Microsoft Excel möglicherweise gespeichert werden. Klicken Sie auf "Weiter", um die Reparatur in einer neuen tei auszuführen ...."

Nachdem ich die 2. Datei neu erzeugt habe, läuft das Makro ohne Fehler durch.

Warum aber der .CloseSavechanges trotzdem die Datei gespeichert und nicht geschlossen hat, erschließt sich mir nicht.

Trotzdem vielen Dank, das Problem ist gelöst

Viele Grüße
Rainer

8
Hallo maninweb,

leider auch kein Erfolg, im abgesicherten Modus gleiche Reaktion.

Ich habe folgenden Workaround:

Da das Makro als Schedulerjob läuft und beide Mappen (ThisWorkbook und die 2. Datei) in der selben Instanz geöffnet sind, schließe ich die Instanz am Makroende mit Application.Quit, dann sind beide Workbooks und die Excel-Instanz am Server wieder geschlossen. Da das savechanges:=true funktioniert ist danach alles gut.

Vielen Dank für Deine Hilfe, mehr geht ohne detailierte Analyse des Codes (und der Konfiguration meines Rechners) nicht!
Das Forum wird seinem erstklassigen Ruf mehr als gerecht :-)

BG, Rainer

9
Guten Morgen, maninweb,

ich habe folgendes gecheckt/ausprobiert:

1) in Workbooks(strManuelleDatei) gibt es - neben den nicht-eventgesteuerten Makros - nur Workbook_Open().
Also nichts, was m. E. das Schließen verhindern sollte

2) Debug.Print Err.Description gibt vor und nach dem .Close savechanges:=True nur einen leeren String aus.
Alles andere hätte mich gewundert, ich habe ein Errorhandling programmiert, das Laufzeitfehler in einem Errorlog festhälgt. Da ist auch nichts vermerkt. Hintergrund: mein Makro läuft auf einem unserer Server Schedulergesteuert, deshalb das Log-File (sonst bekomme ich im Fehlerfall nichts mit)

3) Ich habe mir ActiveWorkbook auch nur getraut, weil das Makro nachts vom Scheduler gesteuert läuft. Trotdem habe ich ActiveWorkbook durch Workbooks(strManuelleDatei) ersetzt.

4) Meinen Rechner neu gebootet (hatte ich bereits vor meinem Post im Forum erledigt), um auszuschließen, dass da noch ein Excel-Prozess im Hintergrund stört

Leider besteht mein Problem weiterhin - bin ehrlich etwas ratlos ...

Danke und Grüße
Rainer

10
Hallo maninweb,

danke, das probiere ich aus, erst einmal vielen Dank!

BG
Rainer

11
Hallo maninweb,

das ist ein sehr umfangreiches Projekt. Der relevanten Ausschnitt:

      'manuelle Datei synchronisieren
      'da Automatikmodus => kein Abbruch, falls mehr als eine Datei vorhanden
      '=> geöffnet wird die erste, die Excel findet, falls mehr als eine manuelle Datei vorhanden!
      strManuelleDatei = Dir(strSchedulerPfad & "Arbeitskalkulation NL GUN*_MANUELL.xlsm")
     
      'a) manuelle Datei öffnen
      Workbooks.Open Filename:=strSchedulerPfad & strManuelleDatei
     
      'b) Blattschutz manuelle Datei ausschalten
      ActiveWorkbook.Worksheets("Historie").Unprotect Password:="xxx"
      ActiveWorkbook.Worksheets("Projektspez").Unprotect Password:="xxx"
     
      'c) Inhalt Tabellenblatt Projektspez und Historie in manueller Datei löschen
      ActiveWorkbook.Worksheets("Projektspez").UsedRange.ClearContents
      ActiveWorkbook.Worksheets("Historie").UsedRange.ClearContents
     
      'd) Werte aus Auto-Datei Tabellenblatt Projektspez und Historie nach manuelle Datei kopieren
      ThisWorkbook.Worksheets("Projektspez").UsedRange.Copy _
         ActiveWorkbook.Worksheets("Projektspez").Range("A1")
         
       ThisWorkbook.Worksheets("Historie").UsedRange.Copy _
         ActiveWorkbook.Worksheets("Historie").Range("A1")
     
      'e) Blattschutz manuelle Datei einschalten
      ActiveWorkbook.Worksheets("Historie"). _
         Protect Password:="*", _
         AllowFormattingCells:=True, _
         AllowFormattingColumns:=True, _
         AllowFormattingRows:=True, _
         DrawingObjects:=False, _
         Contents:=True, _
         Scenarios:=True
         
      ActiveWorkbook.Worksheets("Projektspez"). _
         Protect Password:="*", _
         AllowFormattingCells:=True, _
         AllowFormattingColumns:=True, _
         AllowFormattingRows:=True, _
         DrawingObjects:=False, _
         Contents:=True, _
         Scenarios:=True
         
      'ThisWorkbook und die manuelle Datei sichern, nachdem Projektspez und Historie
      'aus den Projektleiterdateien aktualisiert wurden
      ThisWorkbook.Save
      'ActiveWorkbook.Close savechanges:=True
      Workbooks(strManuelleDatei).Close savechanges:=True

Danke vorab für die Unterstützung

BG
Rainer
     

12
Hallo,

ich habe eine selbsame Reaktion meines Makros.

Aus ThisWorkbook heraus öffne ich eine zweite Arbeitsmappe, manipuliere diese über ActiveWorkbook.
Danach möchte ich diese (zweite) Arbeitsmappe speichern und schließen.

Sowohl
   ActiveWorkbook.Close savechanges:=True
als auch
   Workbooks(strManuelleDatei).Close savechanges:=True
speichern die Arbeitsmappe aber schließen diese nicht. Das Problem hatte ich bisher nicht - darum kann ich mir das gerade nicht erklären.

Ich möchte also Excel nicht beenden (Application.Quit) sondern lediglich die zweite Arbeitsmappe speichern (klapp) und schliessen (klappt nicht). Thisworkbook soll weiter geöffnet bleiben ...

Freue mich über jede Idee, warum das ausgerechnet im vorliegenden Fall nicht funktioniert

Danke und Grüße
Rainer


Seiten: [1]