AccessVBA の変更点
*Access VBA [#h72cd1c3]
#contents
**オブジェクトの参照方法 [#ece40a6e]
Forms!フォーム名
Reports!レポート名
**プロパティの参照方法 [#ea59bff0]
Forms!フォーム名.プロパティ名の英語表記
Reports!レポート名.プロパティ名の英語表記
Forms!フォーム名!コントロール名.プロパティ名の英語表記
Reports!レポート名!コントロール名.プロパティ名の英語表記
***プロパティの参照方法(例) [#rc61f59a]
[F_顧客登録]フォーム上にある[cmd実行]コントロールの[標題]プロパティを参照する。
Forms!F_顧客登録!cmd.実行.Caption
**主なプロパティ名 [#s2d760ec]
|プロパティ|英語表記|意味|
|標題|Caption|タイトルバーに表示する文字列。ラベルに表示する文字列|
|レコードソース|RecordSource|レコードのデータソース|
|コントロールソース|ControlSource|コントロールに表示するデータ|
|可視|Visible|コントロールに表示するかどうか|
|使用可能|Enabled|コントロールにフォーカスを移動できるかどうか|
|値集合タイプ|RowSourceType|コンボボックスまたはリストボックスに表示するデータの種類|
|値集合ソース|RowSource|コンボボックスまたはリストボックスに表示するデータ|
|ソースオブジェクト|SourceObject|サブフォームのソースになるオブジェクト|
**Meプロパティを利用する。 [#x6ff9a90]
参照するオブジェクトがプログラムを実行しているフォームまたはレポートの場合は
Forms!フォーム名 または Reports!レポート名
の代わりに
Me!フォーム名 または Me!レポート名
のように使用する事ができます。
**Option Explicit [#z22d41ca]
宣言していない変数を利用できないようにする命令
***Option Explicitを必ず追加するには [#s7e83322]
Visual Basic Editorで[ツール]⇒[オプション]⇒編集タブの「変数の宣言を強制する」にチェックしておくと、~
モジュールを作成した時に自動的にOption Explicitステートメントが追加されます。
**コントロールに値を代入する [#f1d7b0f2]
[F_顧客]フォームの[顧客ID]コントロールに「100」を代入する。
Forms!F_顧客!顧客ID = 100
[F_顧客]フォームの[顧客名]コントロールに「2008/02/14」を代入する。
Forms!F_顧客!顧客名 = #02/14/2008#
-日付の書式:シャープ(#)で囲んだ値は、日付または時刻データとして解釈されます。
書式 #月/日/年#
**四則演算 [#k6e4f5ba]
|演算子|意味|例|計算結果|
|+|たし算|10 + 3|13|
|-|ひき算|10 - 3|7|
|*|かけ算|10 * 3|30|
|/|わり算|10 / 3|3.33333.....|
|\|わり算の商|10 \ 3|3|
|Mod|わり算の余り|10 Mod 3|1|
|^|べき乗|10^ 3|1000|
**文字の連結 [#p8ce5801]
&演算子を利用すると文字を連結する事ができます。~
Forms!フォーム!あいさつコントロールには「こんにちは」が代入される。
Forms!フォーム!あいさつ = "こん" & "にちは"
**変数のデータ型 [#z18b1f24]
小数点を含まない値が&color(red){整数};小数点を含んだ値が&color(red){実数};
|データ型|表記|データの種類・値の範囲|
|ブール型|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|すべのデータの種類|
*制御構造 [#a4a2e4f2]
**If...Endifステートメント [#e0393c37]
書式
If 条件式 Then
実行する処理
EndIf
***If...Endifステートメント(例) [#y6cd2526]
Private Sub cmd確認_Click()
Dim intA As Integer
intA = Me!txtA
If intA >= 0 Then
MsgBox "正の数"
EndIf
End Sub
**If...Then...Elseステートメント [#fcb0c341]
書式
If 条件式 Then
Trueの時の処理
Else
Falseの時の処理
End If
***If...Then...Elseステートメント(例) [#jc164417]
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ステートメント [#y8b0dd16]
書式
If 条件式A Then
条件式AがTrueの処理
ElseIf 条件式B Then
条件式BがTrueの処理
ElseIf 条件式C Then
条件式CがTrueの処理
Else
条件式A・B・CがFlaseの時の処理
End If
**条件式のAndとOr [#w74164b6]
例
変数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 ステートメント [#f662c156]
書式
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 ステートメント(例) [#m9163984]
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ステートメント [#scf95b2c]
書式
For カウンタ = 初期値 to 最終値 [Step ステップ]
実行する処理
Next カウンタ
***For...Nextステートメント(例) [#z2a84613]
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ステートメント [#s1cbea4c]
書式(前判断)
Do {While | Until} 条件式
実行する処理
Loop
書式(後判断)
Do
実行する処理
Loop {While | Until} 条件式
***Do...Loopステートメント(例) [#fa8d3880]
MsgBoxで10から一つずつ減らしながら表示する。
Private Sub cmd前判断_Click()
Dim cnt As Integer
cnt = 10
Do While cnt > 0
MsgBox cnt
cnt = cnt -1
Loop
End Sub
**ループを途中で終了する処理 [#b75fb9d6]
Exit For
Exit Do
**マクロのアクションを実行する。 [#m125b56a]
書式
DoCmd.メソッド 引数1,引数2,引数3・・・・
[[AccessVBA/メソッド>AccessVBA/メソッド]]
*Visual Basicの組み込み関数を使用する。 [#u0cfff18]
書式
戻り値 = 関数(引数1,引数2,引数3・・・・・)
**MsgBox関数 [#p73d3ab8]
書式
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 :(省略可能)メッセージボックスのタイトルバーに出力する文字列
*プロシージャ [#t869d6b1]
「マウスがクリックされた」「キー入力」されたなどがイベント~
プロシージャはイベントが発生した時に、自動的に実行するプログラム
**ジェネラルプロシージャ [#v4d32e87]
-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
*変数の適応範囲 [#wc563b57]
**プロシージャレベル変数 [#sad23b45]
Dimステートメントを使って宣言した変数は、そのプロシージャ内だけで有効です。~
プロシージャを終了すると、変数が保持していた値は破棄されます。
-例~
下記の例ではプロシージャを実行する度にretの値が初期化さえます。~
その為、メッセージボックスは常に「1」です。
Private Sub cmd_Click()
Dim ret As Integer
ret = ret + 1
MsgBox ret
End Sub
**静的変数 [#wba5bb25]
Staticステートメントを使って宣言した変数は、そのモジュールを終了するまで有効です。
-例~
下記の例では変数retは、このフォームを閉じるまで有効です。~
その為、コマンドボタンをクリックする度に値が加算されます。
Private Sub cmd_Click()
Static ret As Integer
ret = ret + 1
MsgBox ret
End Sub
**モジュールレベル変数 [#rcb48fbb]
モジュールの宣言セクションで宣言した変数は、そのモジュールに含まれるすべてのプロシージャから利用する事ができます。~
宣言した変数はそのフォームを閉じるまで値が保持されます。
-例~
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
**パブリック変数 [#ra7e0504]
データベースに含まれるすべてのプロシージャから参照する事ができます。
-例~
フォーム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
*プロシージャの適応範囲 [#m07c13ee]
変数と同じように、プロシージャにも、それを利用できる範囲があります。
**Privateプロシージャ [#a700d614]
同じモジュールだけで利用できるプロシージャ
Private Sub Sample()
・
・
End Sub
**Publicプロシージャ [#w58e0cbf]
データベースに含まれるすべてのモジュールから利用できるプロシージャ
Public Sub Sample()
・
・
・
End Sub
**プロシージャを途中で終了する [#xd5740a6]
書式
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
*デバッグとエラー処理 [#xe140525]
**イミディエイトウィンドウ [#k2ac8f1c]
Visual Basic Editorで [表示] - [イミディエイトウィンドウ] を選択~
イミディエイトウィンドウとは、プログラムのデバッグを行うウィンドウです。~
プログラムを実行しているときに、変数の値を確認したり、作成したFunctionプロシージャを実行したりすることができます。
**イミディエイトウィンドウに値を出力する。 [#o35e9489]
書式
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
**イミディエイトウィンドウでプロシージャを実行する [#q1cd76fc]
-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行ずつ実行する。 [#k59fc141]
コードウィンドウで [F8]キーを押すと1行ずつ実行できます。
ブレークポイントを設定した状態で実行すると、ブレークポイントの直前までプログラムを実行した後、一時中断します。
**ローカルウィンドウ [#m46ef319]
ローカルウィンドウは、プログラム実行中の変数の値を表示するウィンドウです。
Visual Basic Editorで [表示] - [ローカルウィンドウ] 選択で表示できます。
**エラー処理の作り方 [#b476c25d]
-エラートラップ
On Error Goto ラベル
例
Public Sub フォーム開_Click()
On Error GoTo フォーム開_Err 'エラートラップ
DoCmd.OpenForm "顧客登録"
フォーム開_Exit: '正常終了処理
Exit Sub
フォーム開_Err: 'エラー処理
MsgBox Error$
Resume フォーム開_Exit
End Sub
**エラーの種類を調べる [#oa652c79]
書式
Err.Number
Err.Description
-例
MsgBox Err.Number & " : " & Err.Description
**エラー処理の後にプログラムを継続する [#n4bc0ba0]
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) [#w4cb5ee8]
ADOとDAOはどちらもVisual Basicでデータベースを操作する為のオブジェクトです。
**ADO(ActioveX Data Object) [#q4b51550]
OLE DBプロバイダを通して、AccessデータベースやSQL Server、Oracleなどいろいろなタイプのデータベースに接続するオブジェクトです。
[[AccessVBA/ADO]]
[[AccessVBA/ADOX]]
**DAO(Data Access Object) [#v9e04d60]
Microsoft Jetデータベースエンジンを経由してAccessデータベースに接続し、データベース操作を行う為のオブジェクトです。
[[AccessVBA/DAO]]
*SQLステートメントを使ったデータベース操作 [#r916041a]
SQLステートメントはデータベースを操作する為の言語です。~
特定の条件を満たすレコードだけを抽出できます。~
またたくさんのレコードを一度に編集することもできます。~
[[AccessVBA/SQLステートメントを使ったデータベース操作]]
*実例集 [#dcb21679]
[[AccessVBA/実例集]]
*参考サイト [#g6da0623]
[[http://www.feedsoft.net/access/>http://www.feedsoft.net/access/]]