GetUserName関数は、Windows APIの一部であり、Windowsオペレーティングシステム上で実行されているプログラムから、現在ログインしているユーザーの名前を取得するために使用されます。
API宣言
Excel VBAでは、GetUserName関数を使用する前に、API宣言を行う必要があります。API宣言を行うことで、Excel VBAがWindows API関数を認識することができるようになります。API宣言は、次のように行います。
(ByVal lpBuffer As String, nSize As Long) As Long
このAPI宣言では、GetUserName関数をadvapi32.dllから読み込み、GetUserNameAとしてエイリアスを設定しています。エイリアスは、関数名がExcel VBAで使用される関数名と異なる場合に使用されます。この場合、GetUserNameAは、GetUserName関数のANSIバージョンを指します。
使い方
GetUserName関数を使用して、現在ログインしているユーザーの名前を取得するための基本的な手順です。
1.API宣言を行う。
2.バッファを作成する。
Dim userName As String
Dim bufferSize As Long
bufferSize = 255
userName = Space(bufferSize)
※このコードでは、255文字分のバッファを作成しています。Space関数は、指定された数のスペースで構成される文字列を返します。この場合、バッファの初期値として使用されます。
3.GetUserName関数を呼び出す。
Dim result As Long
result = GetUserName(userName, bufferSize)
※このコードでは、GetUserName関数を呼び出して、現在ログインしているユーザーの名前をバッファに格納します。関数が成功すると、TRUEが返され、バッファにユーザー名が格納されます。
4.バッファからユーザー名を取得する。
If result = 1 Then
userName = Left(userName, InStr(userName, Chr(0)) - 1)
MsgBox "Current user: " & userName
Else
MsgBox "Failed to get the current user name"
End If
※このコードでは、GetUserName関数が成功した場合、バッファからユーザー名を取得します。Left関数は、指定された文字列の左端から指定された数の文字列を返します。InStr関数は、指定された文字列内で指定された文字列が最初に出現する位置を返します。この場合、Chr(0)は、NULL文字を表します。バッファ内のNULL文字以降の文字列は、無視されます。
プログラミング例
以下は、GetUserName関数を使用して、現在ログインしているユーザーの名前を取得するための完全なプログラム例です。
Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" _
(ByVal lpBuffer As String, nSize As Long) As Long
Sub GetCurrentUserName()
Dim userName As String
Dim bufferSize As Long
Dim result As Long
bufferSize = 255
userName = Space(bufferSize)
result = GetUserName(userName, bufferSize)
If result = 1 Then
userName = Left(userName, InStr(userName, Chr(0)) - 1)
MsgBox "Current user: " & userName
Else
MsgBox "Failed to get the current user name"
End If
End Sub
このコードを実行すると、現在ログインしているユーザーの名前が表示されます。
まとめ
Windowsプログラミングを学ぶ場合、API関数の使用方法を理解することが非常に重要です。GetUserName関数を使用することで、現在ログインしているユーザーの名前を簡単に取得できるだけでなく、Windows API関数の使用方法について学ぶことができます。より高度なWindowsプログラミングに進むためには、より高度なAPI関数やWin32 APIを学習する必要があります。