Я использую приведенный ниже код для открытия файла Excel через Outlook VBA и устанавливаю фокус на передний план.
Файл excel открылся без проблем, но он установлен в фоновом режиме (за приложением Outlook).
Я пытался использовать AppActivate
, но выдает эту ошибку:
Invalid procedure call or argument
Благодарю за любые полезные комментарии и ответы.
Public Sub Open_Excel_File()
Dim xExcelFile As String
Dim xExcelApp As Excel.Application
Dim xWb As Excel.Workbook
Dim xWs As Excel.Worksheet
Dim xExcelRange As Excel.Range
xExcelFile = "xxxxx" ' Path to the Excel File
Set xExcelApp = CreateObject("Excel.Application")
Set xWb = xExcelApp.Workbooks.Open(xExcelFile)
Set xWs = xWb.Sheets(1)
xWs.Activate
Set xExcelRange = xWs.Range("A2")
xExcelRange.Activate
xExcelApp.Visible = True
AppActivate xWb.Windows(1).Caption
End Sub
Прежде всего, я бы рекомендовал изменить порядок вызова свойства Visible
и метода Activate
:
Set xExcelApp = CreateObject("Excel.Application")
Set xWb = xExcelApp.Workbooks.Open(xExcelFile)
Set xWs = xWb.Sheets(1)
xWs.Activate
Set xExcelRange = xWs.Range("A2")
xExcelApp.Visible = True
xWs.Activate
Обычно этого достаточно.
Во-вторых, вы можете использовать функции Windows API, чтобы вывести окно на передний план. Функция SetForegroundWindow переводит поток, создавший указанное окно, на передний план и активирует окно.
#If Win64 Then
Private Declare PtrSafe Function SetForegroundWindow Lib "user32" _
(ByVal hWnd As LongPtr) As LongPtr
#Else
Private Declare Function SetForegroundWindow Lib "user32" _
(ByVal hWnd As Long) As Long
#End If
Таким образом, ваш код может выглядеть так:
Public Sub Bring_to_front()
Dim setFocus As Long
xWs.Activate
setfocus = SetForegroundWindow(xExcelApp.hwnd)
End Sub
Я попробовал ваши оба варианта точно так же, как ваш ответ. Первый xWs.Activate
не имеет никакого эффекта (файл excel все еще находится за приложением Outlook). Второй вариант API работает отлично, даже без использования xWs.Activate. Код на мой вопрос находится в отдельном модуле Outlook (не Thisoutlooksession) и срабатывает через пользовательскую кнопку на ленте. спасибо за ваш полный описательный ответ ?
Где и когда в Outlook вы вызываете метод
Open_Excel_File
?