使用VBA获取计算机名称

l--*_*''' 38 vba environment-variables username computer-name

有没有办法在VBA中获取计算机的名称?

Tom*_*mmy 60

Dim sHostName As String

' Get Host Name / Get Computer Name

sHostName = Environ$("computername")
Run Code Online (Sandbox Code Playgroud)

  • 请注意,必须小心处理Environ变量,因为它们存在安全风险(http://stackoverflow.com/questions/3366192/using-nt-login-as-part-of-sql-query-run-via-vba-在访问-2007) (6认同)
  • @Fionnuala我不同意.这不是处理环境变量的安全风险,而是易受SQL注入影响的代码. (4认同)
  • 更好(安全性、不变性)使用更强大的 **`CreateObject("WScript.Network").ComputerName`** 来自 *Nigel Heffernan's* 对此​​问题的回答:/sf/answers/707626601/ (3认同)

Sar*_*raz 19

你可以这样做:

Sub Get_Environmental_Variable()

Dim sHostName As String
Dim sUserName As String

' Get Host Name / Get Computer Name    
sHostName = Environ$("computername")

' Get Current User Name    
sUserName = Environ$("username")

End Sub
Run Code Online (Sandbox Code Playgroud)

  • 看起来你找到了我做的同一个网站:) (4认同)

Nig*_*nan 10

看起来我已经迟到了,但这是一个常见问题......

这可能是您想要的代码.

请注意,此代码属于公共领域,来自Usenet,MSDN和Excellerando博客.

Public Function ComputerName()As String '返回主机名

'使用后期绑定:对性能和稳定性不利,对于有用 '代码可移植性.正确的声明是:

'Dim objNetwork作为IWshRuntimeLibrary.WshNetwork 'set objNetwork = New IWshRuntimeLibrary.WshNetwork

Public Function ComputerName() As String
'' Returns the host name

'' Uses late-binding: bad for performance and stability, useful for 
'' code portability. The correct declaration is:

'   Dim objNetwork  As IWshRuntimeLibrary.WshNetwork
'   Set objNetwork = New IWshRuntimeLibrary.WshNetwork

    Dim objNetwork As Object
    Set objNetwork = CreateObject("WScript.Network")

    ComputerName = objNetwork.ComputerName

    Set objNetwork = Nothing

End Function
Run Code Online (Sandbox Code Playgroud)

结束功能

你也可能需要这个:

公共函数UserName(可选WithDomain为Boolean = False)作为字符串 '返回用户的网络名称

'使用后期绑定:对性能和稳定性不利,对于有用 '代码可移植性.正确的声明是:

'Dim objNetwork作为IWshRuntimeLibrary.WshNetwork 'set objNetwork = New IWshRuntimeLibrary.WshNetwork

Public Function UserName(Optional WithDomain As Boolean = False) As String
'' Returns the user's network name

'' Uses late-binding: bad for performance and stability, useful for
'' code portability. The correct declaration is:

'   Dim objNetwork  As IWshRuntimeLibrary.WshNetwork
'   Set objNetwork = New IWshRuntimeLibrary.WshNetwork


    Dim objNetwork As Object
    Set objNetwork = CreateObject("WScript.Network")

    If WithDomain Then
        UserName = objNetwork.UserDomain & "\" & objNetwork.UserName
    Else
        UserName = objNetwork.UserName
    End If

    Set objNetwork = Nothing

End Function
Run Code Online (Sandbox Code Playgroud)

结束功能

  • +1使用`WScript.Network`而不是'Environ()`.注意:您可以使用`ComputerName = CreateObject("WScript.Network").ComputerName`在一行中完成 (3认同)
  • 始终正确地创建和销毁对象。如果您不想声明使用`With CreateObject("WScript.Network")`,那么该对象将在`End With`之后被正确垃圾收集 (2认同)