Включите надстройку 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