教えて!ExcelVBA!

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

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

       f:id:m_kbou:20200419202920p:plain

ログイン名を取得するWindowsAPI関数(GetUserName)について説明します。

 

【目次】

 

構文

記述方法は、以下の通りとなります。

=======================================================================

API定義)

Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long

VBA記述)

GetUserNamelpBuffernSize

=======================================================================

[説明]:

ログイン名を取得するWindowsAPI関数はGetUserName関数となります。VBAから呼び出して使用する場合には、DeclareステートメントによるDeclare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long」をプロシージャの外で宣言します。引数であるlpBuffer取得したログイン名を格納するエリアとなります。また、もう一つの引数であるnSizeにはログイン名の文字数を指定します。実行による戻り値には「0」と「0以外」があり、「0以外」の場合は正常終了、「0」の場合はエラーとなります。

 

使い方

[記述例]:

※以下の記述例は、VBE(VBA記述画面)に記述しないと実行ができません。VBEの開き方については、VBEの開き方を参考にして下さい。

-------------------------------------------------

Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long

 

Sub サンプル()

    '↓処理①
    Dim ログイン名 As String * 255
        
    '↓処理②
    If GetUserName(ログイン名, 255) <> 0 Then
        MsgBox ログイン名
    Else
        MsgBox "ログインしていません。"
    End If
   
End Sub

-------------------------------------------------

処理の流れは以下の通りとなります。

[処理①]:変数定義
Dimによるログイン名を格納する変数の定義となります。予め格納する変数のサイズを指定する必要があるため、サイズを255にしてあります。

[処理②]:GetUserName(WindowsAPI関数)によるログイン名取得
WindowsAPI関数であるGetUserNameを使用したログイン名の取得になります。取得処理が正常に終了すると「0以外」の値が返され、正常でない場合には「0」の値が返されます。よって、戻り値が0以外の場合はログイン名がMsgBoxで表示され、0の場合は”ログインしていません。”が表示されます。

[実行例]:

※現在ログインしているログイン者名「123456789」が表示されます。

f:id:m_kbou:20200320172837p:plain

WindowsAPIを使用したログイン名を取得する方法についての説明は以上です。

 

おわりに

今回はWindowsAPI関数によるログイン名の取得方法について説明しました。是非参考にして下さい。