Я не понимаю, почему objWord
остается равным ничего , даже если я Set objWord = CreateObject(« Word.Application »)
Ниже полный код:
Sub Publipostage()
Dim bCreatedWordInstance As Boolean
Dim objWord As Word.Application
Dim objMMMD As Word.Document
Dim EmployeeName As String
Dim cDir As String
Dim r As Long
Dim ThisFileName As String
Dim Direction As String
Dim Prenom As String
Dim Compteur As Integer
Compteur = 0
LastRow = Sheets("1 Aux été").Range("E" & Rows.Count).End(xlUp).Row
r = 2
For r = 2 To LastRow
If Cells(r, 24).Value <> "X" Then GoTo nextrow
Compteur = Compteur + 1
EmployeeName = Sheets("1 Aux été").Cells(r, 5).Value
Prenom = Sheets("1 Aux été").Cells(r, 6).Value
Direction = Sheets("1 Aux été").Cells(r, 1).Value
' Parametrage fichiers
Const WTempName = "Lettre Aux été.docx" 'This is the 07/10 Word Templates name, Change as req'd
Dim NewFileName As String
NewFileName = Direction & " - " & EmployeeName & " " & Prenom & ".docx" 'This is the New 07/10 Word Documents File Name, Change as req'd"
' Récuperation des Directions
cDir = ActiveWorkbook.Path + "\" 'A modifier si besoin
ThisFileName = ThisWorkbook.Name
On Error Resume Next
' Creation de l'instance word
bCreatedWordInstance = False
Set objWord = GetObject(, "Word.Application")
If objWord Is Nothing Then
Err.Clear
Set objWord = CreateObject("Word.Application")
bCreatedWordInstance = True
End If
If objWord Is Nothing Then
MsgBox "Could not start Word"
Err.Clear
On Error GoTo 0
Exit Sub
End If
' Laisser Word gerer les erreurs
On Error GoTo 0
' Mettre Oui si vous souhaitez voir le Word durant ça creation
objWord.Visible = False
'Ouvre le template word
Set objMMMD = objWord.Documents.Open(cDir + WTempName)
objMMMD.Activate
'On join les bonnes datas aux bon fichiers
On Error GoTo FermerWordProcess
With objMMMD
.MailMerge.OpenDataSource Name:=cDir + ThisFileName, sqlstatement:="SELECT * FROM `1 Aux été$`" ' Set this as required
With objMMMD.MailMerge 'Avec le document Actif :
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
With .DataSource
.FirstRecord = r - 1
.LastRecord = r - 1
.ActiveRecord = r - 1
End With
.Execute Pause:=False
End With
End With
' On enregistre le nouveau fichier
objWord.ActiveDocument.SaveAs cDir + NewFileName
' On ferme le doc
objMMMD.Close SaveChanges:=wdDoNotSaveChanges
Set objMMMD = Nothing
' On ferme le nouveau document
If bCreatedWordInstance Then
objWord.Quit
End If
0:
Set objWord = Nothing
Cells(r, 24).Value = Now
nextrow:
Next r
FermerWordProcess:
Call Kill_Word
If Compteur = 0 Then
MsgBox "Avez vous bien selectionné des lignes a publiposter ?", vbCritical
End
End If
End Sub
При удалении On Error Resume Next
я получил код ошибки 429: компонент ActiveX не может создать объект
Для этого я установил: Set objWord = New Word.Application
Но теперь ошибки не отображаются, но известно падение слова.
Когда я использую средства отладки, я вижу, что objMMMD
= Удаленный сервер не существует или недоступен .
Я предполагаю, что ошибка здесь objMMMD
:
.MailMerge.OpenDataSource Name:=cDir + ThisFileName, sqlstatement:="SELECT * FROM `1 Aux été$`" ' Set this as required
Эта строка генерирует код ошибки: Автоматизация ошибок + удаленная процедура вызова Echec и 462 Удаленный сервер не существует или недоступен.
Примечание : Даже если я попытаюсь вручную связать Excel с .docx, сбой Word ..
Как я могу решить это?