Почему Excel.Application.InputBox оставляет скрытый процесс Excel? - PullRequest
1 голос
/ 03 июля 2019

Я работаю над базой данных Access и пишу для нее макрос. Я пытаюсь получить ссылки на ячейки, используя Excel.InputBox.Application, но иногда, когда я выполняю следующий код, он оставляет скрытый запущенный процесс Excel. Как я могу избежать этого? У кого-нибудь есть идея? Заранее спасибо.

Я уже пытался написать XLApp.Visible = False перед XLApp.Quit.

Function TakesCellReference(Nom As String)
    Dim XLApp As Object
    Dim xlBook As Excel.Workbook
    Set XLApp = CreateObject("Excel.Application")
    Set xlBook = XLApp.Workbooks.Open(FileName:=Nom, UpdateLinks:=3, ReadOnly:=False)
    XLApp.Visible = True
    Set cellule = XLApp.InputBox(Prompt:="Sélectionnez une cellule de la feuille et cliquez sur Ok pour continuer", Type:=8)
    TakesCellReference = cellule.Address
    Set cellule = Nothing
    xlBook.Close False
    XLApp.Quit
    Set xlBook = Nothing
    Set XLApp = Nothing
End Function

Ответы [ 2 ]

0 голосов
/ 04 июля 2019

В конце концов я нашел причину, почему у меня был этот скрытый процесс Excel. Я думаю, что это было создано надстройкой: «eformity Document Builder надстройка Microsoft Office», которую я отключил вручную. Мне повезло найти еще один пост об этом сегодня утром. Я выполнил свой код около 20 раз, и у меня больше нет скрытого процесса Excel.

В случае, если это может кому-то помочь, вот как я отключил надстройки. Я вошел в Excel (не в Access), затем в файле «Параметры», «Надстройки» и нажал «Перейти» после выбора надстроек COM. И я снял флажок «Надстройка eformity Document Builder для Microsoft Office». Я думаю, что мы можем сделать это с кодом VBA из доступа:

Sub UntickAddIns()
For i = 1 To Excel.Application.COMAddIns.Count
If Excel.Application.COMAddIns.Item(i).Description = "eformity Document Builder Microsoft Office Add-in" Then
Excel.Application.COMAddIns.Item(i).Connect = False
End If
Next
End Sub

Я попробовал это, и единственная проблема, с которой я столкнулся, заключалась в том, что у меня не было разрешения изменить Excel.Application.COMAddIns.Item(i).Connect на False. Я пока не знаю решения, но не думаю, что это сложно.

0 голосов
/ 04 июля 2019

Вы должны объявить cellule внутри своей функции.

Убедитесь, что Option Explicit вверху каждого модуля.
Он обеспечивает декларацию переменных и выдает необъявленные или неправильно написанные переменные / константы во время компиляции.
Чтобы это автоматически выполнялось в новых модулях, установите параметр Требуется объявление переменных в редакторе VBA.

Процесс Excel , вероятно, продолжает работать из-за неправильного порядка вызовов очистки. При выходе из Excel ссылка на xlBook все еще активна и не позволяет завершить процесс.

xlBook.Close False
XLApp.Quit
Set xlBook = Nothing

должно быть:

xlBook.Close False
Set xlBook = Nothing
XLApp.Quit
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...