2010/04/28

VBAでユーザー名を取得する

Option Explicit

' ログイン名取得API '
Private Declare Function GetUserName Lib "ADVAPI32.dll" _
    Alias "GetUserNameA" _
    (ByVal IpBuffer As String, nSize As Long) As Long

' ログイン名を取得する '
Public Function GetUserID()

    Dim UserName As String
    Dim ReturnAPI As Long
    
    UserName = Space(20)
    
    ReturnAPI = GetUserName(UserName, Len(UserName))
    GetUserID = Left(UserName, InStr(1, UserName, Chr(0)) - 1)

End Function

' 取得したユーザー名をメッセージボックスに表示 '
Sub GetUserSample()
    MsgBox GetUserID()
End Sub

まず、GetUserName関数(API)のための宣言を行います。

次に、Functionプロシージャですが、最初にSpace関数でユーザー名を格納するためのバッファを20文字分確保します。取得したユーザー名の末には余分なNullが挿入されるので、Left関数でNullより左側を実際のユーザー名として抜き出しています。なお、"Chr(0)"はNullの意なので、"vbNullChar"としてもOKです。

最後にSubプロシージャのサンプルを付けていますが、ワークシート上でも、"=GetUserID()"とすればユーザー名を引くことができます。

0 件のコメント:

コメントを投稿