![](https://excel-vba.work/wp-content/themes/cocoon-master/images/b-woman.png)
VBAから
・指定したODBCドライバが
・インストールされているか確認
できます!
![](https://excel-vba.work/wp-content/themes/cocoon-master/images/b-woman.png)
Windows APIによって実現
できます!
![](https://excel-vba.work/wp-content/themes/cocoon-master/images/b-woman.png)
Windows APIの1つである
・SQLGetInstalledDrivers関数
を使用します!
VBAコード
ここでは例として
・ODBCドライバ「ODBC Driver 17 for SQL Server」が
・インストールされているか確認
します。
![ODBCドライバ「ODBC Driver 17 for SQL Server」はインストールされている](https://excel-vba.work/wp-content/uploads/2022/05/vba_check_odbcdriver_installed_001.png)
Option Explicit
'Windows API「SQLGetInstalledDrivers」
Private Declare PtrSafe Function SQLGetInstalledDrivers Lib "odbccp32.dll" _
(ByVal lpszBuf As String, ByVal cbBufMax As Integer, ByRef pcbBufOut As Integer) As Long
Sub main()
Dim targetOdbcDriver As String
Dim result As Integer
'確認したいODBCドライバを指定
targetOdbcDriver = "ODBC Driver 17 for SQL Server"
'指定したODBCドライバがインストール済みか確認する関数の呼び出し
result = checkOdbcDriverInstalled(targetOdbcDriver)
'結果を確認
Select Case result
Case 0
MsgBox (targetOdbcDriver & " は存在します。")
Case 1
MsgBox (targetOdbcDriver & " は存在しません。")
Case 2
MsgBox ("ODBCドライバの取得に失敗しました。")
Case Else
MsgBox ("想定外のエラーが発生しました。")
End Select
End Sub
'---------------------------------------------------
'ODBCドライバがインストール済みか確認する関数
'引数
' odbcDriver:ODBCドライバ
'戻り値
' 0:存在する
' 1:存在しない
' 2:ODBCドライバの取得に失敗
'---------------------------------------------------
Function checkOdbcDriverInstalled(ByVal odbcDriver As String) As Integer
'バッファサイズ
Const BUF_SIZE As Long = 5000
Dim odbcDriverListBuf As String
Dim result As Boolean
Dim odbcDriverListSize As Integer
Dim driverList() As String
Dim driver As Variant
'バッファを作成 ※この変数に全てのODBCドライバが設定される
odbcDriverListBuf = String(BUF_SIZE, vbNullChar)
'全てのODBCドライバを取得
result = SQLGetInstalledDrivers(odbcDriverListBuf, BUF_SIZE, odbcDriverListSize)
If result Then
'取得した全てのODBCドライバを分割して配列に格納
driverList = Split(Left(odbcDriverListBuf, InStr(1, odbcDriverListBuf, vbNullChar & vbNullChar, vbBinaryCompare)), vbNullChar)
'「取得したODBCドライ」に「確認したいODBCドライバ」が存在するかを確認
For Each driver In driverList
If driver = odbcDriver Then
'存在する場合
checkOdbcDriverInstalled = 0
Exit Function
End If
Next
'存在しない場合
checkOdbcDriverInstalled = 1
Else
'ODBCドライバの取得に失敗した場合
checkOdbcDriverInstalled = 2
End If
End Function
実行結果
指定したODBCドライバがインストールされているかどうかを確認できました。
![実行結果](https://excel-vba.work/wp-content/uploads/2022/05/vba_check_odbcdriver_installed_002.png)
参考
上記のVBAコードで使用した以下の詳細は、公式サイトをご確認ください。
●Windows API「SQLGetInstalledDrivers関数」