0

我正在尝试使用以下代码从 VBA excel 关闭 OneNote 应用程序:

Sub closeOneNote()
                Dim oneNoteApp As Object
                On Error Resume Next
                Set oneNoteApp = GetObject(, "OneNote.Application")
                If Err.Number = 0 Then
                oneNoteApp.Quit
                Else
                Err.Clear
                End If
End Sub

当我尝试使用 Outlook 而不是 OneNote 时,它​​工作正常并且 Outlook 关闭。我想知道是不是因为 OneNote 不是一个支持通过 VBA 实现自动化的应用程序。如下链接所示,页面底部的表格列出了所有 Ican 引用的顶级 Office 对象及其类名,OneNote 不在其中:

创建对象变量以自动化另一个 Office 应用程序

关于如何关闭应用程序的任何想法和建议(不是笔记本本身,只有正在运行的应用程序..)

谢谢

4

2 回答 2

1

这是处理 NoteNote 的一个很好的资源:

http://msdn.microsoft.com/en-us/library/hh377180(v=office.14)

一般来说:

http://msdn.microsoft.com/en-us/library/hh377180(v=office.14)

于 2013-09-10T13:20:36.973 回答
0

OneNote 应用程序界面(在此处记录)没有 Quit 方法。这就是为什么它不起作用。您可以做的是关闭 OneNote 窗口,这有点棘手。以下是一些说明和示例代码:

  • 获取 OneNote 窗口句柄:应用程序对象有一个CurrentWindow成员,然后有一个WindowHandle成员是HWND当前 OneNote 窗口的成员。

  • 获取顶层窗口:这个句柄通常是 OneNote 窗口的子窗口,所以需要调用GetAncestorwithGA_ROOT来获取顶层窗口

  • 关闭窗口:您可以发送WM_CLOSE到顶层窗口来关闭它。当然,如果它正在显示一个对话框或以其他方式忙碌,它可能不会对此做出响应。

    Option Explicit
    
    Private Declare PtrSafe Function PostMessage Lib "user32" Alias "PostMessageA" _
    (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    
    Private Declare PtrSafe Function GetAncestor Lib "user32.dll" _
    (ByVal hwnd As Long, ByVal gaFlags As Long) As Long
    
    Private Const GA_ROOT As Long = 2
    Private Const WM_CLOSE = &H10
    
    Sub test()
        ' Create Application Object
        Dim app As Object
        Set app = CreateObject("OneNote.Application")
    
        ' Get the window handle
        Dim hwnd As Long
        hwnd = app.Windows.CurrentWindow.WindowHandle
    
        ' Get the top level window
        Dim hwndRoot As Long
        hwndRoot = GetAncestor(hwnd, GA_ROOT)
    
        ' Close it
        PostMessage hwndRoot, WM_CLOSE, 0&, 0&
    End Sub
    

如果周围有多个 OneNote 窗口,这还不够。对于这种情况,您可以枚举Windows集合并对其中的每个Window对象执行此操作。

于 2014-02-22T06:17:23.060 回答