Hi Leute,
ich habe vor einen Serienbrief, bei dem ich nur bestimmte Datensätze ausgewählt habe, nur diese bestimmten Datensätze als Datei zu speichern. Ich habe mir dazu folgendes Programm geschrieben:
Public Sub einzelnSpeichern()
Dim PfadMahnung As String
Dim sPfad As String
Dim Datenfeld As String
sPfad = ActiveDocument.Path & "\Mahnungen\"
With ActiveDocument.MailMerge
.DataSource.ActiveRecord = 0
'Anwendung unsichtbar
Application.Visible = False
'Schleifenbeginn
Do
.Destination = wdSendToNewDocument 'Erzeugen eines neuen (separaten) Dokuments
.SuppressBlankLines = True
With .DataSource
.FirstRecord = .ActiveRecord
.LastRecord = .ActiveRecord
PfadMahnung = sPfad & Format(Date, "YYYY-MM-DD ") & "Mahnung " & .DataFields("Garagenname").Value & ".pdf" 'Dokumentennamen vergeben ==> Benennung nach ausgewähltem Datenfeld der Seriendruckquelle
End With
.Execute Pause:=False 'Ausführungspause verhindern
ActiveDocument.SaveAs FileName:=PfadMahnung, FileFormat:=wdFormatPDF 'Einzeldokument für entsprechenden Datensatz als PDF speichern
ActiveDocument.Close False 'Dok nicht schließen
If .DataSource.ActiveRecord < .DataSource.RecordCount Then 'Wenn der aktive DS kleiner als die Anzahl der DS ist
.DataSource.ActiveRecord = wdNextRecord 'dann springe zum nächsten Datensatz
Else
Exit Do 'sonst Schleifenabbruch, da alle DS durchgearbeitet wurden
End If
Loop
'Schleifenende
'Shell "Explorer.exe /select, D:\*.pdf", vbNormalFocus 'Geht nicht
End With
'Anwendung sichtbar
Application.Visible = True
End Sub
Dabei habe ich zwei Probleme. .DataSource.RecordCount gibt ja den letzten aller Datensätze an. Wenn aber der letzte Datensatz nicht ausgewählt ist, kommt er ja nie zu diesem, sodass das Programm dann mit einer Fehlermeldung abstürzt. Gibts denn einen ähnlichen Befehl wie .DataSource.RecordCount, der sich auf den letzten markierten Datensatz bezieht?
Über
Shell "Explorer.exe /select, D:\*.pdf", vbNormalFocus
würde ich gern alle PDF Dateien in dem Ordner markieren. So funktionierts nicht. Hat jemand ne Lösung?
|