refre sh word document - PullRequest
       6

refre sh word document

1 голос
/ 14 апреля 2020

У меня есть скрипт VBA, который я нашел в Интернете, чтобы сохранить несколько Word datasets как "Serienbrief" (я думаю, что он называется Bulletter на английском языке sh) в формате PDF. Документ Word состоит из различных Mergefields, а также нескольких гистограмм Excel, которые все еще связаны с соответствующим файлом Excel.

Проблема:

Когда я сохраняю datasets как pdf, mergefields изменяется при изменении dataset.

Однако графики всегда имеют значения первого dataset. Я могу обновить график до правильных значений, обновив документ Word вручную после изменения dataset, но мне нужно автоматизировать процесс.

Что я ищу:

Мне нужно было бы расширить приведенный ниже сценарий, чтобы он обновлял документ (и, следовательно, также гистограммы) каждый раз перед сохранением нового pdf (в основном cntrl+A, а затем F9).

То, что я пробовал:

Я нашел похожий вопрос здесь Слово VBA для рефракции sh Встроенная таблица Excel , но ответ не дал Это мне не поможет, в том числе и потому, что я не уверен, где реализовать его в скрипте.

Ниже вы найдете скрипт, который я использовал до сих пор и который работает довольно хорошо, за исключением отсутствующего refre sh - часть.

Любая помощь приветствуется!

Sub Serienbrief()
' set variables
Dim iBrief As Integer, sBrief As String
Dim AppShell As Object
Dim BrowseDir As Variant
Dim Path As String
' catch any errors
On Error GoTo ErrorHandling

' determine path
Set AppShell = CreateObject("Shell.Application")
Set BrowseDir = AppShell.BrowseForFolder(0, "Speicherort für Serienbriefe auswählen", 0, 16)

If BrowseDir = "Desktop" Then
Path = CreateObject("WScript.Shell").SpecialFolders("Desktop")
Else
Path = BrowseDir.items().Item().Path
End If

If Path = "" Then GoTo ErrorHandling

Path = Path & "\Serienbrief-" & Format(Now, "dd.mm.yyyy-hh.mm.ss") & "\"
MkDir Path

On Error GoTo ErrorHandling

' hide application for better performance
MsgBox "Serienbriefe werden exportiert. Dieser Vorganag kann einige Minuten dauern - Microsoft Word wird während dieser Zeit ausgeblendet", vbOKOnly + vbInformation
Application.Visible = False

' create bulkletter and export as pdf
With ActiveDocument.MailMerge
.DataSource.ActiveRecord = 1
Do
.Destination = wdSendToNewDocument
.SuppressBlankLines = True



With .DataSource
.FirstRecord = .ActiveRecord
.LastRecord = .ActiveRecord
sBrief = Path & .DataFields("IDSCHOOL").Value & ".pdf"
End With
.Execute Pause:=False
ThisDocument.InlineShapes(1).LinkFormat.BreakLink

If .DataSource.DataFields("IDSCHOOL").Value > "" Then
ActiveDocument.SaveAs FileName:=sBrief, FileFormat:=wdFormatPDF
End If
ActiveDocument.Close False

If .DataSource.ActiveRecord < .DataSource.RecordCount Then
.DataSource.ActiveRecord = wdNextRecord
Else
Exit Do
End If
Loop
End With

' error handling
ErrorHandling:
Application.Visible = True

If Err.Number = 76 Then
MsgBox "Der ausgewählte Speicherort ist ungültig", vbOKOnly + vbCritical
ElseIf Err.Number = 5852 Then
MsgBox "Das Dokument ist kein Serienbrief"
ElseIf Err.Number = 4198 Then
MsgBox "Der ausgewählte Speicherort ist ungültig", vbOKOnly + vbCritical
ElseIf Err.Number = 91 Then
MsgBox "Exportieren von Serienbriefen abgebrochen", vbOKOnly + vbExclamation
ElseIf Err.Number > 0 Then
MsgBox "Unbekannter Fehler: " & Err.Number & " - Bitte Makro erneut ausführen.", vbOKOnly + vbCritical
Else
MsgBox "Serienbriefe erfolgreich exportiert", vbOKOnly + vbInformation
End If

End Sub

1 Ответ

1 голос
/ 22 апреля 2020

Изменение:

ThisDocument.InlineShapes(1).LinkFormat.BreakLink

на:

ActiveDocument.InlineShapes(1).LinkFormat.Update
ActiveDocument.InlineShapes(1).LinkFormat.BreakLink
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...