Windows更新后VBA GetObject winmgmts不工作

Windows更新后VBA GetObject winmgmts不工作,vba,excel,wmi,Vba,Excel,Wmi,我一直在使用Excel VBA从事件日志中获取桌面登录、注销时间。在Windows上周更新之前,该程序一直运行良好 调试后,我发现GetObject函数不起作用 Sub get_log_time() On Error GoTo ErrorHandler 'strComputer = ComputerName strComputer = "." Set objWMIService = GetObject("winmgmts:{impersonationLevel

我一直在使用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
错误消息是:错误-2147221020是由VBAProject生成的。错误行:0。自动化错误。无效语法

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

其他信息:

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

我将代码更改为后期绑定,但它仍然不起作用

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
参考设置:Microsoft Excel 16.0对象库、Microsoft Office 16.0对象库


这里也有同样的问题,只适用于MS Access 2016 32位。 在word中也进行了测试。 似乎会影响所有office应用程序。 我在Windows 10 64位上运行office 32位

我希望有人能知道这里到底发生了什么。 这段代码过去工作得很好


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

无效语法听起来很像编译错误。请澄清代码是否编译并运行,该错误是运行时错误。@Mat's Mug感谢您的快速回复。这是运行时错误。完整消息:错误-2147221020由VBAProjectmy项目名称生成。错误行:0。自动化错误。systax.Ok无效。我用Environ$COMPUTERNAME替换strComputer时遇到的错误是运行时错误5无效的过程调用或参数,这比无效语法更有意义,正如我所说,无效语法是编译错误……使用点代替Environ$COMPUTERNAME运行时没有任何问题。set foo=getobjectwinmgmts:{impersonationLevel=impersonate}!\\\root\cimv2-strComputer的值是多少?windows的哪个版本?将strComputer替换为EnvironCOMPUTERNAME的代码行在此运行时没有错误。Windows 10.0.15063 Build 15063/Excel 2016 MSO 16.0.8326.2062 32位半确认:请参阅