教えて!ExcelVBA!

ExcelVBAの基礎知識・書き方について紹介します。

【ExcelVBA API操作】ログイン名を取得(GetUserName)する方法を教えて!

GetUserName関数は、Windows APIの一部であり、Windowsオペレーティングシステム上で実行されているプログラムから、現在ログインしているユーザーの名前を取得するために使用されます。

API宣言

Excel VBAでは、GetUserName関数を使用する前に、API宣言を行う必要があります。API宣言を行うことで、Excel VBAがWindows API関数を認識することができるようになります。API宣言は、次のように行います。

Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" _
(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関数を使用して、現在ログインしているユーザーの名前を取得するための完全なプログラム例です。

Option Explicit

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を学習する必要があります。