AccessVBA
Access VBA †
オブジェクトの参照方法 †
Forms!フォーム名 Reports!レポート名
プロパティの参照方法 †
Forms!フォーム名.プロパティ名の英語表記 Reports!レポート名.プロパティ名の英語表記
Forms!フォーム名!コントロール名.プロパティ名の英語表記 Reports!レポート名!コントロール名.プロパティ名の英語表記
プロパティの参照方法(例) †
[F_顧客登録]フォーム上にある[cmd実行]コントロールの[標題]プロパティを参照する。
Forms!F_顧客登録!cmd.実行.Caption
主なプロパティ名 †
プロパティ | 英語表記 | 意味 |
標題 | Caption | タイトルバーに表示する文字列。ラベルに表示する文字列 |
レコードソース | RecordSource | レコードのデータソース |
コントロールソース | ControlSource | コントロールに表示するデータ |
可視 | Visible | コントロールに表示するかどうか |
使用可能 | Enabled | コントロールにフォーカスを移動できるかどうか |
値集合タイプ | RowSourceType | コンボボックスまたはリストボックスに表示するデータの種類 |
値集合ソース | RowSource | コンボボックスまたはリストボックスに表示するデータ |
ソースオブジェクト | SourceObject | サブフォームのソースになるオブジェクト |
Meプロパティを利用する。 †
参照するオブジェクトがプログラムを実行しているフォームまたはレポートの場合は
Forms!フォーム名 または Reports!レポート名 の代わりに Me!フォーム名 または Me!レポート名
のように使用する事ができます。
Option Explicit †
宣言していない変数を利用できないようにする命令
Option Explicitを必ず追加するには †
Visual Basic Editorで[ツール]⇒[オプション]⇒編集タブの「変数の宣言を強制する」にチェックしておくと、
モジュールを作成した時に自動的にOption Explicitステートメントが追加されます。
コントロールに値を代入する †
[F_顧客]フォームの[顧客ID]コントロールに「100」を代入する。
Forms!F_顧客!顧客ID = 100
[F_顧客]フォームの[顧客名]コントロールに「2008/02/14」を代入する。
Forms!F_顧客!顧客名 = #02/14/2008#
- 日付の書式:シャープ(#)で囲んだ値は、日付または時刻データとして解釈されます。
書式 #月/日/年#
四則演算 †
演算子 | 意味 | 例 | 計算結果 |
+ | たし算 | 10 + 3 | 13 |
- | ひき算 | 10 - 3 | 7 |
* | かけ算 | 10 * 3 | 30 |
/ | わり算 | 10 / 3 | 3.33333..... |
\ | わり算の商 | 10 \ 3 | 3 |
Mod | わり算の余り | 10 Mod 3 | 1 |
^ | べき乗 | 10^ 3 | 1000 |
文字の連結 †
&演算子を利用すると文字を連結する事ができます。
Forms!フォーム!あいさつコントロールには「こんにちは」が代入される。
Forms!フォーム!あいさつ = "こん" & "にちは"
変数のデータ型 †
小数点を含まない値が整数小数点を含んだ値が実数
データ型 | 表記 | データの種類・値の範囲 |
ブール型 | Boolean | TureまたはFalse |
バイト型 | Byte | 整数(0〜255) |
整数型 | Integer | 整数(-32768〜32767) |
長整数型 | Long | 整数(-2147483648〜2147483647) |
単精度浮動小数点数型 | Single | 実数(-3.402826E38〜-1.401298E-45) |
実数(1.401298E-45〜3.402823E38) | ||
倍精度浮動小数点数型 | Double | 実数(-1.79769313486231E308〜-4.9406564584124E-324) |
実数(4.94065645841247E-324〜1.79769313486232E308) | ||
通貨型 | Currency | 通貨(-922337203685477.5808〜922337203685477.5807) |
日付型 | Date | 日付(西暦100年1月1日〜西暦9999年12月31日) |
文字列型 | String | 文字 |
バリアント型 | Variant | すべのデータの種類 |
制御構造 †
If...Endifステートメント †
書式
If 条件式 Then 実行する処理 EndIf
If...Endifステートメント(例) †
Private Sub cmd確認_Click() Dim intA As Integer intA = Me!txtA If intA >= 0 Then MsgBox "正の数" EndIf End Sub
If...Then...Elseステートメント †
書式
If 条件式 Then Trueの時の処理 Else Falseの時の処理 End If
If...Then...Elseステートメント(例) †
Private Sub cmd確認_Click() Dim intA As Integer intA = Me!txtA If intA >= 0 Then MsgBox "正の数" Else MsgBox "負の数" End If End Sub
If...Then...ElseIfステートメント †
書式
If 条件式A Then 条件式AがTrueの処理 ElseIf 条件式B Then 条件式BがTrueの処理 ElseIf 条件式C Then 条件式CがTrueの処理 Else 条件式A・B・CがFlaseの時の処理 End If
条件式のAndとOr †
例
変数Aの値が100〜200の場合True、それ以外はFalse If (A >= 100) And (A <= 200) Then 変数Aの値が100もしくは200の場合True、それ以外はFalse If (A = 100) Or (A = 200) Then
Select Case ステートメント †
書式
Select Case 変数A Case 定数1 : 変数Aの値が定数1と等しい時の処理 Case 定数2 : 変数Aの値が定数2と等しい時の処理 Case 定数3 変数Aの値が定数3と等しい時の処理 Case Else 変数Aの値が上記以外の時の処理 End Select
- Caseの書き方
- 値を複数指定する。
Select Case A Case ,2,3,
- 値を複数指定する。
- 範囲を指定する(1から10まで)
Select Case A Case 1 To 10
- 範囲を指定する(AからFまで)
Select Case A Case A To F
Select Case ステートメント(例) †
Private Sub cmd計算_Click() Dim sngAns As Single Select Case Me!txt演算 Case "+","+" : sngAns = 10 + 3 Case "-" : sngAng = 10 - 3 Case "*","*" : sngAng = 10 * 3 Case "/","/" : sngAng = 10 / 3 Case "\","¥" : sngAng = 10 \ 3 Case "Mod" :sngAng = 10 Mod 3 Case "^" : sngAng = 10 ^ 3 Case Else Beep MsgBox "演算子が間違っています" End Select End Sub
For...Nextステートメント †
書式
For カウンタ = 初期値 to 最終値 [Step ステップ] 実行する処理 Next カウンタ
For...Nextステートメント(例) †
MsgBoxで0から9まで表示する。
Private Sub cmdカウンタ_Click() Dim i As Integer For i = 0 To 9 MsgBox i Next i End Sub
MsgBoxで0,2,4,6,8と表示する。
Private Sub cmdカウンタ_Click() Dim i As Integer For i = 0 To 9 Step 2 MsgBox i Next i End Sub
Do...Loopステートメント †
書式(前判断)
Do {While | Until} 条件式 実行する処理 Loop
書式(後判断)
Do 実行する処理 Loop {While | Until} 条件式
Do...Loopステートメント(例) †
MsgBoxで10から一つずつ減らしながら表示する。
Private Sub cmd前判断_Click() Dim cnt As Integer cnt = 10 Do While cnt > 0 MsgBox cnt cnt = cnt -1 Loop End Sub
ループを途中で終了する処理 †
Exit For Exit Do
マクロのアクションを実行する。 †
書式
DoCmd.メソッド 引数1,引数2,引数3・・・・
AccessVBA/メソッド?
Visual Basicの組み込み関数を使用する。 †
書式
戻り値 = 関数(引数1,引数2,引数3・・・・・)
MsgBox関数 †
書式
retvalue = MsgBox(prompt [, buttons] [,title] retvalue : 戻り値(Integer型). 選択したボタンを表す定数 [OK]ボタン :1 vbOK [キャンセル]ボタン :2 vbCancel [中止]ボタン :3 vbAbout [再試行]ボタン :4 vbRetry [無視]ボタン :5 vblgnore [はい]ボタン :6 vbYes [いいえ]ボタン :7 vbNo prompt :メッセージボックスに表示する文字列 buttons :(省略可能)ボタンとアイコンの種類 -ボタンの種類と個数 vbOkOnly 0 [OK] vbOkCancel 1 [OK][キャンセル] vbAbourtRetrylgnore 2 [中止][再試行][無視] vbYesNoCancel 3 [はい][いいえ][キャンセル] vbYesNo 4 [はい][いいえ] vbRetryCancel 5 [再試行][キャンセル] -アイコンの種類 vmCritical 16 警告[X] vbQuestion 32 問い合わせ[?] vbExclamation 48 注意[!] vbInfomation 64 情報[i] -デフォルトボタン vbDefaultButton1 0 第1ボタン vbDefaultButton1 256 第2ボタン vbDefaultButton1 512 第3ボタン title :(省略可能)メッセージボックスのタイトルバーに出力する文字列
プロシージャ †
「マウスがクリックされた」「キー入力」されたなどがイベント
プロシージャはイベントが発生した時に、自動的に実行するプログラム
ジェネラルプロシージャ †
- Subプロシージャ
そこに記述した処理を実行するだけ。処理の結果を返さないプロシージャ
- 書式
[Call] Subプロシージャ名[(引数1,引数2,引数3・・・)]
- 例
cmdSubをクリックして、SubプロシージャCalcを実行する。
Private Sub Calc() MsgBox Me!txt! End Sub Pribate Sub cmdSub_Click() Call Calc End Sub
- Functionプロシージャ
組み込み関数のように、処理の結果を返すプロシージャをFunctionプロシージャと呼びます。
※Functiionプロシージャには必ず戻り値のデータ型の宣言が必要です。
- 書式
戻り値 = Functionプロシージャ名[(引数1,引数2,引数3・・・)]
- 例
cmdFuncをクリックして、FunctionプロシージャCalcの戻り値を表示。
Private Function Calc() As Integer Dim intA As Integer Dim ans As Integer intA = CInt(Me!txtA) ans = intA * 2 Calc = ans End Function Private Sub cmdFunc_Click() Dim ret As Integer ret = Calc() MsgBox ret End Sub
- 引数の受け渡し
cmdFuncをクリックして、Function Calcに引数を渡し戻り値を受け取る。Private Function Calc(A As Integer, B As Integer) As Integer Dim ans As Integer ans = A * B Calc = ans End Function Private Sub cmdFunc_Click() Dim ret As Integer ret = Calc(10, 5) MsgBox ret End Sub
変数の適応範囲 †
プロシージャレベル変数 †
Dimステートメントを使って宣言した変数は、そのプロシージャ内だけで有効です。
プロシージャを終了すると、変数が保持していた値は破棄されます。
- 例
下記の例ではプロシージャを実行する度にretの値が初期化さえます。
その為、メッセージボックスは常に「1」です。Private Sub cmd_Click() Dim ret As Integer ret = ret + 1 MsgBox ret End Sub
静的変数 †
Staticステートメントを使って宣言した変数は、そのモジュールを終了するまで有効です。
- 例
下記の例では変数retは、このフォームを閉じるまで有効です。
その為、コマンドボタンをクリックする度に値が加算されます。Private Sub cmd_Click() Static ret As Integer ret = ret + 1 MsgBox ret End Sub
モジュールレベル変数 †
モジュールの宣言セクションで宣言した変数は、そのモジュールに含まれるすべてのプロシージャから利用する事ができます。
宣言した変数はそのフォームを閉じるまで値が保持されます。
- 例
cmdとcmd2のどちらのボタンをクリックしても変数の値が増えていきます。Option Compare Database Private ret As Integer Private Sub cmd_Click() ret = ret + 1 MsgBox ret End Sub Private Sub cmd2_Click() ret = ret + 1 MsgBox ret End Sub
パブリック変数 †
データベースに含まれるすべてのプロシージャから参照する事ができます。
- 例
フォーム1のcmdとフォーム2のcmdどちらをクリックしても値が増えていきます。'フォーム1 Option Compare Database Public ret As Integer Private Sub cmd_Click() ret = ret + 1 MsgBox ret End Sub 'フォーム2 Private Sub cmd_Click() ret = ret + 1 MsgBox ret End Sub
プロシージャの適応範囲 †
変数と同じように、プロシージャにも、それを利用できる範囲があります。
Privateプロシージャ †
同じモジュールだけで利用できるプロシージャ
Private Sub Sample() ・ ・ End Sub
Publicプロシージャ †
データベースに含まれるすべてのモジュールから利用できるプロシージャ
Public Sub Sample() ・ ・ ・ End Sub
プロシージャを途中で終了する †
書式
Exit Subステートメント Exit Functionステートメント
- 例
cmdクリック時にテキストtxtAの値がNullだった場合、「数値を入力してください」を表示。
値が入っていれば、2倍して表示。Private Sub cmd_Click() Dim intA As Integer If IsNull(Me!txtA) Then Beep MsgBox "数値を入力してください" Exit Sub End If intA = CInt(Me!txtA) ret = intA * 2 MsgBox ret End Sub
デバッグとエラー処理 †
イミディエイトウィンドウ †
Visual Basic Editorで [表示] - [イミディエイトウィンドウ] を選択
イミディエイトウィンドウとは、プログラムのデバッグを行うウィンドウです。
プログラムを実行しているときに、変数の値を確認したり、作成したFunctionプロシージャを実行したりすることができます。
イミディエイトウィンドウに値を出力する。 †
書式
Debug.Print 変数1,変数2,変数3・・・・
- 例
Private Sub cmd2_Click() Dim i As Integer For i = 0 To 9 Debug.Print i & "です。" Next i Beep End Sub
イミディエイトウィンドウでプロシージャを実行する †
- Visual Basicの組み込み関数、Functionプロシージャを実行する。
?関数名(引数1,引数2,引数3・・・)
- 例
?Time() 午前 12:00:00
- 例
- Functionプロシージャを実行する場合
?モジュール名.プロシージャ名(引数1,引数2,引数3・・・)
- [計算フォーム]フォームのクラスモジュールに作成したCalcプロシージャを実行する
?Form_計算フォーム.Calc()
- マクロのアクションを実行する。
計算フォームを開くDoCmd.OpenForm "計算フォーム"
- Subプロシージャを実行する
イミディエイトウィンドウで実行できるのは、標準モジュールにPublicプロシージャとして作成したSubプロシージャだけです。Sample(10,2)
プログラムを1行ずつ実行する。 †
コードウィンドウで [F8]キーを押すと1行ずつ実行できます。
ブレークポイントを設定した状態で実行すると、ブレークポイントの直前までプログラムを実行した後、一時中断します。
ローカルウィンドウ †
ローカルウィンドウは、プログラム実行中の変数の値を表示するウィンドウです。
Visual Basic Editorで [表示] - [ローカルウィンドウ] 選択で表示できます。
エラー処理の作り方 †
- エラートラップ
On Error Goto ラベル
例
Public Sub フォーム開_Click() On Error GoTo フォーム開_Err 'エラートラップ DoCmd.OpenForm "顧客登録" フォーム開_Exit: '正常終了処理 Exit Sub フォーム開_Err: 'エラー処理 MsgBox Error$ Resume フォーム開_Exit End Sub
エラーの種類を調べる †
書式
Err.Number Err.Description
- 例
MsgBox Err.Number & " : " & Err.Description
エラー処理の後にプログラムを継続する †
Resumeステートメントは、指定した位置にプロシージャの制御を移動する処理を行います
エラーが発生した次の行から再度プロシージャを継続するには以下の書式を利用する。
書式
Resume Next
- 例
Public Sub フォーム開_Click() On Error GoTo フォーム開_Err DoCmd.OpenForm "顧客登録" フォーム開_Exit: Exit Sub フォーム開_Err: MsgBox Err.Number & " : " & Err.Description Resume Next End Sub
ADO(ActioveX Data Object)、DAO(Data Access Object) †
ADOとDAOはどちらもVisual Basicでデータベースを操作する為のオブジェクトです。
ADO(ActioveX Data Object) †
OLE DBプロバイダを通して、AccessデータベースやSQL Server、Oracleなどいろいろなタイプのデータベースに接続するオブジェクトです。
DAO(Data Access Object) †
Microsoft Jetデータベースエンジンを経由してAccessデータベースに接続し、データベース操作を行う為のオブジェクトです。 AccessVBA/DAO
SQLステートメントを使ったデータベース操作 †
SQLステートメントはデータベースを操作する為の言語です。
特定の条件を満たすレコードだけを抽出できます。
またたくさんのレコードを一度に編集することもできます。
AccessVBA/SQLステートメントを使ったデータベース操作