GetWindowsDirectory関数は、Windowsのシステムフォルダが格納されている場所を取得するために使用される関数です。Windowsのシステムフォルダには、Windowsの動作に必要なファイルやドライバーが格納されています。この関数を使うことで、プログラムからWindowsのシステムフォルダの場所を取得することができます。
API宣言
API宣言とは、Windows APIを呼び出すために必要な宣言のことです。ExcelVBAでWindows APIを使用するには、最初にAPI宣言が必要になります。GetWindowsDirectory関数を使用する場合は、以下のようにAPI宣言を行います。
Alias "GetWindowsDirectoryA" _
(ByVal lpBuffer As String, ByVal nSize As Long) As Long
使い方
GetWindowsDirectory関数を使うには、以下のように関数を呼び出します。
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ファイルを起動するプログラムの例です。
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宣言が必要であること、関数の使い方を理解する必要があることが重要です。