Access VBA VBE画面でスニペットっぽくコーディングしてみる。

eyechatcholdVBA
SBMJOB

VBEでVSCodeみたいにインテリセンス使いたいですよね。そんな時はインテリセンスもどきで定型挿入を簡単にしてみましょう。

目次

スポンサーリンク

実装概要

標準モジュールに実行されないモジュールを作成しておき、そこにファンクションを宣言します。そのファンクションの中にDebug.printで雛形となるサンプルコードを記述し、それをCtrl+Spaceでリスト表示しインテリセンスっぽく使います。

設定手順

  • 標準モジュールにSnipetModuleという名前(任意のネーミング)でモジュール追加。
  • 下のプロシージャ群をコピーして貼り付ける。
Attribute VB_Name = "SnipetModule"
Option Compare Database
Option Explicit
Public Function sni_コメントヘッダ()
Debug.Print "'--------------------------------------------------------------"
Debug.Print "'コメント記述欄                                                "
Debug.Print "'機能をここに記述                                              "
Debug.Print "'--------------------------------------------------------------"
End Function
Public Function sni_Case()
Debug.Print "Dim i As Integer                                     "
Debug.Print " i = 2                                               "
Debug.Print " Select Case i                                       "
Debug.Print "     Case 1                                          "
Debug.Print "         MsgBox ""; iの値は1です。; ""                "
Debug.Print "     Case 2                                          "
Debug.Print "         MsgBox ""; iの値は2です。; ""                "
Debug.Print "     Case 3                                          "
Debug.Print "         MsgBox ""; iの値は3です。; ""                "
Debug.Print "     Case Else                                       "
Debug.Print "         MsgBox ""; iの値は1, 2, 3; 以外の値です。; """
Debug.Print " End Select                                          "
End Function
Public Function sni_For()
Debug.Print " Dim i As Integer                  "
Debug.Print " For i = 1 To 10 Step 2            "
Debug.Print " MsgBox i                          "
Debug.Print " Next i                            "
End Function
Public Function sni_DoWhile()
Debug.Print "Dim i As Integer           "
Debug.Print "i=1                        "
Debug.Print "Do While i < 100           "
Debug.Print "i = i + 1                  "
Debug.Print "Loop                       "
Debug.Print "Msgbox                     "
End Function
Public Function sni_DoUntil()
Debug.Print "    Dim i As Integer              "
Debug.Print "    i=1                           "
Debug.Print "'100を超えるまでループ 101で抜ける"
Debug.Print "   Do Until i > 100              "
Debug.Print "    i = i + 1                      "
Debug.Print "    Loop                          "
Debug.Print "    Msgbox i                      "
End Function
Public Function sni_SQL_UPDATE()
Debug.Print "Dim ct As New ADODB.Connection                                    "
Debug.Print "Dim stSQL As String                                               "
Debug.Print "                                                                  "
Debug.Print "Set ct = CurrentProject.Connection                                "
Debug.Print "stSQL = ""UPDATE テーブル1 set 中分類=""1"" WHERE 小分類=""3"""; ""
Debug.Print "ct.Execute stSQL                                                  "
Debug.Print "                                                                  "
Debug.Print "Set ct = Nothing                                                  "
End Function
Public Function sni_SQL_DELETE()
Debug.Print "Dim cn As ADODB.Connection             "
Debug.Print "Dim MYSQL As String                    "
Debug.Print "'接続                                  "
Debug.Print "Set cn = CurrentProject.Connection     "
Debug.Print "'削除                                  "
Debug.Print "MYSQL = ""Delete * FROM テーブル1;""   "
Debug.Print "cn.Execute MYSQL                       "
Debug.Print "'終了                                  "
Debug.Print "cn.Close: Set cn = Nothing             "
End Function
Public Function sni_SQL_SELECT典型的()
Debug.Print "Dim Cn As ADODB.Connection 'ADOコネクションオブジェクト              "
Debug.Print "Dim Rs As ADODB.Recordset 'ADOレコードセットオブジェクト             "
Debug.Print "Dim MySQL As String 'SQL文                                           "
Debug.Print "                                                                     "
Debug.Print "Set Cn = CurrentProject.Connection '現在のデータベースへ接続         "
Debug.Print "Set Rs = New ADODB.Recordset  'ADOレコードセットのインスタンス作成   "
Debug.Print "MySQL = ""SELECT * FROM テーブル名 WHERE 条件;"" 'SQL文作成            "
Debug.Print "Rs.Open MySQL, Cn 'レコード抽出                                      "
Debug.Print "                                                                     "
Debug.Print "If Rs.BOF = True And Rs.EOF = True Then '存在チェック                "
Debug.Print "   MsgBox (""レコードが存在しません"")'メッセージ                     "
Debug.Print "Else                                                                 "
Debug.Print "   Do Until Rs.EOF '抽出したレコードが終了するまで処理を繰り返す     "
Debug.Print "       Debug.Print Rs!フィールド名 'フィールドを取り出す             "
Debug.Print "       Rs.MoveNext '次のレコードに移動する                           "
Debug.Print "   Loop                                                              "
Debug.Print "End If                                                               "
Debug.Print "                                                                     "
Debug.Print "'閉じる                                                              "
Debug.Print "Rs.Close                                                             "
Debug.Print "Cn.Close                                                             "
Debug.Print "'オブジェクトの破棄                                                  "
Debug.Print "Set Rs = Nothing                                                     "
Debug.Print "Set Cn = Nothing                                                     "
End Function
Public Function sni_SQL_レコード処理エラー無し()
Debug.Print "Dim ct As New ADODB.Connection                            "
Debug.Print "Dim rs As New ADODB.Recordset                             "
Debug.Print "Dim stSQL As String                                       "
Debug.Print "                                                          "
Debug.Print "'select文の作成                                           "
Debug.Print "stSQL = ""SELECT * FROM テーブル1 WHERE 小分類=""""9"""";"""
Debug.Print "stSQL = stSQL & """" "
Debug.Print "                                                          "
Debug.Print "Set ct = CurrentProject.Connection                        "
Debug.Print "rs.CursorLocation = adUseClient                           "
Debug.Print "rs.Open stSQL, ct, adOpenDynamic, adLockOptimistic        "
Debug.Print "                                                          "
Debug.Print "If rs.EOF Or rs.BOF Then                                  "
Debug.Print "    '条件に合うレコードがない場合                         "
Debug.Print "Else                                                      "
Debug.Print "    '条件に合うレコードがある場合                         "
Debug.Print "     '先頭レコードに移動                                  "
Debug.Print "       rs.MoveFirst                                       "
Debug.Print "       While Not rs.EOF                                   "
Debug.Print "            MsgBox (rs.Fields(""本文""))                    "
Debug.Print "           '次のレコードに移動                            "
Debug.Print "          rs.MoveNext                                     "
Debug.Print "       Wend                                               "
Debug.Print "End If                                                    "
Debug.Print "                                                          "
Debug.Print "'レコードセットを変更する場合はコレ                       "
Debug.Print "'Set Me.Recordset = rs                                    "
Debug.Print "                                                          "
Debug.Print "Set rs = Nothing                                          "
Debug.Print "Set ct = Nothing                                          "
Debug.Print "                                                          "
Debug.Print "Me.Requery                                                "
End Function
Public Function sni_SQL_レコード処理エラー処理付き()
Debug.Print "Dim myCn     As ADODB.Connection    'ADOコネクションオブジェクト                        "
Debug.Print "Dim myRs     As ADODB.Recordset     'ADOレコードセットオブジェクト                      "
Debug.Print "Dim strSQL   As String              'SQL文用文字列                                      "
Debug.Print "                                                                                        "
Debug.Print "'エラートラップ                                                                         "
Debug.Print "On Error GoTo Err_Exit                                                                  "
Debug.Print "                                                                                        "
Debug.Print "'現在のデータベースへ接続                                                               "
Debug.Print "Set myCn = CurrentProject.Connection                                                    "
Debug.Print "                                                                                        "
Debug.Print "'ADOレコードセットのインスタンス作成                                                    "
Debug.Print "Set myRs = New ADODB.Recordset                                                          "
Debug.Print "                                                                                        "
Debug.Print "'SQL文作成(誕生月指定)                                                                "
Debug.Print "strSQL = ""SELECT * FROM 顧客テーブル WHERE 誕生月 = 3""                                  "
Debug.Print "                                                                                        "
Debug.Print "'レコードセット取得・・・(※1)                                                          "
Debug.Print "myRs.Open strSQL, myCn, , adLockOptimistic                                              "
Debug.Print "                                                                                        "
Debug.Print "With myRs                                                                               "
Debug.Print "    '対象データがなければ終了                                                           "
Debug.Print "    If .EOF Or .BOF Then                                                                "
Debug.Print "        MsgBox ""該当データがありません。処理を終了します。"", vbOKOnly + vbInformation   "
Debug.Print "        GoTo End_Proc                                                                   "
Debug.Print "    Else                                                                                "
Debug.Print "        '先頭レコードに移動                                                             "
Debug.Print "        .MoveFirst                                                                      "
Debug.Print "        While Not .EOF                                                                  "
Debug.Print "            'プレゼント発送日にシステム日付を代入                                       "
Debug.Print "            .Fields(""プレゼント発送日"") = Date                                          "
Debug.Print "            '更新実行                                                                   "
Debug.Print "            .Update                                                                     "
Debug.Print "            '次のレコードに移動                                                         "
Debug.Print "            .MoveNext                                                                   "
Debug.Print "        Wend                                                                            "
Debug.Print "    End If                                                                              "
Debug.Print "End With                                                                                "
Debug.Print "MsgBox ""処理を終了しました。"", vbOKOnly + vbInformation                               "
Debug.Print "'********                                                                               "
Debug.Print "End_Proc:                                                                               "
Debug.Print "    'オブジェクトの開放                                                                 "
Debug.Print "    Set myRs = Nothing: Close                                                           "
Debug.Print "    Set myCn = Nothing: Close                                                           "
Debug.Print "                                                                                        "
Debug.Print "    Exit Function                                                                       "
Debug.Print "                                                                                        "
Debug.Print "Err_Exit:                                                                               "
Debug.Print "    'エラーNOとエラーの詳細を表示                                                       "
Debug.Print "    MsgBox Err.Number & "":"" & Err.Description, vbOKOnly + vbCritical, ""ADO接続()""   "
Debug.Print "    'オブジェクトの開放                                                                 "
Debug.Print "    Set myRs = Nothing: Close                                                           "
Debug.Print "    Set myCn = Nothing: Close                                                           "
End Function

標準モジュールにSnipetModuleって名前でモジュール追加して、下のプロシージャを記述しておく。VBEのイミディエイト画面で「sni」と入力してCtrl+Spaceで選択できるので、まぁスニペットっぽく使えるかな?

使い方

スニペット使い方画像

VBEで使いたい場所で「sni」と入力してCtrl+Spaceでイミディエイトウィンドウから選択する。その時に必要に応じてパラメータや変数、処理自体を変更する。

設定した内容の受け渡し

VBAでの開発は個人のスキルにばらつきがあるのでこの様なやり方で標準化できるとテスト工程も楽に意識共有できますね。bas形式で設定モジュールを出力して開発チームで共有しましょう。

受け渡しじはbas拡張子

スポンサーリンク

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

システム開発SE・アプリ開発・デバッガー等々なんでもやる猫の下僕です。現在は凶暴猫にカタカタ動く手を狙われながらキーボードを打っています。かなりゆるい性格なのでコメントやメッセージお気軽に〜お仕事のご依頼もお気軽にぃ〜

スポンサーリンク

コメント

コメントする

CAPTCHA


目次