Я создал макрос слова, теперь большая часть его работает как надо. Единственная оставшаяся у меня проблема заключается в том, что он читает пустые записи из Excel, а затем не может использовать их в макросе (таким образом, попадая в бесконечный l oop). Может ли кто-нибудь помочь мне перехватить и удалить пустые записи в начале макроса или хотя бы скрыть их, чтобы они не учитывались? Заранее спасибо.
Это мой сокращенный код:
Sub SerienbriefOneDoc()
'
' SerienbriefOneDoc Makro
'
'
Dim Dateiname As String
Dim LetzterRec As Integer
Dim countLoop As Integer
Application.ScreenUpdating = True
Application.Visible = False
countLoop = 1
'userform creation and opening
SetName:
'code ... creation ...
With ActiveDocument.MailMerge
'################################################ --> Progressbar
Dim RecordCount As Integer
Dim i As Integer, percent As Integer, ActiveDoc As Integer,
ActivePercent As Integer
Dim widthUpdate As Double, j As Double
UserForm2.Label1.BackColor = &HFF00&
percent = 100
UserForm2.Label1.Width = 0
RecordCount = .DataSource.RecordCount
ActiveDoc = .DataSource.ActiveRecord
i = 1
Do
'################################################ --> CheckBox check
'############### --> declaration Arrays & Var for check
Dim TempName As String
Dim AddName As String
Dim f As Integer
Dim k As Integer
Dim q As Integer
Dim arrayCount(128) As Variant
Dim arrayBool(128) As Boolean
AddName = ""
For q = 1 To ColumnCount
arrayCount(q) = 0
Next q
'############### --> Safe Chheckbox-Content in Array
'############### --> Arraysortierung und Auf AddName Speichern
'############### --> Name - Text / Date
'############### --> check if Addname has content
'Path = "C:\Users\<Username>\Documents"
Path = "C:\Users\MattiaSchule\Documents"
AddName = "testDoc"
If AddName = "" Then
Unload UserForm3
UserForm3.Hide
If countLoop >= 3 Then
MsgBox "Überprüfe ob alle werte in der Datenquelle stimmen, falls
eine Zeile leer ist, die aber trotzdem eingebunden wird lösche diese."
Exit Sub
End If
countLoop = countLoop + 1
GoTo SetName
End If
If Right(AddName, 1) = "_" Then
AddName = Left(AddName, Len(AddName) - 1)
End If
'Prueft ob es mehrere Seiten fuer den Serienbrief gibt
If .DataSource.ActiveRecord > 0 Then
'zaehlt die Anzahl Datensaetz in der Spalte "Name"
If RecordCount <> "0" Then
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
'prueft ob es das Verzeichnis gibt.
If Dir(Path, vbDirectory) <> "" Then
Else
'Fehlermeldung falls das Verzeichniss nicht existiert
MsgBox "Verzeichnis existiert nicht"
End If
With .DataSource
.FirstRecord = .ActiveRecord
.LastRecord = .ActiveRecord
'erstellt eine Variable mit dem Pfad und dem Namen
dname = Path & "\" & AddName & ".pdf"
End With
.Execute Pause:=False
'benennt die Datei und aendert das Dateiformat auf PDF
ActiveDocument.SaveAs2 FileName:=dname,
FileFormat:=wdFormatPDF
'schliesst das Fenster
ActiveDocument.Close False
End If
End If
'prueft ob es noch eine Seite gibt im Serienbrief
If .DataSource.ActiveRecord < LetzterRec Then
'nimmt die naechste Seite des Serienbriefes
.DataSource.ActiveRecord = wdNextRecord
Else
'wenn es keine Seite im Serienbrief mehr gibt wird die Schleife
beendet
Exit Do
End If
i = i + 1
j = i * percent / RecordCount
widthUpdate = j * 2
ActivePercent = j
UserForm2.Label1.Width = widthUpdate
UserForm2.Label2.Caption = ActivePercent & "% Complete"
UserForm2.Show (0)
Load UserForm2
DoEvents
UserForm2.Repaint
Loop
Unload UserForm2
End With
Application.Visible = True
Application.StatusBar = False
Application.DisplayStatusBar = sBar
Application.ScreenUpdating = True
End Sub
Это изображение для иллюстрации пустых записей