通过 Outlook VBA 打开 Excel 文件并将其焦点设置在前面(不工作)

Open Excel file through Outlook VBA and set focus of it to be in front (not working)

我正在使用以下代码通过 Outlook VBA 打开 Excel 文件并将其焦点设置在前面。
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 函数将window 置于前台。 SetForegroundWindow 函数将创建指定 window 的线程置于前台并激活 window.

#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