AW: ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Q
21.05.2013 09:46:08
fcs
Hallo Eddie,
die geöffnete PDF-Datei zu überschreiben wird nicht funktionieren. Das wird durch das Betriebssystem bzw. den Netztwerkserver verhindert.
Man kann aber den Fehler abfangen und versuchen einen alternativen Weg zu gehen.
Der alternative Weg hängt etwas davon ab, wie schnell die aktualisierte Version der PDF-Dtaei den anderen Anwendern zur Verfügung stehen muss.
Grundsätzlich wird die PDF-Datei in einem anderen Verzeichnis temporär gespeichert, wenn die Originaldatei geöffnet ist.
Alternative A:
Wenn die Aktualisierung nicht so eilt, dann werden mit einem zeitgesteuerten VB-Script oder einer BATCH-Datei Nachts die Dateien aus dem temporären in das Originalverzeichnis kopiert. Das solltest du dann mit dem Netzwerks-Admin abstimmen.
Beispielmakro:
Sub MakePDFFile()
Dim strPDF_Name As String, strPath As String, PathOriginal As String, PathTemp As String
PathOriginal = "C:\Users\Public\Test" 'ggf. anpassen
PathTemp = "C:\Users\Public\Test\Temp" 'ggf. anpassen
On Error GoTo Fehler
strPDF_Name = "TestPDF.pdf"
If fncMakePDF(strPDF_FileName:=PathOriginal & "\" & strPDF_Name) = False Then
'PDF-Datei ist zur Zeit geöffnet
'Prüfen, ob das temporär Verzeichnis existiert
If Dir(PathTemp, vbDirectory) = "" Then
VBA.MkDir Path:=PathTemp
End If
'ggf. vorhandene Datei gleichen Namens löschen
If Dir(PathTemp & "\" & strPDF_Name) "" Then Kill PathTemp & "\" & strPDF_Name
'PDF in Temporär erstellen
If fncMakePDF(strPDF_FileName:=PathTemp & "\" & strPDF_Name) = True Then
MsgBox "PDF-Datei ist zur Zeit geöffnet." & vbLf _
& "PDF-Datei wurde in temporärem Verzeichnis erstellt.", _
vbInformation + vbOKOnly, "PDF-Datei aktives Blatt erstellen"
Else
MsgBox "PDF-Datei ist zur Zeit geöffnet." & vbLf _
& "Fehler beim Erstellen der PDF-Datei.", _
vbInformation + vbOKOnly, "PDF-Datei aktives Blatt erstellen"
End If
End If
Fehler:
With Err
Select Case .Number
Case 0 'alles OK
Case Else
MsgBox "Fehler-Nr.: " & .Number & .Description
End Select
End With
End Sub
Function fncMakePDF(strPDF_FileName As String) As Boolean
'PDF-Datei des aktiven Blattes erstellen
On Error GoTo Fehler
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=strPDF_FileName, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
OpenAfterPublish:=False
Fehler:
With Err
Select Case .Number
Case 0 'alles OK
fncMakePDF = True
Case Else
' MsgBox "Fehler-Nr.: " & .Number & .Description, vbInformation, _
"Fehler beim erstellen der PDF-Datei"
fncMakePDF = False
End Select
End With
End Function
Alternative B:
Wenn die PDF-Datei so schnell wie möglich ins Originalverzeichniskopiert werden soll, dann kann man in Excel zeitgesteuert ein entsprechendes Kopiermakro starten, ggf. mit regelmäßiger Wiederholung.
Beispieldatei: https://www.herber.de/bbs/user/85422.xlsm
Gruß
Franz