2017-08-09 90 views
0

我一直在使用Excel VBA从事件日志中获取桌面登录,注销时间。该程序运行良好,直到上周Windows更新。Windows更新后VBA GetObject winmgmts无法工作

经过调试,我想通了GetObject功能没有工作。

Sub get_log_time() 
    On Error GoTo ErrorHandler 

    'strComputer = ComputerName 
    strComputer = "." 

    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
    Set colLoggedEvents = objWMIService.ExecQuery("Select * from Win32_NTLogEvent Where Logfile = 'System' and (EventCode = '7001' or EventCode = '7002')") 

ErrorHandler: 
    If Err.Number <> 0 Then 
    Msg = "Error # " & Str(Err.Number) & " was generated by " _ 
     & Err.Source & Chr(13) & "Error Line: " & Erl & Chr(13) & Err.Description 
    MsgBox Msg, , "Error", Err.HelpFile, Err.HelpContext 
    End If 
    Resume Next 
End Sub 

错误信息是: “错误#-2147221020用的VBAProject错误线生成:0.自动化错误语法无效。”。

我找不到为什么会发生这种情况,以及如何解决它。

附加信息:

  • 我使用的是Windows 10时,Excel 2016 MSO(16.0.4549.1000)32位

  • 我改变了代码到后期绑定,但它仍然无法正常工作。

  • 参考设置:Microsoft Excel中16.0对象库,的Microsoft Office 16.0对象库

+0

“语法无效”听起来非常像编译错误。请说明代码是否编译并运行(并且错误是运行时错误)。 –

+0

@ Mat's马克杯感谢您的快速回复。这是运行时错误。完整的消息:错误#-2147221020是由VBAProject(我的项目名称)生成的。错误行:0.自动化错误。无效的systax。 –

+0

好的。那么我得到的错误(用'Environ $(“COMPUTERNAME”)'替换'strComputer')是运行时错误5“无效的过程调用或参数”,这比“无效的语法”更有意义,它与我说,是一个编译错误。 –

回答

3

同样的问题在这里,只能用的MS Access 2016 32位的。 也经过测试。 似乎会影响所有办公应用程序。 我在Windows 10 64位上运行Office 32位。

我希望有人能够找出这里发生了什么。 这段代码用来工作得很好。

编辑:罪犯似乎是更新KB4011051,卸载后错误消失。我正在研究它是否可以查明这是设计还是错误。

+1

半确认:请参阅https://social.technet.microsoft.com/Forums/office/zh-CN/e642eac3-e842-4f5b-a774-5516b9bf8474/aug-1-office-update-kb4011051destroys-wmi-access-从-Excel的?论坛= Excel中 –

相关问题