教えて!ExcelVBA!

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

【ExcelVBA API操作】Windowsディレクトリのパスを取得(GetWindowsDirectory)する方法を教えて!

GetWindowsDirectory関数は、Windowsのシステムフォルダが格納されている場所を取得するために使用される関数です。Windowsのシステムフォルダには、Windowsの動作に必要なファイルやドライバーが格納されています。この関数を使うことで、プログラムからWindowsのシステムフォルダの場所を取得することができます。

API宣言

API宣言とは、Windows APIを呼び出すために必要な宣言のことです。ExcelVBAでWindows APIを使用するには、最初にAPI宣言が必要になります。GetWindowsDirectory関数を使用する場合は、以下のようにAPI宣言を行います。

Private Declare Function GetWindowsDirectory Lib "kernel32" _
 Alias "GetWindowsDirectoryA" _
 (ByVal lpBuffer As String, ByVal nSize As Long) As Long

使い方

GetWindowsDirectory関数を使うには、以下のように関数を呼び出します。

Dim sBuffer As String
Dim lSize As Long
sBuffer = String$(255, 0)
lSize = Len(sBuffer)
Call GetWindowsDirectory(sBuffer, lSize)
sBuffer = Left$(sBuffer, lSize)
MsgBox "Windowsのシステムフォルダは、" & sBuffer & "です。

この例では、String$関数を使ってsBuffer変数に255バイトの空の文字列を作成し、Len関数で文字列の長さを取得してlSize変数に代入します。次に、GetWindowsDirectory関数を呼び出して、Windowsのシステムフォルダの場所を取得します。取得した場所は、sBuffer変数に格納されます。最後に、MsgBox関数を使って取得した場所を表示します。

プログラミング例

以下は、GetWindowsDirectory関数を使用して、Windowsのシステムフォルダにあるcmd.exeファイルを起動するプログラムの例です。

Private Declare Function ShellExecute Lib "shell32.dll" _
    Alias "ShellExecuteA" _
    (ByVal hwnd As Long, ByVal lpOperation As String, _
    ByVal lpFile As String, ByVal lpParameters As String, _
    ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Private Declare Function GetWindowsDirectory Lib "kernel32" _
    Alias "GetWindowsDirectoryA" _
    (ByVal lpBuffer As String, ByVal nSize As Long) As Long

Sub StartCmd()
    Dim sBuffer As String
    Dim lSize As Long
    Dim sCmdPath As String
    sBuffer = String$(255, 0)
    lSize = Len(sBuffer)
    Call GetWindowsDirectory(sBuffer, lSize)
    sBuffer = Left$(sBuffer, lSize)
    sCmdPath = sBuffer & "\System32\cmd.exe"
    Call ShellExecute(0&, "open", sCmdPath, "", sBuffer, vbNormalFocus)
End Sub

この例では、ShellExecute関数を使用して、Windowsのシステムフォルダにあるcmd.exeファイルを起動します。GetWindowsDirectory関数を使用して、Windowsのシステムフォルダの場所を取得し、それをsBuffer変数に代入します。次に、sBuffer変数と"\System32\cmd.exe"を結合して、sCmdPath変数にcmd.exeファイルのパスを作成します。最後に、ShellExecute関数を呼び出して、sCmdPath変数の値を使ってcmd.exeファイルを起動します。

まとめ

ExcelVBAでGetWindowsDirectory関数を使う方法について解説しました。Windowsのシステムフォルダの場所を取得することで、プログラムの開発や実行に必要なファイルやドライバーを取得することができます。GetWindowsDirectory関数を使うには、API宣言が必要であること、関数の使い方を理解する必要があることが重要です。