从Access中将Excel窗口引入前台

我试图从Access中打开一个Excel文件,但它确实工作,但是Excel窗口在后台popup(在Access窗口后面),这不是非常用户友好的。 这是我使用的代码:

Private Function OpenExcelAttachment() Dim MyXL As Object Set MyXL = CreateObject("Excel.Application") With MyXL Dim FullPath As String, Name As String Name = "\ExcelFile.xlsx" FullPath = CurrentProject.Path & Name .Workbooks.Open FullPath .Visible = True End With 

我如何使Excel窗口出现在前台(在所有打开的窗口顶部)?

谢谢!

我会先检查已经打开的Excel实例。 如果您必须允许应用程序的多个实例,那么它会更棘手。 如果您只使用Excel的一个实例,那么我认为这应该使用AppActivate语句。

 Private Function OpenExcelAttachment() Dim MyXL As Object On Error Resume Next Set MyXL = GetObject(,"Excel.Application") If Err.Number <> 0 Then Set MyXL = CreateObject("Excel.Application") On Error GoTo 0 With MyXL Dim FullPath As String, Name As String Name = "\ExcelFile.xlsx" FullPath = CurrentProject.Path & Name .Workbooks.Open FullPath .Visible = True End With AppActivate "Microsoft Excel" End Function 

在使Excel可见之前,您必须调用AllowSetForegroundWindow 。 我不用VBA开发,但是我认为它会是这样的:

 Private Declare Function AllowSetForegroundWindow Lib "user32.dll" (ByVal dwProcessId As Long) As Long Private Function OpenExcelAttachment() Dim MyXL As Object Set MyXL = CreateObject("Excel.Application") AllowSetForegroundWindow -1 With MyXL Dim FullPath As String, Name As String Name = "\ExcelFile.xlsx" FullPath = CurrentProject.Path & Name .Workbooks.Open FullPath .Visible = True 

这里晚会有点晚,

(使用Office 2013)

如果Excel尚未打开,我发现:

 .invisible = true 

如果Excel未打开,请将Excel窗口置于前面。 如果Excel已经打开,但是我发现我需要先设置不可见为false,然后重置为true才能将窗口置于前面

 .invisible = false .invisible = true 

也许这应该工作?

 Private Function OpenExcelAttachment() Dim MyXL As Object Set MyXL = CreateObject("Excel.Application") With MyXL Dim FullPath As String, Name As String Name = "\ExcelFile.xlsx" FullPath = CurrentProject.Path & Name .Workbooks.Open FullPath .Visible = False .Visible = True End With 

编辑:

实际上,AppActivate似乎效果更好

 AppActivate(nameOfExcelFile) 

AppActivate声明