ExcelVBAでAccessに接続するため、以下のようなクラスを作ります。
vba
1Const strFilePath = "C:hoge.accdb" 2 3Dim adoCn As Object 4Dim adoRs As Object 5 6Private Sub Class_Initialize() 7 Set adoCn = CreateObject("ADODB.Connection"): adoCn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFilePath & ";" 8 Set adoRs = CreateObject("ADODB.Recordset") 9End Sub 10 11Public Function strTarget(Syain_ID As String, System_Name As String) 12 13 Dim strSQL As String 14 strSQL = "SELECT Target FROM テーブル1 WHERE Syain_ID = '" & Syain_ID & "' AND System_Name = '" & System_Name & "'" 15 16 adoRs.Open strSQL, adoCn 17 18 If Not adoRs.EOF Then 19 strTarget = adoRs!Target 20 Else 21 Err.Raise 1234, , "社員番号:" & Syain_ID & vbCrLf & "システム名:" & System_Name & vbCrLf & "以上を満たすレコードが見つかりません" '←これが起こった場合 22 End If 23 24End Function 25 26Private Sub Class_Terminate() 27 adoRs.Close: Set adoRs = Nothing 28 adoCn.Close: Set adoCn = Nothing 29End Sub
その後、標準モジュールで以下のコードを書きます。
vba
1Sub main() 2 With New Class1 3 MsgBox .strTarget("1234567", "System") 4 End With 5End Sub
AccessにSQLを投げ、0件の場合その時点でErr.Raiseをしたいのですが、この場合Class_Terminateに書かれたClose処理は行われるでしょうか。
また、もしClose処理が行われる前にマクロが終了した際の悪影響についてもご教授ください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/06 00:40