Как можно пропустить ожидание действия OLE SAP - PullRequest
0 голосов
/ 02 мая 2018

Я довольно новичок в сценариях SAP, но уже имею некоторый опыт работы с VBA. У меня есть следующая проблема, пытаясь автоматизировать процесс в SAP для моей текущей позиции. Поэтому я записываю серию процедур, вставляю код в лист макроса и заставляю Excell читать код VBS с помощью следующих команд:

Dim SapGuiAuto As Object
Dim Application As Object
Dim Connection As Object
Dim Session As Object

Set SapGuiAuto = GetObject("SAPGUI")
Set Application = SapGuiAuto.GetScriptingEngine
Set Connection = Application.Children(0)
Set Session = Connection.Children(0)

Так что все в порядке, но для одной из частей SAP выполняет много вычислений, которые занимают несколько минут, а в середине этого процесса Excel создает сообщение: enter image description here

Так что мне нужно нажать OK, чтобы продолжить, что раздражает, потому что тогда он всплывает без остановок, и мне нужно сделать это 10-15 раз, чтобы достичь цели, что устраняет точку автоматизации , Делая это без макроса, SAP не дает мне никакой ошибки. Я пытался отключить его с помощью

Application.DisplayAlerts = False, но это не сработает, вместо этого дает мне: enter image description here

Я искал в сети и на сайте, но практически не было никакой полезной информации, может быть, потому что мой вопрос был конкретным. Некоторая дополнительная информация: 1. Мой ноутбук с работы, и я не могу устанавливать какое-либо дополнительное программное обеспечение или обновления на него без разрешения, поэтому, пожалуйста, дайте мне альтернативные решения, если вы об этом думали.

  1. Я попытался проверить опцию Excel для DDE, но выдает ошибку только при попытке запустить скрипт. enter image description here

Моя версия Excel 2013 года. Итак, может ли кто-нибудь помочь мне достичь одного из трех решений, о которых я могу подумать: 1. Отключить всплывающее окно для OLE

  1. Сделайте так, чтобы он автоматически нажимал OK каждый раз, когда он появляется

  2. заставляет Excel зависать и ждать, пока SAP сделает свое дело? (не знаю, имеет ли это смысл ..) - Кстати, пробовал с Application.Wait, но безуспешно

Спасибо всем заранее, и я надеюсь, что кто-то может помочь мне здесь! С Уважением, Михаил

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Если вы используете 64-разрядную версию Microsoft Office, вам следует немного изменить код, предложенный M_Delineshev, в соответствии с Заявлением об объявлении . Попробуйте использовать эту версию:

Private Declare PtrSafe Function _
    CoRegisterMessageFilter Lib "OLE32.DLL" _
    (ByVal lFilterIn As Long, _
    ByRef lPreviousFilter) As LongPtr


Sub KillMessageFilter() '''Original script Rob Bovey

'''https://groups.google.com/forum/?hl=en#!msg/microsoft.public.excel.programming/ct8NRT-o7rs/jawi42S8Ci0J '''http://www.appspro.com/

Dim lMsgFilter As Long

''' Remove the message filter before calling Reflections. CoRegisterMessageFilter 0&, lMsgFilter

''' Call your code here....

''' Restore the message filter after calling Reflections. CoRegisterMessageFilter lMsgFilter, lMsgFilter

End Sub
0 голосов
/ 10 мая 2018

Storax выше фактически дал ссылку на другую тему с решением вопроса.

Код здесь:

Закрытое объявление функции _ CoRegisterMessageFilter Lib "OLE32.DLL" _ (ByVal lFilterIn As Long, _ ByRef lPreviousFilter) As Long

Sub KillMessageFilter ()
'' 'Оригинальный сценарий Роб Бови

'''https://groups.google.com/forum/?hl=en#!msg/microsoft.public.excel.programming/ct8NRT-o7rs/jawi42S8Ci0J
'''http://www.appspro.com/

Dim lMsgFilter As Long

''' Remove the message filter before calling Reflections.
CoRegisterMessageFilter 0&, lMsgFilter

''' Call your code here....

''' Restore the message filter after calling Reflections.
CoRegisterMessageFilter lMsgFilter, lMsgFilter

End Sub

...