Как убить закрывающие файлы Word, чтобы решить: ошибка «Excel ожидает завершения действия OLE» в VBA - PullRequest
0 голосов
/ 12 июня 2019

Я пытаюсь исправить

"Excel ожидает завершения действия ole"

ошибка, но способ, который я нашел, не работает.

Я получаю эту ошибку только тогда, когда использую дополнительные приложения Microsoft Office (кроме Excel, в котором выполняется код) в качестве объектов, и в одном из них есть ошибка - Excel, выполняющий код, не знает, что произошла ошибка в одном из других приложений, так что он ждет, ждет и ждет, и в конце концов вы получаете сообщение «Ожидание другого приложения для завершения действия OLE» ...

Итак, чтобы исправить эту проблему, я попытался:

• Откройте лист Excel.

• Перейти в меню «Файл».

• Нажмите Опции.

• Перейдите на вкладку «Дополнительно».

• Прокрутите вниз до области Общие и установите флажок «Игнорировать другие приложения, использующие динамический обмен данными (DDE)» *

• Перезапустите Excel.

Но, таким образом, я попадаю с другой ошибкой, когда я пытаюсь открыть свой файл Excel:

«При отправке команд в программу выдается ошибка»

Я нашел способ исправить эту новую ошибку - снять флажок «Игнорировать другие приложения, использующие динамический обмен данными (DDE)»

Но если я это сделаю, я получу ошибку OLE.

Я тоже пробовал: enter image description here Но это ничего не делает и пускает с ошибкой:

«При отправке команд в программу выдается ошибка»

Так есть ли способ исправить ошибку OLE, не создавая новую.

Я знаю, что ошибка связана с файлом .Docx , поэтому я также попытался обработать эту ошибку, вызвав макрос, который уничтожает процесс Word:

enter image description here

Вот код:

 Sub Kill_Word()

 Dim sKillWord As String

 sKillWord = "TASKKILL /F /IM Winword.exe"

Shell sKillWord, vbHide

End Sub

Но это не работает как исключение, это убивает текстовый процесс, но когда я пытаюсь открыть файл .docx , он говорит, что «Lettre Aux été.docx» заблокирован для изменения пользователем.

Вот исходный код, где файл открыт:

Sub test()
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

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
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

' Initialise component
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"

' Get Path
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

'Open template word
Set objMMMD = objWord.Documents.Open(cDir + WTempName)
objMMMD.Activate

'Merge data
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

' Save New File
objWord.ActiveDocument.SaveAs cDir + NewFileName

' Close File
objMMMD.Close SaveChanges:=wdDoNotSaveChanges
Set objMMMD = Nothing

' Close created document
If bCreatedWordInstance Then
objWord.Quit
End If

0:
Set objWord = Nothing
Cells(r, 24).Value = Now
nextrow:

Next r


End Sub

Я исключаю, что этот файл будет закрыт, когда я уничтожу WORD-процесс. Я что-то здесь не так делаю?

Привет

...