Windows更新后,VBA GetObject winmgmts无效

时间:2017-08-09 00:45:58

标签: excel vba excel-vba wmi

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

调试后,我发现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

错误消息是:&#34;错误#-2147221020由VBAProject生成。错误行:0。自动化错误。语法无效&#34;。

我无法找到发生这种情况的原因,以及如何解决这个问题。

其他信息:

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

  • 我将代码更改为后期绑定但仍然无效。

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

1 个答案:

答案 0 :(得分:3)

此处的问题相同,仅限MS Access 2016 32位。 也测试了一下。 似乎会影响所有办公应用程序。 我在Windows 10 64 Bit上运行办公室32位。

我希望有人能够知道这里究竟发生了什么。 这段代码以前工作得很好。

编辑:罪魁祸首似乎是更新KB4011051,卸载后错误消失。我正在调查它,看看我是否可以找出这是设计还是错误。