教えて!ExcelVBA!

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

【ExcelVBA API操作】WindowsAPIって何?教えて!

       f:id:m_kbou:20200419202758p:plain

WindowsAPIはApplication Programming Interfaceの略称となり、Winodws自体が備えている数百もの関数の集まりとなります。また、Windowsアプリケーションは最終的にWindowsAPIの関数群を呼び出して実行される仕組みとなっています。ExcelVBAではWindowsAPIの呼び出しをVBA自体で行っていますが、全てのWindowsAPIの呼び出しが可能なわけではありません。よって、ExcelVBAより呼び出しが不可能なWindowsAPIについては、VBAのコーディング内に直接使用宣言をして使用する必要があります。この呼び出し不可能なWindowsAPIについて、使用するための宣言方法について説明します。

 

【目次】

 

使用するWindowsAPIの使用宣言方法

WindowsAPIを直接使用するためには、使用するWindowsAPIをDeclareステートメントで宣言する必要があります。Declareステートメントはプロシージャ外で宣言する必要があり、以下にそのサンプル例を載せておきます。

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

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

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

※ 上記のコーディング例で記述しているWindowsAPI関数は、数あるAPI関数の中の1つとなります。WindowsAPI関数を直接宣言する場合には、プロシージャの外でDeclareステートメントを使用してWindowsAPI関数(今回はGetUserName関数を記述します。これによりGetUserName関数がExcelVBA関数としてプロシージャ内で使える様になります。今回取り上げたGetUserName関数は、PCにログインしているユーザ名を取得する関数となります。よって、上記プログラムを実行するとログインユーザ名がMsgBoxで表示されます。

[実行例]: 

f:id:m_kbou:20200320153934p:plain

 

WindowsAPIの有用性と危険性

 WindowsAPIをExcelVBA内で使用する事で、VBAで用意されている機能以上の処理を行う事ができます。しかし、WindowsAPIの呼び出しには危険性も多く含まれています。WindowsAPIの宣言や呼び出しにおけるコーディングミスを起こすと、Excel自体が制御不能となったり、Windows自体の動作が不安定になる事もあります。WindowsAPIを使用する場合は、実行前の細心な注意を心掛けてもらうと同時に、比較的簡単なWindowsAPIのみを使用する事をお勧めします。

 

おわりに

WindowsAPIの多くは難解で、自分が使用したい機能はどの関数を使用すれば良いのか?また、目的の関数がわかったとしても、その関数を呼び出す発生イベントはどこなのか?を理解する事は容易ではありません。より詳しい使い方を知りたい方は、WindowsAPIの専門書を熟読する事をお勧めします。