ACCESS AutoExecで起動時にマクロを自動実行する方法
ACCESSの起動時に処理を自動実行したいときがあると思います。
そんな時に便利なのがAutoExecです。
今回は、AutoExecでACCESS起動時にマクロを自動実行する方法をご紹介します。
こんにちは。
はこにわガジェット (@hakoniwagadget) です。
ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは使いこなすために少しスキルが必要なものの、うまく活用すればExcelよりも業務の効率化が図れます。
この記事ではACCESSの基本的な使い方をご紹介していきます。
AutoExecで自動実行
ACCESSではマクロを作成することが可能です。
マクロは、フォームのボタンのクリック時イベントなどに設定して実行することがほとんどですが、ACCESSの起動時に自動実行させることも可能です。
それは、マクロの名前をAutoExecにするだけで実現できます。
例として以下のマクロを作成しました。
顧客検索フォームを開くだけのシンプルなマクロです。
名前をautoexecにしてあります。
このマクロを作成した状態でACCESSSを再起動してみましょう。
このように、AutoExecマクロが自動実行され、指定したフォームが開くことが確認できます。
マクロの名前を変えるだけで実行できるので簡単ですね。
起動時にVBAを自動実行
上記の例では起動時にフォームを開きましたが、フォームを開くだけであればAutoExecを利用せずにACCESSの標準機能だけでも実現可能です。
詳しくは下記の記事をご覧ください。
むしろ、AutoExecを利用するのはACCESS起動時にフォーム表示以外のより複雑な処理を実行する場合でしょう。
例えば、当日の日付を元にデータの追加、削除をするなどの処理が考えられます。
こうした処理はVBAで実行することがほとんどですので、AutoExecでVBAのプロシージャを実行する方法をご紹介します。
マクロの処理で「プロシージャの実行」を選択し、プロシージャ名に起動したいプロシージャの名前を記入しましょう。
上記の例では、nengetsu_koushinというプロシージャをACCESS起動時に実行するようにしています。
nengetsu_koushinプロシージャの内容は以下となっています。
'■■■TRN_年月テーブルを自動的に最新化■■■
Public Sub nengetsu_koushin()
Dim max_nengetsu As String
Dim max_nendo As String
max_nengetsu = DMax("年月", "TRN_年月")
'今日の年月とTRN_年月の最新年月が同じかチェック
If Format(Date, "yyyy/mm") = max_nengetsu Then
'同じなら終了
Exit Sub
'違っていた場合
Else
'変数にADOオブジェクトを代入
Set cnn = CreateObject("ADODB.Connection")
cnn.Open = CurrentProject.Connection
Set rst1 = CreateObject("ADODB.Recordset")
rst1.CursorLocation = adUseClient
'レコードセットを取得
rst1.Open "TRN_年月", cnn, adOpenKeyset, adLockOptimistic
'トランザクション処理開始
cnn.Execute "begin transaction;"
Debug.Print "処理前:" & max_nengetsu & ":" & max_nendo
Do Until max_nengetsu = Format(Date, "yyyy/mm")
Debug.Print "判別式:" & Right(max_nengetsu, 2)
Select Case Right(max_nengetsu, 2)
Case Is <= "02"
Debug.Print "case1"
max_nengetsu = Left(max_nengetsu, 4) & "/0" & LTrim(Str(Val(Right(max_nengetsu, 2)) + 1))
max_nendo = LTrim(Str(Val(Left(max_nengetsu, 4) - 1)))
Case "09" To "11"
Debug.Print "case2"
max_nengetsu = Left(max_nengetsu, 4) & "/" & LTrim(Str(Val(Right(max_nengetsu, 2)) + 1))
max_nendo = Left(max_nengetsu, 4)
Case "12"
Debug.Print "case3"
max_nengetsu = LTrim(Str(Val(Left(max_nengetsu, 4)) + 1)) & "/01"
max_nendo = LTrim(Str(Val(Left(max_nengetsu, 4) - 1)))
Case Else
Debug.Print "case4"
max_nengetsu = Left(max_nengetsu, 4) & "/0" & LTrim(Str(Val(Right(max_nengetsu, 2)) + 1))
max_nendo = Left(max_nengetsu, 4)
End Select
Debug.Print "処理後:" & max_nengetsu & ":" & max_nendo
rst1.AddNew
rst1!年月 = max_nengetsu
rst1!年度 = max_nendo
rst1.Update
Loop
'コミット
cnn.Execute "commit transaction;"
'終了処理
rst1.Close: Set rst1 = Nothing
cnn.Close: Set cnn = Nothing
End If
End Sub
TRN_年月テーブルに現在の月のレコードがなければ追加する、という処理です。
こうした、起動するたびにチェックを行って処理をするタイプのプロシージャはAutoExecで自動実行させるとよいでしょう。
以上、AutoExecで起動時にマクロを自動実行する方法をご紹介しました。
ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。
そんな時は、ACCESS開発歴20年以上、過去に100以上のACCESSデータベースを開発してきた私(@hakoniwagadget)にお任せください。
ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。
最後までお読みいただき、ありがとうございました。