使用WMI在VBA中获取当前的Windows用户名

我想知道是否有一个简单的方法来使用WMI来获取当前的Windows用户名和域名。 Windows API调用只是简单的用户名,所以你最终会再次调用域名。 我有一些代码,但我得到一个自动化错误。 有任何想法吗? 我认为我走在正确的道路上,但是我对WMI有点新鲜。

函数GetFullName()作为string
    昏暗的电脑作为string
    电脑=“。”
     Dim objWMIService,colProcessList As Object
    设置objWMIService = GetObject(“winmgmts:\\”&computer&“\ root \ cimv2”)
    设置colProcessList = objWMIService.ExecQuery _
         (“selectTOP 1 *从Win32_Process WHERE名称='EXCEL.EXE'”)
     Dim uname,udomain As String
     Dim objProcess As Object
    对于每个objProcess在colProcessList中
         objProcess.GetOwner uname,udomain
    下一个
     GetFullName = UCase(udomain)&“\”&UCase(uname)
结束function

更新:请参阅接受的答案

WQL中没有TOP 1子句。 离开它,你的查询应该工作:

"SELECT * FROM Win32_Process WHERE Name = 'EXCEL.EXE'" 

怎么样

 UserName = Environ("Username") Domain = Environ("UserDomain") Combined= Environ("UserDomain") & "\" & Environ("Username") 

意识到这是旧的,但要处理多个Excel实例,另一篇文章(下面链接)阐明了如何获取当前应用程序的进程ID:

 Declare Function GetCurrentProcessId Lib "kernel32" () As Long ... ProcessID = GetCurrentProcessId Set ColProcessIDList = objWMIService.ExecQuery( _ "SELECT * FROM Win32_Process WHERE ProcessID = '" & ProcessID & "'") ... 

如何通过VBA获取当前Excel实例的进程ID,而不使用标题?