Возьмите под контроль приложение Windows с VBA (DDE / OLE / ODBC / ADO) - PullRequest
0 голосов
/ 26 апреля 2020

Доброе утро всем. Это тема, которую я долго пытался откопать, но о которой очень мало документировано в Интернете: как управлять сторонним приложением через VBA?

Цель - создать ссылку (мост) инструмента Office (Excel / Access) для выполнения манипуляций в приложении Windows, например, вставка буфера обмена в краску или в блокнот. Для эффективности я не хочу использовать команду sendkeys, которой мы не можем доверять.

Насколько мне известно, есть метод DDE, который бы позволял это делать, но он кажется устаревшим. Вы можете подтвердить?

Вот код, использующий DDE для подключения к Word и отправки ему команды Печать ...

 channelNumber = Application.DDEInitiate( _
    app:="WinWord", _
    topic:="C:\FORMLETR.DOC")
Application.DDEExecute channelNumber, "[FILEPRINT]"
Application.DDETerminate channelNumber

...

Попытка чтобы изменить его, чтобы вставить наш буфер обмена на краску, вот код, который не работает: ...

channelNumber = Application.DDEInitiate( _
    app:="mspaint", _
    topic:="C:\Test.png")
Application.DDEExecute channelNumber, "[PASTE]"
Application.DDETerminate channelNumber
...

Результат: у меня есть ошибка "Ошибка времени выполнения '13': Введите несоответствие" в Первая строка, хотя файл открывается.

Давайте попробуем с помощью блокнота:

...

Sub DDEtoBlocNotes()
Dim Datarange As Range
chan = Application.DDEInitiate(app:="NOTEPAD", topic:="C:\Users\User1\Documents\Access\Test.txt")
Set Datarange = ThisWorkbook.Worksheets("Sheet1").Range("A1")
Datarange.Copy
Application.DDEExecute chan, "[EDITIONCOLLER]"
Application.DDETerminate chan
End Sub

...

Результат: та же ошибка как и раньше, несмотря на открытие документа. «Ошибка времени выполнения« 13 »: несоответствие типов»

Можете ли вы помочь мне решить эту проблему, пожалуйста? У вас есть документация по атрибутам команд DDE? Знаете ли вы о другом способе подключения к стороннему приложению для отправки ему команд? (OLE / ODB C / ADO)?

Заранее благодарю за ответы.

...