通过 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
我正在使用以下代码通过 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