通过VBScript打开并激活Outlook

通过VBScript打开并激活Outlook,vbscript,outlook,focus,Vbscript,Outlook,Focus,我正在使用VBS控制一个进程,在这个进程中,我需要打开Outlook并激活/设置窗口的焦点。我在设置窗口的焦点时遇到了问题-当它运行时,窗口焦点仍保留在我打开的浏览器窗口上,以便双击并在VBS文件上运行 从我所读到的内容来看,打开一个新的Outlook实例应该具有焦点,如果我运行脚本时没有将焦点放在资源管理器窗口上(例如使用Sendkeys),它工作得非常好,但是如果资源管理器窗口具有焦点,它就不起作用。这一点很重要,因为它将通过任务调度器设置为运行,因此无论任务运行时当前焦点在哪里,它都需要工

我正在使用VBS控制一个进程,在这个进程中,我需要打开Outlook并激活/设置窗口的焦点。我在设置窗口的焦点时遇到了问题-当它运行时,窗口焦点仍保留在我打开的浏览器窗口上,以便双击并在VBS文件上运行

从我所读到的内容来看,打开一个新的Outlook实例应该具有焦点,如果我运行脚本时没有将焦点放在资源管理器窗口上(例如使用Sendkeys),它工作得非常好,但是如果资源管理器窗口具有焦点,它就不起作用。这一点很重要,因为它将通过任务调度器设置为运行,因此无论任务运行时当前焦点在哪里,它都需要工作

以下是现有的VBS:

Option Explicit

OpenOutlook

Sub OpenOutlook()

  Dim oApp
  Dim oName
  Dim oFolder
  Dim WShell

  Set WShell = WScript.CreateObject("Wscript.Shell")
  Set oApp = CreateObject("Outlook.Application") 
  Set oName = oApp.GetNamespace("MAPI")
  OName.Logon "Default Outlook Profile",, False, True
  Set oFolder = oName.GetDefaultFolder(6)
  oFolder.Display
  OApp.ActiveExplorer.Activate
  WShell.AppActivate "Inbox - myemail@mydomain.com - Microsoft Outlook"

End Sub

因此,实验找到了一个解决办法——将WShell命令移出此VBS宏,并移到一个单独的VBS宏中,然后从第三个宏背靠背调用这两个命令。以下是最终的布局:

Shell VBS:

Option Explicit

SendTLShell

Sub SendTLShell()

  Dim filepath
  Dim oShell
  Set oShell = CreateObject("Wscript.Shell")

  filepath = Chr(34) & "\\myfilepath\OutlookControl.vbs" & Chr(34)
  oShell.Run "wscript " & filepath, , True

  filepath = Chr(34) & "\\myfilepath\SendReports.vbs" & Chr(34)
  oShell.Run "wscript " & filepath, , True

  Set oShell = Nothing

 End Sub
Outlook控件VBS:

Option Explicit

OpenOutlook

Sub OpenOutlook()

  Dim oApp
  Dim oName
  Dim oFolder

  Set oApp = CreateObject("Outlook.Application") 
  Set oName = oApp.GetNamespace("MAPI")
  OName.Logon "Default Outlook Profile",, False, True
  Set oFolder = oName.GetDefaultFolder(6)
  oFolder.Display
  OApp.ActiveExplorer.Activate

  Set oApp = Nothing
  Set oName = Nothing
  Set oFolder = Nothing

End Sub
SendReports(“激活”)VBS还可以执行一些Excel操作:

Option Explicit

RunFilePullMacro

Sub RunFilePullMacro() 

  Dim xlApp 
  Dim xlBook 
  Dim oShell
  Dim wShell

  Set wShell = WScript.CreateObject("Wscript.Shell")
  Set oShell = CreateObject("Shell.Application")
  oShell.MinimizeAll

  wShell.AppActivate "Inbox - myusername@mydomain.com - Microsoft Outlook"
  Set xlApp = CreateObject("Excel.Application")
  xlApp.Application.Visible = True
  xlApp.DisplayAlerts = False 
  Set xlBook = xlApp.Workbooks.Open("\\myfilepath\myexcelfile.xlsm", 0, True) 
  xlApp.Run "FeedbackCheck"
  xlApp.ActiveWorkbook.Close
  xlApp.DisplayAlerts = True
  xlApp.Quit 

  Set xlBook = Nothing 
  Set xlApp = Nothing 
  Set oShell = Nothing
  Set wShell = Nothing

End Sub 

我仍然很好奇,是否有人知道更好的解决方案,或者为什么需要这样做。

因此,实验找到了一个解决办法-将WShell命令从这个VBS宏中移到一个单独的VBS宏中,然后从第三个宏中背靠背调用这两个命令。以下是最终的布局:

Shell VBS:

Option Explicit

SendTLShell

Sub SendTLShell()

  Dim filepath
  Dim oShell
  Set oShell = CreateObject("Wscript.Shell")

  filepath = Chr(34) & "\\myfilepath\OutlookControl.vbs" & Chr(34)
  oShell.Run "wscript " & filepath, , True

  filepath = Chr(34) & "\\myfilepath\SendReports.vbs" & Chr(34)
  oShell.Run "wscript " & filepath, , True

  Set oShell = Nothing

 End Sub
Outlook控件VBS:

Option Explicit

OpenOutlook

Sub OpenOutlook()

  Dim oApp
  Dim oName
  Dim oFolder

  Set oApp = CreateObject("Outlook.Application") 
  Set oName = oApp.GetNamespace("MAPI")
  OName.Logon "Default Outlook Profile",, False, True
  Set oFolder = oName.GetDefaultFolder(6)
  oFolder.Display
  OApp.ActiveExplorer.Activate

  Set oApp = Nothing
  Set oName = Nothing
  Set oFolder = Nothing

End Sub
SendReports(“激活”)VBS还可以执行一些Excel操作:

Option Explicit

RunFilePullMacro

Sub RunFilePullMacro() 

  Dim xlApp 
  Dim xlBook 
  Dim oShell
  Dim wShell

  Set wShell = WScript.CreateObject("Wscript.Shell")
  Set oShell = CreateObject("Shell.Application")
  oShell.MinimizeAll

  wShell.AppActivate "Inbox - myusername@mydomain.com - Microsoft Outlook"
  Set xlApp = CreateObject("Excel.Application")
  xlApp.Application.Visible = True
  xlApp.DisplayAlerts = False 
  Set xlBook = xlApp.Workbooks.Open("\\myfilepath\myexcelfile.xlsm", 0, True) 
  xlApp.Run "FeedbackCheck"
  xlApp.ActiveWorkbook.Close
  xlApp.DisplayAlerts = True
  xlApp.Quit 

  Set xlBook = Nothing 
  Set xlApp = Nothing 
  Set oShell = Nothing
  Set wShell = Nothing

End Sub 

我仍然很好奇是否有人知道更好的解决方案,或者为什么需要这样做。

这可能不是一个理想的解决方案,但我决定走这条路:

制作包含以下宏的excel手册:

Sub Open_Outlook()

Shell ("OUTLOOK")

End Sub

然后,您可以创建一个VBS脚本来打开excel工作簿并运行打开outlook的宏

不优雅,但实用:)



这可能不是一个理想的解决方案,但我决定走这条路:

制作包含以下宏的excel手册:

Sub Open_Outlook()

Shell ("OUTLOOK")

End Sub

然后,您可以创建一个VBS脚本来打开excel工作簿并运行打开outlook的宏

不优雅,但实用:)