Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1936to1940
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Der Remote Server ist nicht verfügbar...

Der Remote Server ist nicht verfügbar...
28.07.2023 10:26:48
Chris
Hallo Forum,

mit unten stehendem Makro erstelle ich aus Excel heraus Serienbriefe. Hierbei wird für jeden Datensatz eine eigene PDF-Datei erzeugt. Dies funktioniert beim erstem Mal problemlos, beim zweiten Mal erhalte ich die im Betreff genannte Fehlermeldung (Der Remote Server ist nicht verfügbar.), obwohl die ObjektVariablen am Ende zurückgesetzt werden.

Hat jmd. eine Idee, wo der Fehler liegt?


Sub SB

Dim winword, WinDoc As Word.Document, docSerienbrief As Word.Document
Dim sFile As String, sBrief As String

Dim stratenquelle As String
Dim strWordvorlage As String
Dim PDFpath As String

Application.DisplayAlerts = False

strDatenQuelle = Sheets("ADMIN").Range("C2").Text
strWordvorlage = Sheets("ADMIN").Range("C3").Value
PDFpath = Sheets("ADMIN").Range("C1").Text

sFile = strWordvorlage
Set winword = CreateObject("Word.Application")

With winword
.Visible = False
'Vorlagedatei öffnen
Set WinDoc = .Documents.Open(sFile)
With WinDoc
With .MailMerge

'Datenquelle öffnen
.OpenDataSource Name:=strDatenQuelle, _
Connection:="Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Data Source=" & strDatenQuelle & ";" _
& "Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";" _
& "Jet OLEDB:Engine ", _
SQLStatement:="SELECT * FROM `RDSL$`"

'Serienbrief mit allen Daten in neuem Dokument erstellen

With ActiveDocument.MailMerge
.DataSource.ActiveRecord = 1
Do
.Destination = wdSendToNewDocument
.SuppressBlankLines = True

With .DataSource
.FirstRecord = .ActiveRecord
.LastRecord = .ActiveRecord
sBrief = PDFpath & "B1-" & UCase(.DataFields("Nachname").Value) & ", " & .DataFields("Vorname").Value & ".pdf"
End With

.Execute Pause:=False

If .DataSource.DataFields("Nachname").Value & "," & .DataSource.DataFields("Vorname").Value > "" Then
ActiveDocument.SaveAs Filename:=sBrief, FileFormat:=wdFormatPDF
End If
ActiveDocument.Close False

If .DataSource.ActiveRecord .DataSource.RecordCount Then
.DataSource.ActiveRecord = wdNextRecord
Else
Exit Do
End If

If .DataSource.ActiveRecord Mod 5 = 0 Then
DoEvents
End If

Loop
End With

End With
End With
End With

winword.Quit savechanges:=False
Set WinDoc = Nothing
Set docSerienbrief = Nothing
Set winword = Nothing

Application.DisplayAlerts = True
End Sub

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Der Remote Server ist nicht verfügbar...
03.08.2023 07:28:21
Oberschlumpf
Hi,

und du kommst weiterhin nich von allein auf die Idee, von allem (Excel, Word,???) was erforderlich ist, mal entsprechende Bsp-Dateien mit Bsp-Daten zu zeigen - mit denen man a) testen, und b) wegen a) viel schneller zu ner Lösung kommen kann?
Na, dann weiter viel Spaß beim Raten.

Ciao
Thorsten
Der Remote Server ist nicht verfügbar...
03.08.2023 10:56:21
Chris
Hi,

hier Beispieldateien. Bestimmt helfen diese. Enthalten sind:

1x Word-Datei: Die Serienbriefvorlage mit zwei Feldern, Vor- und Nachname. Aus dieser Datei sollen später für jeden Datensatz jeweils eine eigene PDF-Datei erstellt werden.
1x Datenquelle (Excel) für den Serienbrief mit zwei Beispielnamen.
1x Das Makro (Excel). Als Pfad habe ich den Desktop-Pfad genommen. Bitte anpassen.

Das enthaltende Makro erstellt die Serienbriefe, welche jedoch nicht als PDF gespeichert werden.

Hier der Link:

https://www.herber.de/bbs/user/162158.zip

Danke für die Unterstützung.
Chris

Anzeige
AW: Der Remote Server ist nicht verfügbar...
30.07.2023 08:21:48
Ulf
Hi,
das wird immer zu Fehlern führen, da du die Synchronizität von Druck+Code nicht garantieren kannst.
Meine langjährig erprobte Vorgehensweise: Vorbereiten der Dateinamen mit DB, Druck in ein Dokument, abschnittweises Drucken.
Die Verweise kannst du durch Get - oder CreateObject ersetzen.


Option Explicit

Public arrNamen() As String
Public PDFpath As String

'Verweise
'DAO 3.6
'Word 1x
Public Function leseDB() As Boolean
On Local Error GoTo leseDBERR
Dim bErgebnis As Boolean
Dim strDatenquelle As String
Dim myDB As Database, myREC As Recordset
Dim lngAnzahl As Long
Dim lngZähler As Long
PDFpath = Sheets("ADMIN").Range("C1").Text
strDatenquelle = Sheets("ADMIN").Range("C2").Text
Dim strConnection As String
strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Data Source=" & strDatenquelle & ";" _
& "Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";" _
& "Jet OLEDB:Engine"
Set myDB = DAO.OpenDatabase(strDatenquelle)
'!!! SELECT anpasssen !!!
Set myREC = myDB.OpenRecordset("SELECT * FROM SBTabelle", dbOpenSnapshot)
With myREC
.MoveLast
lngAnzahl = .RecordCount
ReDim arrNamen(2, lngAnzahl - 1)
.MoveFirst
For lngZähler = 0 To lngAnzahl - 1
arrNamen(0, lngZähler) = .Fields("Vorname").Value
arrNamen(1, lngZähler) = .Fields("Nachname").Value
arrNamen(2, lngZähler) = PDFpath & "B1-" & UCase(.Fields("Nachname").Value) & ", " & .Fields("Vorname").Value & ".pdf"
.MoveNext
'evtl DoEvents
Next lngZähler
.Close
End With
Set myREC = Nothing
myDB.Close
bErgebnis = True
leseDBOUT:
leseDB = bErgebnis
Set myDB = Nothing
Exit Function
leseDBERR:
bErgebnis = False
Resume leseDBOUT
End Function

Public Sub ausDrucken()
On Local Error GoTo ausDruckenERR
Application.DisplayAlerts = False
Dim objWinword As Word.Application, WinDoc As Word.Document
Dim strDatenquelle As String
Dim strWordvorlage As String
Dim newDoc As Word.Document
Dim strBrief As String
Dim lngAbschntitt As Long
Dim lngZähler As Long
If Not leseDB() Then
'Msgbox err .......
Exit Sub
End If
strDatenquelle = Sheets("ADMIN").Range("C2").Text
strWordvorlage = Sheets("ADMIN").Range("C3").Value
PDFpath = Sheets("ADMIN").Range("C1").Text
Set objWinword = New Word.Application
With objWinword
.Visible = True
Set WinDoc = .Documents.Open(strWordvorlage)
WinDoc.MailMerge.OpenDataSource Name:= _
strDatenquelle, _
ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _
WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _
Format:=wdOpenFormatAuto, Connection:= _
"Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=" & strDatenquelle & ";Mode=Read;Extended Properties="""";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Engine Type=5;Jet OLEDB:Database" _
, SQLStatement:="SELECT * FROM `SBTabelle`", SQLStatement1:="", SubType:= _
wdMergeSubTypeAccess
With WinDoc.MailMerge
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
.Execute Pause:=False
End With
Set newDoc = objWinword.ActiveDocument
End With
For lngZähler = 0 To UBound(arrNamen, 2) 'newDoc.Sections.Count - 2
strBrief = arrNamen(2, lngZähler)
newDoc.PrintOut OutputFilename:=strBrief, Range:=wdPrintRangeOfPages, Item:= _
wdPrintDocumentWithMarkup, Copies:=1, Pages:="s" & lngZähler + 1, PageType:= _
wdPrintAllPages, Collate:=True, Background:=True, PrintToFile:=True, _
PrintZoomColumn:=0, PrintZoomRow:=0, PrintZoomPaperWidth:=0, _
PrintZoomPaperHeight:=0
Next lngZähler
newDoc.Close SaveChanges:=False
WinDoc.Close SaveChanges:=False
objWinword.Quit
ausDruckenOUT:
Application.DisplayAlerts = True
Set newDoc = Nothing
Set WinDoc = Nothing
Set objWinword = Nothing
Exit Sub
ausDruckenERR:
'MsgBox err .....
Resume ausDruckenOUT
End Sub
'evtl Kontrolle:?
' Dim scBereich As Word.Section
' For Each scBereich In newDoc.Sections
' 'Test auf Namen im x.-ten (bsp 2) Satz
'' If scBereich.Range.Characters.Count > 1 Then
'' Debug.Print Replace(Replace(scBereich.Range.Sentences(2), Chr(10), ""), Chr(13), "")
'' End If
' Next

hth
Ulf
Anzeige
AW: Der Remote Server ist nicht verfügbar...
02.08.2023 08:02:41
Chris
Hallo Ulf,

ich habe das wieder geändert, stehe nun aber vor einem neuen Problem.

Die WordVorlage für den Serienbrief wird geöffnet und es erscheint ein Fenster "Tabelle wählen".
Dort ist als Pfad der Arbeitsmappe eine Datei angegeben, die nicht existiert und nie existiert hat.
Die Pfadangaben im Blatt "ADMIN" sind jedoch definitiv korrekt.

Diese Art der Meldung ist bisher nicht aufgetreten.

Hast du eine Idee woran das liegen kann?

Gruß
Chris
AW: Der Remote Server ist nicht verfügbar...
01.08.2023 10:52:59
Chris
Hallo Ulf,

danke für die Antwort. Hab das Makro übernommen. Die Word-Dokumente werden angezeigt, aber nicht gedruckt. Der Druck soll als PDF erfolgen (jede Seite einzeln) und danach sollen alle Dokumente wieder geschlossen werden

Hab folgende geändert:

newDoc.PrintOut OutputFilename:=strBrief, Range:=wdPrintRangeOfPages, Item:= _

wdPrintDocumentWithMarkup, Copies:=1, Pages:="s" & lngZähler + 1, PageType:= _
wdPrintAllPages, Collate:=True, Background:=True, PrintToFile:=True, _
PrintZoomColumn:=0, PrintZoomRow:=0, PrintZoomPaperWidth:=0, _
PrintZoomPaperHeight:=0


newDoc.SaveAs Filename:=strBrief, FileFormat:=wdFormatPDF


Zudem erhalte ich die Fehlermeldung "außerhalb des gültigen Bereichs" bei

 For lngZähler = 0 To UBound(arrNamen, 3) 'newDoc.Sections.Count - 2



Meine VBA Kenntnisse reichen nicht aus, um den Fehler zu finden. Hast du eine Idee?

Gruß
Chris
Anzeige
AW: Der Remote Server ist nicht verfügbar...
01.08.2023 11:26:53
Ulf
Hi Chris
mach aus
For lngZähler = 0 To UBound(arrNamen, 3)

wieder
For lngZähler = 0 To UBound(arrNamen, 2)

denn dass Array hat 3 Dimensioen 0 Vor 1 Nach 2 Vor-und Nachname
das erklärt dann auch, dass nicht gedruckt wird, denn diese Routine erstellt PDF im Ausgabeordner, ohne sie anzuzeigen (sofern das nicht in Word-Optionen oder Adobe geändert ist.
Versuch die Änderung oben und melde dich ggf.
hth
Ulf
AW: Der Remote Server ist nicht verfügbar...
02.08.2023 18:06:11
Chris
Hallo Ulf,

ich bin nun einen Schritt weiter...

Es fehler bei der Select-Anweisung ein "$"-Zeichen für den String des Tabellenblattes. Wieso ist dieses Dollarzeichen nötig?

Die Schleife für das Array habe ich wieder auf "2" geändert.

Was nun passiert ist folgendes:

1) Word öffnet die Vorlage für den Serienbrief und zeigt mir diese mit allen Seriendruckfeldern an
2) Die Serienbriefe werden alle als eine zweite Datei geöffnet und korrekt ausgefüllt.

Ein Papierdruck bzw. eine Umwandlung ins PDF-Format passiert nicht.

Ich habe das gesamte Makro inkl. Public Function in ein einziges Modul kopiert.
Soweit ich das sagen kann, wird die Function ignoriert, denn das Makro "ausDrucken" läuft nur dann, wenn ich den Teil "if not DB....Exit sub" auskommentiere.

Irgendwo ist also noch ein Fehler bzw. eine Falsche Umsetzung. Vielleicht weiß du - oder jmd anders wo genau

Freue mich auf Rückmeldung.

Gruß
Chris
Anzeige
AW: Der Remote Server ist nicht verfügbar...
02.08.2023 14:14:42
Chris
noch offen...

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige