VBA ADO Connection Open時のエラー処理する方法 -Excel
VBAのADODB.ConnectionでOpen時のエラー処理する方法です。
以前「VBA Oracleへ接続してselect文を実行する方法」で「ADODB.Connection」オブジェクトを使用したOracle接続方法を紹介しました。
今回は ADOを使用してOpen時にエラーが発生した場合の処理方法 について紹介します。
ADOを使用して接続時にエラーが発生した場合、ErrorオブジェクトにSQLSTATEやエラーメッセージなどが格納されます。これらの情報を取得・表示することで、原因調査へ役立てることができます。
エラー処理
On Errorステートメントを使用してエラー処理をおこないます。
具体的なコードは下記の通りです。
'**
'* Oracle接続時のエラー処理
'**
Sub OracleConnection()
On Error GoTo ErrOraConnect
Dim i As Long
Dim ErrCnt As Long
Dim ErrMsg As String
' Oracle接続先情報
Const Provider = "OraOLEDB.Oracle"
Const DataSource = "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=サーバ名)(PORT=ポート番号))(CONNECT_DATA=(SERVICE_NAME=サービス名)))"
Const UserId = "scott"
Const Password = "tiger"
' インスタンス作成
Dim cn As Object
Set cn = CreateObject("ADODB.Connection")
' Oracle接続
cn.ConnectionString = _
"Provider=" & Provider & ";" & _
"Data Source=" & DataSource & ";" & _
"User Id=" & UserId & ";" & _
"Password=" & Password & ";"
cn.Open
' Oracle接続解除
cn.Close
Set cn = Nothing
Exit Sub
ErrOraConnect:
ErrCnt = cn.Errors.Count
If ErrCnt > 0 Then
For i = 0 To ErrCnt - 1
ErrMsg = cn.Errors(i).Description & vbCrLf & " SQLSTATE: " & cn.Errors(i).SqlState & vbCrLf
Next
cn.Errors.Clear
Else
ErrMsg = Err.Description
Err.Clear
End If
MsgBox ErrMsg, vbCritical, "Oracle接続エラー"
Set cn = Nothing
End Sub
コードの説明です。
まず、Errors.Countプロパティで、Errorオブジェクト数を取得します。
エラーがあった場合には
- Error.Descriptionプロパティでエラーメッセージを取得
- Error.SQLStateプロパティでSQLSTATEを取得
- Error.ClearメソッドでErrorオブジェクトを削除
の処理をおこない、なかった場合には
- Err.Descriptionプロパティでエラーメッセージを取得
- Err.ClearメソッドでErrオブジェクトを削除
の処理をおこないます。
エラーメッセージをメッセージボックスへ表示したら接続オブジェクトを破棄しておしまいです。
まとめ
ADOを使用してOpen時にエラーが発生した場合の処理方法について紹介しました。
社内で使うExcel VBAだと、こういったエラー処理って書かないケースが多いのかもだけど、きっちりエラー処理書いてあると、プロっぽいコードに見えるし、万が一エラーが出た場合の切り分けにも使えるんで、ぜひ書いてほしいですね。
おつかれさまでした。