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

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

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

Я верю, что смогу использовать SendMessage или же PostMessage API для этого, но я не уверен, как это сделать. Я не уверен, какой дескриптор окна использовать (это главное приложение 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

0 ответов

Другие вопросы по тегам