将焦点从Outlook更改为Excel

将焦点从Outlook更改为Excel,excel,vba,outlook,focus,Excel,Vba,Outlook,Focus,我有一个Outlook VBA代码,它在“主题”邮件中获取特定文本,然后打开并搜索Excel工作簿中的文本,如果文本存在,则显示一个用户表单 如何将焦点从Outlook设置为Excel?userform保持隐藏状态,仅当我单击Excel窗口激活它时才会显示 Sub-abrirexecel() Dim ExApp作为Excel.Application,planilha作为字符串 出错时继续下一步 planilha=“'C:\Users\Dyme\”&格式(日期,“yyyy-mm-dd”)&代码搜索

我有一个Outlook VBA代码,它在“主题”邮件中获取特定文本,然后打开并搜索Excel工作簿中的文本,如果文本存在,则显示一个用户表单

如何将焦点从Outlook设置为Excel?userform保持隐藏状态,仅当我单击Excel窗口激活它时才会显示

Sub-abrirexecel()
Dim ExApp作为Excel.Application,planilha作为字符串
出错时继续下一步
planilha=“'C:\Users\Dyme\”&格式(日期,“yyyy-mm-dd”)&代码搜索.xlsm'!funcaof12
'funcaof12是打开userform的宏名称
Set ExApp=GetObject(,“Excel.Application”)
如果没有,ExApp什么都不是
例如,运行planilha
如果结束
端接头

有人可以提供帮助吗?

您可以通过在用户表单中添加调用函数,将Excel用户表单设置为在顶部打开。如果您从Outlook调用此函数,它将在当前不激活Excel的情况下打开顶部的表单(需要对调用代码进行一些操作才能正确关闭Excel会话)

例如:

在Userform代码中


也许吧。@BigBen,我已经试过了,但是没有成功。谢谢@Tragamor,但是,很抱歉我提出了一个最不友好的问题:当我把这个语句放到vba编辑器上时,它变成了红色。我需要激活一些引用吗
Private Declare Function FindWindow Lib“user32”别名“FindWindowA”(ByVal lpClassName为String,ByVal lpWindowName为String)只要您可能正在运行windows 64位,在这种情况下,您需要更改调用函数:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Sub UserForm_Activate()
     'check if we are using XL97 or not (hWndUF global variable)
    hWndUF = IIf(Val(Application.Version) < 9, FindWindow("ThunderXFrame", Me.Caption), FindWindow("ThunderDFrame", Me.Caption))
End Sub
Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, _
    ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

Private Const SWP_NOSIZE = &H1, SWP_NOMOVE = &H2, HWND_TOPMOST = -1, GW_HWNDNEXT = 2
Private Const FLAGS As Long = SWP_NOMOVE Or SWP_NOSIZE

Public hWndUF As Long

Public Function ShowUserForm()
    Dim uf As Object: Set uf = UserForm1
    uf.Show vbModeless
    If hWndUF <> 0 Then SetWindowPos hWndUF, HWND_TOPMOST, 0, 0, 0, 0, FLAGS
End Function
Sub ShowExcelUserForm()
    ' Requires reference: Microsoft Excel x.0 Data Objects library
    Dim ExApp As Excel.Application: Set ExApp = New Excel.Application 'Set ExApp = GetObject(, "Excel.Application")
    If Not ExApp Is Nothing Then
        ExApp.Run "'C:\Users\snapier\Desktop\Stack Overflow 2019.xlsm'!ShowUserForm"
    End If
End Sub