Zusammenspiel Excel, Word und Fortschrittsanzeige (VBA)

DrPendergast, Donnerstag, 15.08.2019, 16:49 (vor 36 Tagen)

Hallo zusammen!

Ich bin mit meinem eigenen Latein am Ende und suche hier euer Wissen.

Zur Ausgangssituation:
Ich oder einer meiner Kollegen erstellen jede Woche abhängig von der Zielgruppe unterschiedliche Schulungsunterlagen. Die Unterlagen sind Wordformulare, die mit Hilfe von VBA und einer Serienbrieffunktion diverse PDFs ausspucken. Ich habe 15 verschiedene Vorlagen mit je ca. 70-90 Seiten, die ich in unterschiedlichen Kombinationen bis zu je 12 Exemplaren benötige.

Um mir und meinen Kollegen die Arbeit zu vereinfachen, habe ich in einer Exceldatei eine Userform angelegt. Hier muss man nur die Unterlagen ankreuzen und die Anzahl der Exemplare angeben. Nach einem einmaligen Klick auf [OK] wird jede Word-Datei, die für die Woche gewünscht ist, nacheinander aufgerufen, das jeweilge Erstellungsmakro ausgeführt und die erzeugten Schulungsunterlagen werden in einem Ordner abgelegt.

Soweit funktioniert das Prozedere sehr gut. Von Excel übergebe ich ein paar Variablen an Word, dort läuft das Makro aufgrund dieser bis zum Ende durch und dann macht Excel automatisch mit der nächsten Word-Datei weiter, bis alles fertig ist.

Leider dauert die Erstellung etwas lange und ist auch nicht perfekt. Wer also parallel etwas anderes in Word oder Excel macht, kann Fehler produzieren. Ich hätte also gerne einen Fortschrittsbalken, der dem Anwender zeigt, dass er noch ein Weilchen die Füße stillhalten soll. Und da fangen meine Probleme an.


Die Frage:
Wie kann ich es anstellen, dass Word im Rahmen seiner For-Next-Schleifen, in der die Unterlagen erstellt werden, nach jeder Unterlage der Userform eine Information liefert, dass sich der Fortschrittsbalken ein Stück weiterbewegen soll UND das dem User auch angezeigt wird?


Meine Überlegungen dazu sind folgende bisher gewesen:
- Excel berechnet vorab bereits, wie viele Unterlagen zu erstellen sind und errechnet einen Multiplikator für den Fortschrittbalken (Dreisatz -> Prozent).

- Word muss also nur überhaupt eine Meldung an Excel geben, ohne dass diese Inhalt haben muss.

- Die Userform sollte möglichst im Vordergrund sein und nach jeder For-Next-Schleife aktualisiert werden.

- Ich habe bereits eine eigenständige Userform (ufProgress) in Excel, die mit der bekannten Label.Width-Methode den Fortschritt anzeigen soll (lbProgress).


Ich weiß, das ist ohne Code oder Beispieltabelle vielleicht viel verlangt, aber die kann ich leider nicht hochladen. Die wären auch mit den 1000 weiteren Dingen darin ziemlich überladen und verwirrend. Ich hoffe trotzdem, auf den ein oder anderen Tipp, mit dem ich dann weiter probieren kann.


Vielen Dank im Voraus!
Paul

Zusammenspiel Excel, Word und Fortschrittsanzeige

Martin Asal @, Donnerstag, 15.08.2019, 19:06 (vor 36 Tagen) @ DrPendergast

Hallo Paul,

dein Problem ist eigentlich, dass du Excel verwendest, mit Access wäre das kein Problem ;-)

Streng genommen dürfte außerdem wohl dein Problem nicht im Ansprechen von Word liegen; ich glaube, so...

Dim wd As Word.Application
for each Datei in Worddateien
    Set wd = CreateObject("Word.Application")
    wd.Visible = False
    '... Drucken etc
    set wd = Nothing
Next

...ist es egal, ob jemand inzwischen an Word rummacht oder nicht.

Den Fortschrittsbalken hast du doch mit dem Label schon erstellt, oder? Falls er sich nicht aktualisiert, probiere mal ufProgress.Repaint bzw. Me.Repaint am Ende der Schleife.

Durch ein Visible = False, wie oben gezeigt, dürfte Excel auch im Vordergrund bleiben. Falls es da noch Probleme gibt, geht auf jeden Fall eine API-Lösung. Da habe ich was, aber versuche es erst mal ohne. API sollte man immer sehr sehr vorsichtig einsetzen, und nur, wenn es nicht anders geht.

Martin

Zusammenspiel Excel, Word und Fortschrittsanzeige

DrPendergast, Freitag, 16.08.2019, 10:51 (vor 36 Tagen) @ Martin Asal

Hallo Martin,

Danke schon mal für die zügige Antwort!

Leider steht mit Access hier nicht zur Verfügung, ich werde also bei Excel bleiben müssen. Sorry! ;-)

Ich befürchte aber, dass wir uns nicht ganz verstanden haben:

Die Hauptanwendung in Excel öffnet die verschiedenen Word-Dateien problemlos und führt auch alle darin vorhandenen Makros in der gewünschten Weise aus. Was ich hingegen nicht hinbekomme, ist, dass Word während der Ausführung dieser Makros seinerseits wieder Excel anspricht und den Fortschrittsbalken bewegt.

Ich versuche es noch mal anders darzustellen:

1. Das Hauptmakro (Excel) wird aus einer Userform heraus gestartet.
2. In Excel öffnet sich eine zweite Userform mit Fortschrittsbalken.
3. Das Hauptmakro öffnet im Rahmen einer Schleife die erste Worddatei, startet dort das erste Erstellungsmakro und übergibt ein paar dafür notwendige Variablen.
4. Im Erstellungsmakro (Word) wird jetzt seinersets eine Schleife angestoßen. Hier soll in jedem Durchgang wiederum einmal der Fortschrittsbalken in Excel angesprochen werden.
5. Das Erstellungsmakro ist bis zum Ende durchgelaufen.
6. Das Hauptmakro in Excel macht jetzt seinerseits mit der Schleife weiter und öffnet die nächste Worddatei usw., bis die Schleife und damit auch die ganze Prozedur beendet ist.

Mein Problem steckt in Schritt 4. Das bekomme ich einfach nicht hin. In Excel wird ja bereits eine Prozedur ausgeführt (das Hauptmakro). Hat es damit etwas zu tun?

Vielleicht hat es das etwas besser erklärt.


Gruß
Paul

Zusammenspiel Excel, Word und Fortschrittsanzeige

Martin Asal @, Freitag, 16.08.2019, 11:17 (vor 36 Tagen) @ DrPendergast

Hallo Paul,

Warum machst du es so kompliziert? Ich würde einfach den Code, den du jetzt in Word hast, in deinen Hauptcode in Excel mit reinpacken, in die Schleife.

Martin

Zusammenspiel Excel, Word und Fortschrittsanzeige

DrPendergast, Freitag, 16.08.2019, 11:24 (vor 36 Tagen) @ Martin Asal

Hm, ok. Vielleicht besteht da tatsächlich der Denkfehler.

Ursprünglich gab es halt nur die Worddateien mit den enthaltenen Makros, die man dann alle händisch nacheinander ausführen musste. Die übergeordnete Exceldatei habe ich dann nachträglich hinzugefügt.

Dafür muss ich erst einiges umstrukturieren, aber ich werde mich mal daran versuchen.

Auf jeden Fall ein guter Tipp. Danke!

RSS-Feed dieser Diskussion
powered by my little forum