Включите надстройку Excel COM с помощью VBA, не используя .Connect, но вместо этого используя SendMessage или PostMessage - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть следующий код, который отлично работает, но только если пользователь просматривает экран.Мне нужно найти решение, которое достигает того же результата, но работает, когда экран заблокирован.Я знаю, SendKeys не работает, когда экран заблокирован.

Я не могу использовать vntAddIn.Connect = True, потому что это приводит к ошибке.Надстройку COM можно успешно включить вручную с помощью диалогового окна, но не через свойство .Connect.

Я полагаю, что для этого можно использовать API SendMessage или PostMessage.но я не уверен, как это сделать.Я не уверен, какой дескриптор окна использовать (это главное приложение Excel, например?), И я не знаю, как отправлять комбинации Alt?Буду признателен за любую помощь.

Обратите внимание, я знаю, что использование PAGE DOWN , чтобы добраться до нижней части списка, не является надежным, поскольку может произойти сбой, если надстройка Comне последний пункт в списке.У меня есть отдельное решение, чтобы определить, где в списке появляется надстройка, и можно заменить PAGE DOWN на определенное количество стрелок DOWN , чтобы исправить это, но перед реализацией,Я хочу убедиться, что это вообще возможно, поскольку без возможности сделать это, когда экран заблокирован, нет никакого смысла.

Public Sub EnableComAddIn()
  Dim blnAddInIsConnected  As Boolean
  Dim vntAddIn As Variant
  Const CstrComAddinDescription As String = "Oracle Smart View for Office"

  blnAddInIsConnected = False
  For Each vntAddIn In ThisWorkbook.Application.COMAddIns
    If vntAddIn.Description = CstrComAddinDescription Then
      blnAddInIsConnected = vntAddIn.Connect
      Exit For
    End If
  Next

  If Not blnAddInIsConnected Then

    'Make sure Excel application window is active, and a cell is selected.
    ThisWorkbook.Activate
    ThisWorkbook.Worksheets(1).Select
    ThisWorkbook.Worksheets(1).Cells(1, 1).Select

    'Make sure Developer tab is shown on ribbon or Alt-L will not work.
    ThisWorkbook.Application.ShowDevTools = True

    'Use SendKeys to use ALT-L, J to open Com Add-ins window, page down twice to select last entry on list, press space to check the box, press Enter to save.
    DoEvents
    ThisWorkbook.Application.Wait Now() + TimeSerial(0, 0, 1)
    DoEvents
    ThisWorkbook.Application.SendKeys "%LJ{PGDN}{PGDN} {ENTER}", True
    DoEvents
    ThisWorkbook.Application.Wait Now() + TimeSerial(0, 0, 1)
    DoEvents

  End If
End Sub
...