VBA in Word 2010 bzw 2013(16)
Hallo,
wir haben hier folgendes Word-Makro:
Es wird bei der Abarbeitung eines Dokuments durch eine Bürosoftware ausgeführt (überprüft!). Anschließend sollte sich das Dokument schließen.
Die Beobachtung ist, dass das Makro in Word 2013/2016 läuft, nicht aber in Word 2010, hier kommt eine Nachfrage, ob gespeichert werden soll.
Ist es vorstellbar, dass man zwischen der Verwendung in Word 2010 und Word 2013/2016 unterscheiden muss?
Gibt es eine andere, sauberere Möglichkeit, mit einem Makro in Word
a) bei einem Dokument X alle Felder zu aktualisieren
b) das Dokument X zu drucken
c) das Dokument X zu schließen ohne der Nachfrage, ob gespeichert werden soll.
Neugierige Grüße,
Andreas
wir haben hier folgendes Word-Makro:
Public Sub PrintDeadline()
ActiveDocument.PrintOut Background:=False
ActiveDocument.Save
ActiveDocument.Saved = True
End Sub
Es wird bei der Abarbeitung eines Dokuments durch eine Bürosoftware ausgeführt (überprüft!). Anschließend sollte sich das Dokument schließen.
Die Beobachtung ist, dass das Makro in Word 2013/2016 läuft, nicht aber in Word 2010, hier kommt eine Nachfrage, ob gespeichert werden soll.
Ist es vorstellbar, dass man zwischen der Verwendung in Word 2010 und Word 2013/2016 unterscheiden muss?
Gibt es eine andere, sauberere Möglichkeit, mit einem Makro in Word
a) bei einem Dokument X alle Felder zu aktualisieren
b) das Dokument X zu drucken
c) das Dokument X zu schließen ohne der Nachfrage, ob gespeichert werden soll.
Neugierige Grüße,
Andreas
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 360593
Url: https://administrator.de/contentid/360593
Ausgedruckt am: 22.11.2024 um 12:11 Uhr
11 Kommentare
Neuester Kommentar
Servus Andreas.
(Die letzte Zeile nicht vergessen, sonst sieht der User keine Nachfragedialoge mehr)
Grüße Uwe
Zitat von @ahstax:
Gibt es eine andere, sauberere Möglichkeit, mit einem Makro in Word
a) bei einem Dokument X alle Felder zu aktualisieren
Ja. Kleine Methode:Gibt es eine andere, sauberere Möglichkeit, mit einem Makro in Word
a) bei einem Dokument X alle Felder zu aktualisieren
Sub UpdateAllFields()
Dim oStory As Range
For Each oStory In ActiveDocument.StoryRanges
oStory.Fields.Update
If oStory.StoryType <> wdMainTextStory Then
While Not (oStory.NextStoryRange Is Nothing)
Set oStory = oStory.NextStoryRange
oStory.Fields.Update
Wend
End If
Next oStory
Set oStory = Nothing
End Sub
b) das Dokument X zu drucken
Wie gehabt mit der entsprechenden Print Methode oben.c) das Dokument X zu schließen ohne der Nachfrage, ob gespeichert werden soll.
Dafür hat man folgende Eigenschaft geschaffen die man vor dem Batch-Vorgang auf False festlegt und danach wieder auf True.Application.DisplayAlerts = False
' Dinge hier erledigen die einen Dialog triggern könnten.
Application.DisplayAlerts = True
Grüße Uwe
Zitat von @ahstax:
Das Zurücksetzen von
könnte allerdings ein Problem werden...
Kein Problem, kannst du im DocumentClose oder ApplicationExit Event zurücksetzen.Das Zurücksetzen von
Application.DisplayAlerts = False
Die Datei wird gedruckt. Davor werden die Felder aktualisiert, unter anderem die Seitenzahlen. Und ich nehme an, dass da das Problem liegt.
Das ist normal vor dem Drücken werden die Felder immer aktualisiert.Das erkennt Word als Änderung, die beim schließen zu speichern ist.....
Klar, aber das ist ja kein Problem wenn du DisplayAlerts = False vor der Save-Methode Methode setzt oder noch früher, je nachdem und danach wieder zurücksetzt.Ich sehe hier absolut kein Problem, sorry. Entweder du verstehst es noch nicht ganz oder dein Workflow lässt mich noch im Dunkeln.
?? und was dann ist es ein einfaches XLSX?
Wenn ich es richtig verstehe, müsste
ja etwa so verwendet werden:
Das Dokument, das diesen Handler auslöst, muss ja, wenn ich es nochmals richtig verstehe, auf der DOTM-Datei basieren, in der Public Sub Document_Close() hinterlegt ist.
Ein Dokument in dem Makros liegen muss zwingend eins mit Makroextension (*m) sein.Application.DisplayAlerts = False
> Public Sub Document_Close()
> Application.DisplayAlerts = True
> End Sub
>
Wie wäre denn das:
Mein Büroprogramm öffnet das "unwillige" Dokument und druckt es. Das Makro dazu setzt auch
Wenn ich nach dem Drucken von dem Makro eine leere, neue Datei erstellen lasse, die auf der gerade beschriebenen DOTM-Datei beruht und die dann erst das ursprüngliche Dokument schließt und dann sich selbst...?
Application.DisplayAlerts ist eine Applikationseinstellung keine Dokumenteneinstellung.Mein Büroprogramm öffnet das "unwillige" Dokument und druckt es. Das Makro dazu setzt auch
Application.DisplayAlerts = False
Ich denke das was du suchst ist das Private Sub Document_New() Event in der Vorlage. Das wird ausgeführt wenn von der Vorlage ein neues Dokument erstellt wird, dort packst du alles rein bspw. so
Hierbei wird sobald man ein Dokument von der Vorlage erstellt, dieses gedruckt gespeichert und wieder geschlossen.
Kenne leider deinen exakt gewünschten Ablauf nicht, deswegen tappe ich hier völlig im Dunkeln was das betrifft, sorry.
Halte dich hier an die richtige Reihenfolge und und du wirst Erfolg haben.
Private Sub Document_New()
On Error Resume Next
With ActiveDocument
Application.DisplayAlerts = False
.PrintOut Background:=False
.SaveAs "C:\Pfad\datei.xlsx"
Application.DisplayAlerts = True
.Close
End With
End Sub
Kenne leider deinen exakt gewünschten Ablauf nicht, deswegen tappe ich hier völlig im Dunkeln was das betrifft, sorry.
Halte dich hier an die richtige Reihenfolge und und du wirst Erfolg haben.