Tabellenblatt als PDF ausgeben

Hallo Zusammen,

ich habe folgendes Problem:

Ich erstelle grade einen Personalplan für ein Fest. Die Exceldatei hat eine Übersicht, welche darstellt, in welchem Bereich noch Leute gebraucht werden. Diese basiert auf einer Soll/Ist Liste, welche sich berechnet (zählenwenn) aus der Helferliste.

Meine Idee ist, dass man mit einem Makro die Übersicht, welche als PDF online ist, bei jedem Eintrag in der Helferliste, die aktuelle Version erstellt. Mein Makro funktioniert nur in der Arbeitsmappe Übersicht, soll aber in der Helferliste erscheinen und soll die alte Datei überschreiben. Bisher kommt „Datei vorhanden“ mit der Auswahl „abbrechen“, „wiederholen“ und „ignorieren“. Mein Ziel ist es, dass die Schalfäche ohne Aufforderung das PDF aktualisiert. Ich hoffe, es ist verständlich… Hier meine VBA-Eingabe:

Sub PDFExport()
Dim oFSO As Object, bFileExists As Boolean, Dateiname As String, Exportname As String
Dim Nachfrage As Integer
Set oFSO = CreateObject(„Scripting.FileSystemObject“)
Dateiname = „C:\Users\Tobias\Dropbox\Green Hill 2015\Personal“ & Range(„A1“).Value
Do
  Exportname = Application.GetSaveAsFilename _
    (Dateiname, „PDF-Dateien (*.pdf), *.pdf“, , „PDF-Export“, „PDF-Export“)
  bFileExists = oFSO.FileExists(Exportname)
  If bFileExists Then Nachfrage = MsgBox("Die Datei existiert bereits " & vbLf & _
    „bitte wählen Sie einen anderen Namen“, vbAbortRetryIgnore + vbCritical _
      + vbDefaultButton2, „Nachfrage“)
  If Nachfrage = vbAbort Then Exit Sub
  If Nachfrage = vbIgnore Then bFileExists = False
Loop Until Not bFileExists
If Exportname „“ Then
  ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Exportname, _
    Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
      OpenAfterPublish:=False
  SendKeys „{ENTER}“
End If

    ActiveWorkbook.Save
    ActiveCell.Offset(-1, 0).Range(„A1“).Select
    ActiveSheet.Shapes.Range(Array(„TextBox 1“)).Select
    Selection.OnAction = „PDFExport2“
    ActiveCell.Offset(-5, 0).Range(„A1“).Select
End Sub

Kann mir jemand helfen???

Danke euch im Voraus!!!

Viele Grüße
dobbler

Nachfragen
Hallo dobbler,

ich verstehe das so:
Du hast 2 Excel-Dateien, „Übersicht“ und „Helferliste“. Oder sind das 2 Blätter in einer Datei?

Es gibt Formeln in „Übersicht“, die auf „Helferliste“ zugreifen. Dadurch ändern sich Einräge in „Übesicht“, wenn in „Helferliste“ etwas geändert wird. Stimmt das?

Sobald sich in „Übersicht“ etwas ändert (weil in „Helferliste“ etwas geändert wurde), soll übersicht als PDF exportiert werden. Wenn diese PDF-Datei bereits existiert, soll sie ohne Nachfrage überschrieben werden. Stimmt das?

In deinem Code wird der Exportname vom Benutzer eingegeben. Soll das auch weiterhin so sein, oder soll der Name im Code fest vorgegeben werden? Benuztereingabe würde wenig Sinn machen, weil ja immer wieder der selbe Name eingegeben werden müsste.

Wozu dient das

SendKeys "{ENTER}"

?

Wenn du die Fragen beantwortest, komme ich vermutlich heute Abend dazu, mal einen Code zu probieren.

Gruß, Andreas

Hi Andreas,

zu Absatz 1: Es sind zwei Blätter in einer Datei.

zu Absatz 2: genau, hier ist eine Ampelfunktion auf dem Blatt „Übersicht“, welche sich auf die „Helferliste“ bezieht.

zu Absatz 3: auch richtig. Das Starten des Makros soll durch das klicken auf eine Schaltfläche ausgeführt und somit das Makro erstellt werden.

zu Absatz 4 &5: Ich bin VBA-Anfänger, hab mit einem Buch und google gearbeitet. Aus diesem Grund ist das eine oder andere vielleicht wenig sinnig. Die Datei soll immer „Personalbedarf“ heißen. Dies steht in meiner Zelle A1. Anders wusste ich mir nicht zu helfen. SendKeys „{ENTER}“ sollte den Speichervorgang bestätigen, hat aber beim Ausprobieren nicht geklappt :frowning:

Ich würde mich riesig über deine Hilfe freuen!!!

Viele Grüße

dobblet

Hallo dobblet,

Füge mal folgenden Code in den Codebereich des Blattes „Übersicht“ ein:
Mach einen Rechtsklick auf den Blattreiter und wähle „Code anzeigen“.
Dann kopiere den folgenden Code dort hinein:

' Hier wird festgelegt, dass jede benutzte Variable auch dimensioniert werden muss.
' gehört zum guten Programmierstil, auch wenn hier keine Variablen benutzt werden.
Option Explicit

' Das Worksheet\_Calculate Ereignis tritt ein, wenn Werte auf dem Blatt
' aus irgend einem Grund neu berechnet werden.
' Hier passiert das, weil Formeln auf das Blatt "HelferlisteW" verweisen
' und dort etwas geändert wurde.
Private Sub Worksheet\_Calculate()

 ' Hier wird eine String-Konstante mit dem kompletten Pfad zur PDF-Datei erzeugt:
 Const pfad As String = "C:\Users\Tobias\Dropbox\Green Hill 2015\Personal\Personalbedarf.pdf"

 ' Erst mal die alte PDF-Datei löschen, damit beim Neuschreiben keine Abfrage erfolgt,
 ' ob überschrieben werden soll.
 ' Wenn die Datei aber noch gar nicht existiert, würde die Kill-Anweisung
 ' einen Fehler erzeugen. Das wird abgefangen mit:
 On Error Resume Next

 ' Jetzt wird gelöscht, bzw. falls nicht vorhanden, Fehler ignoriert:
 Kill pfad

 'Das Fehler-Ignorieren wird wieder abgeschaltet:
 On Error GoTo 0

 ' Jetzt die PDF-Datei neu erstellen:
 Sheets("Übersicht").ExportAsFixedFormat \_
 Type:=xlTypePDF, \_
 Filename:=pfad, \_
 Quality:=xlQualityStandard, \_
 IncludeDocProperties:=True, \_
 IgnorePrintAreas:=False, \_
 OpenAfterPublish:=False
End Sub

ich hoffe, die Kommentarzeilen sind genug Erklärung. Du brauchst keinen Button, um den Makro zu starten. Er wird immer dann automatisch ausgeführt, wenn sich auf dem Blatt „Helferliste“ (oder sonst wo) etwas ändert, das eine Neuberechnung der Werte in „Übersicht“ zur Folge hat.
Wenn’s Fragen oder Probleme gibt, melde dich wieder.

Gruß, Andreas

1 Like

Fuktioniert! Ich danke dir!!! MEGA! Wenn ich das mal kann, was du da hingezaubert hast, bin ich der KING :smiley: DANKE!!!

1 Like