VBA ADO Connection Open時のエラー処理する方法 -Excel

VBAのADODB.ConnectionでOpen時のエラー処理する方法です。

VBA ADO Connection Open時のエラー処理する方法 -Excel

以前「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オブジェクト数を取得します。

エラーがあった場合には

  1. Error.Descriptionプロパティでエラーメッセージを取得
  2. Error.SQLStateプロパティでSQLSTATEを取得
  3. Error.ClearメソッドでErrorオブジェクトを削除

の処理をおこない、なかった場合には

  1. Err.Descriptionプロパティでエラーメッセージを取得
  2. Err.ClearメソッドでErrオブジェクトを削除

の処理をおこないます。

エラーメッセージをメッセージボックスへ表示したら接続オブジェクトを破棄しておしまいです。

まとめ

ADOを使用してOpen時にエラーが発生した場合の処理方法について紹介しました。

社内で使うExcel VBAだと、こういったエラー処理って書かないケースが多いのかもだけど、きっちりエラー処理書いてあると、プロっぽいコードに見えるし、万が一エラーが出た場合の切り分けにも使えるんで、ぜひ書いてほしいですね。

おつかれさまでした。

この記事がお役に立ちましたら シェア をお願いいたします。