Откройте файл Excel через Outlook VBA и установите фокус на передний план (не работает)

Я использую приведенный ниже код для открытия файла 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

Где и когда в Outlook вы вызываете метод Open_Excel_File?

Eugene Astafiev 06.04.2022 17:19
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
1
1
47
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Прежде всего, я бы рекомендовал изменить порядок вызова свойства 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) и срабатывает через пользовательскую кнопку на ленте. спасибо за ваш полный описательный ответ ?

Waleed 07.04.2022 13:57

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