Aliasの概要
関数の別名を定義 VBAの予約語 | ||
Alias 概要 Alias キーワードは、VBAの |
||
|
Aliasの基本的な使い方
以下の例では、Windows API の GetTickCount
関数を VBA で TickCount
という別名で利用する方法を示します。
' GetTickCount 関数の別名を TickCount に変更
Declare PtrSafe Function TickCount Lib "kernel32" Alias "GetTickCount" () As Long
Sub SampleAlias()
MsgBox "現在のTickCount: " & TickCount
End Sub
解説:
Declare PtrSafe Function
で外部DLLの関数を定義します。Alias "GetTickCount"
を指定することで、VBA内ではTickCount
という名前で関数を利用可能。- Windows の
GetTickCount
は、システムの起動後のミリ秒を取得するAPIです。
異なるライブラリ名を持つ関数を統一する
以下のように、32ビット版と64ビット版のDLLが異なる場合に、Alias
を使って統一した名前で利用できます。
#If VBA7 Then
Declare PtrSafe Function MessageBox Lib "User32" Alias "MessageBoxA" (ByVal hWnd As LongPtr, ByVal lpText As String, ByVal lpCaption As String, ByVal uType As Long) As Long
#Else
Declare Function MessageBox Lib "User32" Alias "MessageBoxA" (ByVal hWnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal uType As Long) As Long
#End If
Sub ShowMessageBox()
MessageBox 0, "Hello, VBA!", "Message Box", 0
End Sub
解説:
MessageBoxA
は、Windows のメッセージボックスを表示するAPI関数です。- 64ビット環境(VBA7以降)では、ポインタ型に
LongPtr
を使用。 - 32ビット環境では
Long
型を使用し、同じ関数名MessageBox
で統一して使えるようにする。
VBAの予約語と関数名が衝突する場合の回避策
外部関数の名前がVBAの予約語と重複する場合、Alias を使って異なる名前に変更できます。
' VBAのReservedWord関数があると仮定
Declare PtrSafe Function VBA_Function Lib "custom.dll" Alias "Function" () As Long
Sub CallCustomFunction()
MsgBox VBA_Function()
End Sub
解説:
Function
はVBAの予約語のため、そのままでは関数名として使用できない。Alias "Function"
を使って、VBA内ではVBA_Function
という名前で呼び出せるようにする。
注意点
- 外部DLL関数専用: Alias は外部DLLの関数に対してのみ有効で、通常のVBA関数には適用できない。
- 関数名の変更のみ: 別名を設定しても、関数の動作や引数の仕様は変わらない。
- 正確な関数名の指定が必要:
Alias
で指定する名前は、DLLに存在する関数の正確な名称を入力する必要がある。
よくある質問
- Q: Alias を使うメリットは何ですか?
- A: 長い関数名を短縮したり、VBAの予約語と衝突しないように関数名を変更できます。
- Q: Alias をVBAの通常の関数に使えますか?
- A: いいえ、Alias は
Declare
ステートメントで外部DLL関数に対してのみ使用できます。 - Q: 関数名を変更した場合、引数の仕様も変わりますか?
- A: いいえ、Alias で関数名を変更しても、引数の仕様や戻り値は元の関数のままです。
まとめ
- Alias は
Declare
ステートメントで外部DLL関数の別名を設定するために使用される。 - 関数名が長すぎる場合や、VBAの予約語と衝突する場合に有用。
- 32ビットと64ビット環境の違いを吸収するための統一的な名前の設定に利用可能。
- 関数の動作や引数の仕様は Alias では変更できない。
- Windows API などの外部関数を呼び出す際に、使いやすい名前を付けることができる。