ich habe ein großes Problem und hoffe auf eure Hilfe... Ich soll Quartalsweise Bescheinigungen ausstellen, wann welches Mitglied (ca. 37) an welcher Ausschusssitzung (ca. 12x 10) teilgenommen hat und dabei jeweils die Aufwandsentschädigung ausweisen... Dabei soll das Seriendokument als PDF, in Unterordnern ./Name/, gespeichert werden
Für meinen Schulverein habe ich seinerzeit mal ein Makro-Skript gefunden, mit dem ich das ähnlich konnte... Allerdings war es da recht einfach, da eine Excell-Zeile ein Datensatz bedeutete... hier nicht! ... und das ich mich überhaupt nicht mit VBA auskenne, macht es das bestimmt nicht einfacher...!
Hier wollte ich eine Wordvorlage erstellen mit dem Text a la:
Zitat:Lieber Max Mustermann, im Quartal 02/24 hast du an folgenden Sitzungen teilgenommen: Datum Auschuß XY 10,00 € Datum Auschuß AB 10,00 € Datum Auschuß XY 10,00 € Datum Auschuß AB 10,00 € Datum Auschuß AB 10,00 €
Damit erhälst du eine Aufwandsentschädigung i.H.v. 50,00 €.
und diese mit einer Excell-Datei verknüpfen, in der folgende Daten gespeichert sind:
das Erstellen solcher Bescheinigungen kann je nach Office-Version makrofrei per Serienbrief erledigt werden. Über ein ähnlich gelagertes Thema wird gerade hier https://www.clever-excel-forum.de/Thread...ebernehmen diskutiert.
Das Abspeichern als PDF in geeignete Ordner wird ohne Makro nicht abgehen. Du kannst dich ja nochmal melden, wenn du in der o.g. Diskussion was Passendes für dich findest. Am Rest soll es dann auch nicht scheitern.
Danke für die Hilfe... Der Beitrag #3 sieht sehr interessant aus - allerdings bekomme ich selbst das Beispiel nicht hin... Es wird immer nur ein Name angezeigt und nicht die Namen je Stadt. - siehe Screenshot...
Ich nutze Office 2007 - Wenn die Auflistung und Addierung der Beträge auch ohne Makro hinzubekommen wäre, glaube ich das vorhandene Makro selber entsprechend abändern zu können.
LG RF
Und nichts kann mich aufhalten...! - Mist, ne Kindersicherung.
ich hab das mal ausprobiert und bei mir klappt das Beispiel. Zwei Fragen:
Hast du berücksichtigt, dass du bei Sendungen > Seriendruck starten eingestellt hast: Verzeichnis? Falls das falsche Ergebnis in der Seriendruckvorschau auftaucht: Übergeh diesee und führe sofort Fertigststellen und zusammenführen > Einzelne Dokumente bearbeiten aus. Wie schaut es dann aus?
Im übrigen meine ich, dass du hier die umständlichste der drei Varianten gewählt hast. Die Variante mit dem DataBase-Feld ist relativ einfach, wenn erst mal eine eindeutige Liste der Städte ( bei dir: Namen) existiert. Die könntest du in Excel online mittels der Funktion = Eindeutig ruckzuck herstellen und als Werte in dein Excel 2007 rüberkopieren (ich habs nicht getestet, aber es sollte gehen).
Was die Summen pro Teilnehmer betrifft, das ist schon zu machen, sowohl in der DataBase-Variante als auch in der Feld-Variante. Ich hab das vor Jahren mal durchexerziert und fand es extrem mühsam. Aber wenn du möchtest, hier ist die Anleitung dazu.
Super, vielen Dank für eure Hilfe... Ich habe mir jetzt mal beides kurz angeschaut und denke, daß ich klar kommen sollte... Wenn nicht, melde ich mich wieder!! Ich teste das ganze, wenn ich die Tage wieder Zeitz dafür habe.
@Gerhard H: Deine Anleitung war für meine Bran.exe , gefühlt, sehr verständlich - super geschrieben!!
LG RF
Und nichts kann mich aufhalten...! - Mist, ne Kindersicherung.
Ich habe nahezu fertig... Es hat soweit gut geklappt und ich bin fast am Ziel - fast ... Mit der Anleitung von @Gerhard H ist der erste Teil meines Auftrages erfüllt!
Ich habe zum einen - zwar nur - einen Schönheitsfehler auf dem letzten Blatt einer Serie... Da wird der Inhalt mit ausgegeben, obwohl die Feldinhalte leer sind - Das Blatt ist also unnötig/überflüssig!
... und/aber - zum anderen- ein Problem mit dem Makro... Nachdem ich das Makro ausführe, bricht das Makro im ersten Brief ab und es erscheint folgende Fehlermeldung: (Der Speicherpfad wird bis dahin soweit korrekt generiert!)
"Unbekannter Fehler 75 - Bitte Makro erneut ausführen."
Mit vba kenne ich mich soweit überhaupt nicht aus - Der Makro-Code lautet wie folgt:
Code:
Sub Serien_PDF_erstellen() ' ' MakroSerien_PDF_erstellen ' ' Variantenänderung (Kommentarmarkierungen setzen/löschen): ' Zeile 65-68/74: Value im Ordner oder Dateinamen ' Zeile 75/76: Value im Dateinamen ' Zeile 85/86: PDF-Format x oder a ' ' Seriendruckfeld codieren: ' Zeile 65, 74, 75, 81 ' ' ' Definition der Variablen '============================================================================ Dim iBrief As Integer, sBrief As String Dim AppShell As Object Dim BrowseDir As Variant Dim Path As String, Path2 As String Dim dateiName As String
' Errhorhandler '============================================================================ On Error GoTo ErrorHandling
' Auswahlfenster Pfad - Windows-Fenster wird während Programm-Ausführung eingeblendet '============================================================================ Set AppShell = CreateObject("Shell.Application") Set BrowseDir = AppShell.BrowseForFolder(0, "Bitte den Speicherort auswählen", &H4000, 17) Path = BrowseDir.items().Item().Path
If Path = "" Then GoTo ErrorHandling
' Inputfenster Dateiname - Windows-Fenster wird während Programm-Ausführung eingeblendet '============================================================================ dateiName = InputBox("Bitte den Dateinamen angeben", , "")
If dateiName = "" Then GoTo ErrorHandling
' Unterordner definieren, in welchen die Serien-PDF-Dateien gespeichert werden sollen '============================================================================ Path = Path & "\Serienbrief-" & Format(Now, "dd.mm.yyyy-hh.mm.ss") & "\" MkDir Path
On Error GoTo ErrorHandling
' Hinweisfenster "Ausblenden" - Windows-Fenster wird während Programm-Ausführung eingeblendet '============================================================================ MsgBox "Serienbrief-Dateien werden jetzt erstellt. Dieser Vorganag kann einige Minuten dauern - Word wird während dieser Zeit ausgeblendet", vbOKOnly + vbInformation Application.Visible = False
' Erstelle Serienbrief Stapelablauf '============================================================================ With ActiveDocument.MailMerge .DataSource.ActiveRecord = 1 Do .Destination = wdSendToNewDocument .SuppressBlankLines = True With .DataSource .FirstRecord = .ActiveRecord .LastRecord = .ActiveRecord
' Value-Unterordner definieren, in welchen die PDF-Dateien gespeichert werden sollen '============================================================================ Path2 = Path & .DataFields("Name").Value & "\" MkDir Path2
20.11.2024, 10:37 (Dieser Beitrag wurde zuletzt bearbeitet: 20.11.2024, 10:40 von Gerhard H.)
Hallo RF,
diese Fehlermeldung hat der Autor des Makros im Error-Handler für den "Weiß auch nicht"-Fall selbst definiert.
Jetzt könnte man sich auf die Fehlersuche begeben, aber statt dessen könntest du mal die folgende Variante ausprobieren. Sie legt für jeden Datensatz ein PDF in einem gemeinsamen Ordner ab. Den Pfad dorthin musst du in der Zeile
pfad = "....."
anpassen. Den gewünschten Dateinamen musst du in der Zeile dateiname = "...." an deine Seriendruckfelder anpassen. Aktuell zieht er sich den Namen aus dem Seriendruckfeldern "VorName" und "Nachname".
Falls du für jedes PDF einen eigenen Ordner brauchst, könnte man das Makro noch abändern. Aber teste das erst mal so.
Code:
Sub JederDatensatz1Datei() '*****dieses Makro vom Seriendruck-Hauptdokument aus laufen lassen (statt Dokumente zusammenführen)*********
Dim i As Long, anzahl As Long Dim pfad As String Dim dateiname As String
pfad = "C:\1temp\srbrf\" '***Anpassen!
With ActiveDocument.MailMerge If .MainDocumentType = wdNotAMergeDocument Then MsgBox "Das Dokument ist noch nicht mit einer Seriendruckquelle verbunden." & vbLf & _ "Bitte nachholen." Exit Sub End If
'Anzahl Datensätze feststellen, Abbruch bei 0 .DataSource.ActiveRecord = wdLastDataSourceRecord anzahl = .DataSource.ActiveRecord If anzahl = 0 Then MsgBox "Es wurden keine Datensätze gefunden." Exit Sub End If
'beginnen mit dem ersten Datensatz .DataSource.ActiveRecord = 1 .Destination = wdSendToNewDocument
'macht dem Seriendruck vor, dass es bei jedem Durchgang nur 1 Datensatz gibt .DataSource.FirstRecord = i .DataSource.LastRecord = i .Execute
With ActiveDocument 'Schönheitssache: löscht den abschließenden Abschnittsumbruch .Range.Find.Execute findtext:="^b", replacewith:=""
'Speichern als .docx '.SaveAs FileName:=dateiname & ".docx", AddToRecentFiles:=False '.Close
' oder speichern als pdf ActiveDocument.ExportAsFixedFormat OutputFileName:= _ dateiname & ".pdf", ExportFormat:=wdExportFormatPDF, OpenAfterExport:=False .Close savechanges:=False End With
'Verschnaufpause für Windows If i Mod 20 = 1 Then DoEvents
Next i
.DataSource.FirstRecord = 1 End With MsgBox anzahl & " Dateien erstellt." End Sub