Я пытаюсь исправить
"Excel ожидает завершения действия ole"
ошибка, но способ, который я нашел, не работает.
Я получаю эту ошибку только тогда, когда использую дополнительные приложения Microsoft Office (кроме Excel, в котором выполняется код) в качестве объектов, и в одном из них есть ошибка - Excel, выполняющий код, не знает, что произошла ошибка в одном из других приложений, так что он ждет, ждет и ждет, и в конце концов вы получаете сообщение «Ожидание другого приложения для завершения действия OLE» ...
Итак, чтобы исправить эту проблему, я попытался:
• Откройте лист Excel.
• Перейти в меню «Файл».
• Нажмите Опции.
• Перейдите на вкладку «Дополнительно».
• Прокрутите вниз до области Общие и установите флажок «Игнорировать другие приложения, использующие динамический обмен данными (DDE)» *
• Перезапустите Excel.
Но, таким образом, я попадаю с другой ошибкой, когда я пытаюсь открыть свой файл Excel:
«При отправке команд в программу выдается ошибка»
Я нашел способ исправить эту новую ошибку - снять флажок «Игнорировать другие приложения, использующие динамический обмен данными (DDE)»
Но если я это сделаю, я получу ошибку OLE.
Я тоже пробовал:
Но это ничего не делает и пускает с ошибкой:
«При отправке команд в программу выдается ошибка»
Так есть ли способ исправить ошибку OLE, не создавая новую.
Я знаю, что ошибка связана с файлом .Docx , поэтому я также попытался обработать эту ошибку, вызвав макрос, который уничтожает процесс Word:
Вот код:
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-процесс. Я что-то здесь не так делаю?
Привет