-
プロジェクトとはDBファイルに保存されているモジュールをまとめて管理するもの。
3種類のモジュールがある
・Microsoft office Access クラスオブジェクト
(フォームモジュール、レポートモジュール)
・標準モジュール
・クラスモジュール -
モジュールとはプロシージャを記述・格納するためのオブジェクト
・フォームモジュール、レポートモジュール
・標準モジュール
・クラスモジュール
-
プロシージャとはプログラムを構成する最小単位
プログラムとは、コンピュータを演算する処理を行わせる手続き全般で、プロシージャはそれらの処理に対する命令を手順としてまとめたもの -
オブジェクトとはVBAにおける処理の対象となるアプリケーションの構成要素を指す
-
プロパティとはオブジェクトが持つ属性
例:フォームオブジェクトの場合
配置する位置やサイズ、背景色などがプロパティにあたる -
メソッドとはオブジェクトが行うことができる動作
メソッドには「引数」と呼ばれる、どのように動作を行うかを指定する値がある -
演算子とは・算術演算子
・比較演算子
・文字列連結演算子
・論理演算子
・代入演算子 -
算術演算子+、ー、*、/、Mod、¥、^
-
比較演算子=、<、<=、>、>=、<>、Is、Like
-
文字列連結演算子&、+
-
論理演算子And、Or、Not、Xor、Eqv、Imp
-
代入演算子=
-
キーワードとはVBAにとって特別な意味を持つ文字列
ステートメント名、関数名、演算子などがあり、キーワードと同じ文字列をプロシージャ名や変数名に用いることはできない -
テーブルの正規化複数のテーブルにデータを分割し、お互いが連携しながらDBのデータを活用する
・繰り返し項目を削除することでDBサイズが小さくなる
・各テーブルの目的が明確になる
・データ管理が容易になる
第1正規化から第3正規化まである -
第1正規化繰り返し項目を無くす
-
第2正規化主キーの一部によって決まる項目を他テーブルに分離する
-
第3正規化主キー以外の項目によって決まる項目を含むテーブルを他のテーブルに分離する
-
結合の種類・内部結合
2つのテーブルに共通する値のみ表示する
・左外部結合
左側のテーブルの全てと右側のテーブルで共通する値のレコードを表示する
・右外部結合
右側のテーブルの全てと左側のテーブルで共通する値のレコードを表示する -
静的変数とはプロシージャレベル変数でプロシージャ終了後も値を保持したいときに使用する宣言
Staticステートメント -
オブジェクト変数の宣言・固有オブジェクト型
例)
・Dim オブジェクト変数 As Form
・Dim オブジェクト変数 As Label
・Dim オブジェクト変数 As TextBox
・総称オブジェクト型
例)
・Dim オブジェクト変数 As Object
固有オブジェクトで宣言した方がエラーの発見をしやすく、少しだけ実行速度が速い -
キャリッジリターン文字vbCr
chr(10) -
ラインフィード文字vbLf
chr(13) -
改行文字vbCrLf
vbNewLine
chr(10) &chr(13)
-
For…Nextの構文For 変数=初期値 To 最終値 (Step 加算値)
繰り返し実行する処理
Next 変数 -
Do…Loopの構文(実行前判断)Do(While又はUntile) 条件式
繰り返し実行する処理
Loop
-
Do…Loopの構文(実行後判断)Do
繰り返し実行する処理
Loop(While又はUntile) 条件式 -
Whileキーワード条件を満たしている間
-
Untilキーワード条件を満たすまで
-
ループの実行前判断と実行後判断の違い条件を満たしていないとき、実行前判断では一度もループ処理を実行しない
実行後判断では必ず一度ループ内の処理を実行する -
For Each…Nextの構文For Each 要素変数 In 配列またはコレクション
繰り返し実行する処理
Next 要素変数 -
For Eachの例(全テキストボックスを消去)Dim MyControl As Object
For Each MyControl In Me.Controls
If Mycontrol.ControlType = acTextBox then
MyControl.Value=""
End if
Next MyControl
-
For Eachで使用する要素変数のデータ型配列の場合はバリアント型
コレクションの場合はバリアント型かオブジェクト型 -
コレクションとはAccessが持っているオブジェクトの集合体
例えば「Forms」というコレクションは、現在開いているフォーム全てに対して一括処理すいることができる -
コレクション「Reports」現在開いているすべてのレポート
-
コレクション「Printers」システムで使用可能なすべてのプリンタ
-
コレクション「Me.Controls」フォーム、レポート上のすべてのコントロール
-
コレクション「CurrentProject.AllForms」DB内にあるすべてのフォーム
-
コレクション「CurrentProject.AllReports」DB内にあるすべてのレポート
-
Exitステートメント処理を抜け出すことができる
・Exit Do
・Exit For
・Exit Sub
・Exit Function -
特殊なクエリ(SQLクエリ)・ユニオンクエリ
・パススルークエリ
・データ定義クエリ -
宣言セクションとはモジュールの先頭から最初のプロシージャを記述するまでの領域。
この領域に宣言した変数は、パブリック変数またはモジュールレベル変数となる -
変数を宣言するステートメント種類・Public
・Private
・Dim -
パブリック変数ステートメント:Public
宣言場所:標準モジュールの宣言セクション
適用範囲:全てのモジュール全てのプロシージャ
-
モジュールレベル変数ステートメント:Dim又はPrivate
宣言場所:宣言セクション
適用範囲:宣言されたモジュール内の全てのプロシージャ -
プロシージャレベル変数ステートメント:Dim
宣言場所:プロシージャ内
適用範囲:宣言されたプロシージャ内からのみ -
パブリック定数ステートメント:Public Const
宣言場所:標準モジュールの宣言セクション
適用範囲:全てのモジュール全てのプロシージャ -
モジュールレベル定数ステートメント:Const
宣言場所:宣言セクション
適用範囲:宣言されたモジュール内の全てのプロシージャ -
プロシージャレベル定数ステートメント:Const
宣言場所:プロシージャ内
適用範囲:宣言されたプロシージャ内からのみ -
Staticステートメントプロシージャレベル変数でプロシージャ終了後も値を保持したいときに使用する宣言
ステートメント:Static
宣言場所:プロシージャ内
有効範囲:パブリック変数と同じ
Static MyId As String -
Set ステートメントオブジェクト変数にオブジェクトの参照を代入する
Set オブジェクト変数 = 参照するオブジェクト
例)
Dim MyForm As Form
Docmd.OpenForm "Fオブジェクト変数"
Set MyForm=Forms("Fオブジェクト変数")
MyForm.詳細.Backcolor = vbCyan
MyForm.txt1.Value=ABCDE"
-
配列 Option Baseステートメント配列のインデックス番号の最小値を「0」ではなく「1」に変更することができる
Option Base 最小値(0又は1の数値)
※宣言セクションに記述 -
配列 Toステートメントモジュール内の全ての配列変数ではなく個々の配列変数ごとに設定したい場合に使用する
Dim 変数(最小値 To 最大値) As データ型 -
動的配列とは要素数は設定せずに配列の宣言のみ行うこと
ReDimステートメントで要素数を設定する
Dim 変数() As データ型 -
ReDimステートメント実際に使用する段階で要素数を設定する
ReDim 変数(要素数-1)
※それまで格納されていた値は初期化される -
Preserveステートメントそれまで格納されていた値を初期化することなく要素の最大値を変更することができる
ReDim Preserve 変数(新しい要素数-1) -
Eraseステートメント配列に格納されて値を一気に初期化する
Erase 配列変数 -
ユーザ定義型とはユーザが独自に型の定義を行うことができる機能
任意の数の要素を設定でき、各要素のデータ型もそれぞれ異なるものを設定可能
-
Typeステートメントユーザ定義型を定義するステートメント。
標準モジュールの宣言セクションで行う
例)
Type ユーザ定義型名
要素名1 As データ型1
要素名2 As データ型2
要素名3 As データ型3
End Type
-
ユーザ定義型の宣言方法Typeステートメントで定義したユーザ定義型を通常の変数宣言と同様に宣言します
Dim ユーザ定義型の変数 As ユーザ定義型名
例)
Dim MySyain() SyainType
----------------------------------------
Private Sub Form_AfterUpdate()
Static i As Long
ReDim Preserve MySyain(i)
MySyain(i).社員番号=Me.txt1.Value
MySyain(i).部署コード=Me.txt2.Value
MySyain(i).社員名=Me.txt3.Value
-
プロシージャの種類は標準プロシージャ
イベントプロシージャ -
標準プロシージャとは特定のイベントに関連付けられていない汎用的な処理を記述するプロシージャ
SubプロシージャとFunctionプロシージャの2種類がある
処理の結果を返す必要がない場合はSub
返す必要がある場合はFunction -
イベントプロシージャとはフォームやレポートのイベントによって実行するプロシージャ。
全てSubプロシージャとなる -
Functionプロシージャの呼び出し方変数 = プロシージャ名()
または
変数 =プロシージャ名(変数)
例)
sub Test()
Dim MyStr As String
MyStr=Func("※※※")
Msgbox MyStr
End Sub
Function Func(MyStr As String) As String
Func = MyStr % "AAA"
End Function
-
引数とはプロシージャを呼び出す際に、呼び出し先のプロシージャに渡される値
-
戻り値とは呼び出されたプロシージャの処理が終わった後に、呼び出し元のプロシージャに渡される値
-
値渡しとは変数のコピーを渡すこと
ByValキーワードを使用する
例)
Sub プロシージャ名(ByVal 引数 As データ型)
又は
Function プロシージャ名(ByVal 引数 As データ型)
-
参照渡しとは変数をそのまま渡す
渡し先で変更されれば元の変数も変更される
ByRefキーワードを使用する
例)
Sub プロシージャ名(ByRef 引数 As データ型)
又は
Function プロシージャ名(ByRef 引数 As データ型)
-
Optionalキーワードとは引数を省略可能にできる
Function Func1(Optinal ByVal MyStr As String = "BBB")
Func = MyStr & "***"
End Function
-------------------------------------------------
Sub Test()
Debug.Print Func("AAA")
Debug.Print Func()
-------------------------------------------------
結果
AAA***
BBB***
引数を省略した場合に初期値が適用される -
フォーム・レポートを参照する構文対象となるオブジェクトのモジュールから参照
Me.メソッド(又はプロパティ)
それ以外のモジュールから参照
Forms("フォーム名").メソッド(又はプロパティ)
-
様々なフォーム参照の構文Forms!フォーム名
Forms![フォーム名]
Forms.フォーム名
Forms!フォーム名!コントロール名
Forms("フォーム名")("コントロール名")
Forms("フォーム名").Controls("コントロール名") -
サブフォーム・サブレポートを参照する構文対象となるオブジェクトのモジュールから参照
Me.サブフォーム.Form.メソッド(又はプロパティ)
それ以外のモジュールから参照
Forms("フォーム名").サブフォーム名.Form.メソッド(又はプロパティ) -
メインフォームを参照する場合Me.Parent.メソッド(又はプロパティ)
Me.Parent.コントロール名.メソッド(又はプロパティ) -
OpenArgdプロパティとはDocmd.OPenFormのプロパティ
どのフォームから開かれたか調べることができる
例)
Private Sub btn_Click()
Docmd.OPenForm "F_フォーム",,,,,,Screen.ActiveControl.Name
End Sub
-------------------------------------
Private Sub Form_OPen
Me.txt.Value="[" & OpenArgs & "]ボタンより開かれました"
End Sub
-
KeyPressイベントとはキーボードのANSIキーが押された時に発生する
ANSIキーが押されると、
KeyDown→KeyPress→Change→KeyUpの順でイベントが発生する
例)
Rrivate Sub KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case 8,9,13
Exit Sub
Caee Else
If KeyAscii >=Asc("0") And KeyAscii <= Asc("9") Then Me.Lbl.Cartion ="数字キーが押されました"
End If -
GetFocusイベントとはコントロールにフォーカスが移った時に発生する
フォーカスを取得した際に他のコントロールから値を取得したりテキストボックスのカーソル位置を指定したり。
例)
Private Sub txt_GetFocus()
If IsNull(Me.txt.Value) Then
Me.txt.Value=Me.txt5.Value
Me.txt.SelStart = Nz(Len(Me.txt.Value),0)
End If
-
SelStartプロパティとはテキストボックス内のカーソル位置を指定する
(0から総文字数の範囲で)
Me.txt.SelStart = Nz(Len(Me.txt.Value),0)
テキストボックス内の文字を数えて、その文字数の最後尾にカーソルを設定する -
BeforeUpdateイベントとはデータを更新する前に発生し、入力された値が不正なときやデータ更新のキャンセルを行うことができる
データを更新すると、BeforeUpdate → AfterUpdateの順番でイベントが発生する
-
Loadイベントとはフォームに読み込まれる時に発生する
フォームが開かれると
Open→Load→Activeの順にイベントが発生する -
コンポーネントとは特定の機能を持つプログラムの部品
外部のライブラリファイルを読み込むことでAccess VBAにない機能を利用することができる
参照設定 -
事前バインディングとは利用したい外部ライブラリファイルをあらかじめ選択し、オブジェクト変数にオブジェクトへの参照を格納する
Dim オブジェクト変数 As 特定のオブジェクト型
Set オブジェクト変数 = New 特定のオブジェクト型
実行時バインディングに比べてコード の実行が早い
固有オブジェクト型による宣言 -
実行時バインディングとはCreateObject関数を利用して、コード 実行時にオブジェクトを参照する
参照設定ダイアログでライブラリファイルを選択する必要はない
Dim オブジェクト変数 As Object
Set オブジェクト変数=CreateObject(オブジェクトのクラス名)
総称オブジェクト型による宣言 -
カレントデータベースのパスと名前パス
CurrentProject.Path
名前
CurrentProject.Name -
CurrentDb.Nameフォルダのパスとファイルの名前を同時に取得できる
CurrentProject.Pathと
CurrentProject.Name
を両方あわせた感じ
-
FileSystemObjectの概要
8つのオブジェクト種類Driveオブジェクト
Driveコレクション
Folderオブジェクト
Folderコレクション
Fileコレクション
Fileオブジェクト
TextStreamオブジェクト -
FileSystemオブジェクトの事前バインディング記載方法Dim オブジェクト変数 As FileSystem
Object
Set オブジェクト変数=New FileSystemobject -
FileSystemオブジェクトの実行時バインディング記載方法Dim オブジェクト変数 As Object
Set オブジェクト変数 =CreateObject(”Scripting.FileSystemObject") -
FileSystemObjectのオブジェクトcopyFile
CopyFolder
CreateFolder
CreateTextFile
DeleteFile
DeleteFolder
DriveExists
FileExists
FolderExists
GetDrive
GetFile
GetFolder
MoveFile
MoveFolder
OpenTextFile -
Driveオブジェクトの内容
オブジェクト.GetDrive(ドライブ名)DriveLetter…ドライブ名取得
DriveType…ドライブ種類の数値取得
FileSystem…ファイルシステムの種類「FAT」「NTFS」「CDFS」のいずれかを取得
FreeSpace…使用可能なディスク空き容量
IsReady…ドライブが準備できているかどうか
Path…ドライブのパス
ShareName…ドライブのネットワーク名
TotalSiza…ドライブの総容量 -
Driveオブジェクト
DriveTypeプロパティの数値種類0 不明
1 リムーバブルディクス
2 ハードディスク
3 ネットワークドライブ
4 CD-ROM
5 RAMディスク -
Folderオブジェクトの内容
オブジェクト.GetFoler(フォルダのパス)■プロパティ
Attributes…フォルダ属性の取得
DateCreated…フォルダ作成の日時
DateLastAccessed…フォルダが最後にアクセスされた日時
DateLastModiffed…フォルダが最後に更新された日時
Drive…フォルダが含まれているドライブ名
Files…フォルダ内のすべてのファイル取得
IsRoolFolder…ルートフォルダかどうか調べる
Name…フォルダの名前を取得
Path…フォルダのパスを取得
Size…フォルダ内のサイズを取得
SubFoldrs…すべてのサブフォルダを取得
■メソッド
Copy…フォルダをコピー
Delete…フォルダを削除
Move…フォルダを移動する
CreateTextFile…新しいテキストファイル作成 -
Fileオブジェクトの内容
オブジェクト.GetFile(ファイルのパス)■プロパティ
Attributes…ファイル属性の取得
DateCreated…ファイル作成の日時
DateLastAccessed…ファイルが最後にアクセスされた日時
DateLastModiffed…ファイルが最後に更新された日時
Drive…ファイルが含まれているドライブ名
Name…ファイルの名前を取得
Path…ファイルのパスを取得
Size…ファイル内のサイズを取得
Type…ファイルの種類を取得
■メソッド
Copy…ファイルをコピー
Delete…ファイルを削除
Move…ファイルを移動する
OpenAsTextStreem…テキストファイルを開く -
TextStramオブジェクトの内容
オブジェクト.CreateTextFile(ファイル名、上書き)記載例)
Dim FSO New FileSystemObject
Dim MyText As TextStreem
Dim MyPath as Dtring
MyPath=CurrentProject.Path & "¥test"
Set MyText = FSO.OPenTextFile(MyPath & "¥01.txt",Forwriting)
MyText.Erite "12345"
MyText.Close
-
FileDialogオブジェクトの内容ファイルまたはフォルダを参照するダイアログボックスを表示し、選択したファイル等へのパスを格納する
■ファイルを格納
Dim オブジェクト変数 As FileDiaLog
Set オブジェクト変数 = Application.FileDialog(msoFileDialogFilePicker)
■フォルダを格納
Dim オブジェクト変数 As FileDiaLog
Set オブジェクト変数 = Application.FileDialog(msoFileDialogFolderPicker)
-
FileDialogオブジェクト
プロパティとメソッドの種類
■プロパティ
Title…ダイアログボックスのタイトル
ButtonName…操作ボタンに表示される文字列
AllowMultiSelect…操作ファイルの選択が可能か指定
InitialFileName…初期表示されるフォル名やフォルダパスを指定
InitialView…ファイル等の初期表示を指定
Filers…選択できるファイルの種類を指定
FilerIndex…表示されるファイルの種類を指定
SelectedItems…選択したファイルパスを表示
■メソッド
Show…
ダイアログボックスを表示する
キャンセルボタンを押すと「0」、それ以外は「−1」を返す
-
FileDialogオブジェクト
InitialViewプロパティのクラス定数msoFileDialogViewDetails…詳細表示
msoFileDialogViewLargeicons…大きいアイコン
msoFileDialogViewList…一覧表示
msoFileDialogViewPreview…プレビュー表示
msoFileDialogViewProperties…プロパティ表示
msoFileDialogViewSmallIcons…小さいアイコン
msoFileDialogViewThumbnail…縮小表示
-
OLEオートメーションの意味Object Linking and Embeddingの略称
アプリケーション間でオブジェクトをやり取りするための規格 -
EXCELとの連携
事前バインディングDim オブジェクト変数 As Excel.Application
Set オブジェクト変数=New Excel.Application -
EXCELとの連携
実行時バインディングDim オブジェクト変数 As Object
Set オブジェクト変数=CreateObject("Excel.Application") -
OLEオートメーションのExcelオブジェクトの種類Excel.Application…Excel本体
Excel.Sheet…Excelワークシート
Excel.Chart…Excelグラフ -
VBAの高速化
定義域集計関数とRecordsetオブジェクトRecorset(SQL)が高速
定義域集計関数
MyStr=Dlookup("社員名","社員マスタ","社員番号1=’S08000’")
↓↓↓
高速化書き換え例
Set DB=CurrentDb()
SQL="SELECT 社員名 FROM 社員マスタ WHERE 社員番号='S08000'"
Set rs = DB.OpenRecordset(SQL)
MyStr = rs.Filds("社員名")
-
VBA高速化
DatabaseオブジェクトとRecordsetオブジェクトDatebaseオブジェクト
For i=1 To 1000
SQL=””INSERT INTO 社員マスタ -
SQLのパターンマッチング
ワイルドカードの記載例フィールド名 Like "パターン文字"
種類
* 任意の文字数 Like "*本"
? 任意の1文字 Like "?本"
# 任意の1文字の数字 Like "#組"
[文字リスト] 文字リスト内の1文字
Like "g[eo]t"
[!文字リスト] 文字リスト以外の1文字
Like "p[!eo]t"
[文字1-文字2] 文字1~2の範囲の1文字
Like "b[a-c]t"
[!文字1-文字2] 文字1~2の範囲以外の1文字
Like "b[!a-c]t"
-
ANSI-89とANSI-92の違いANSI-89…通常やDAOで使用 * ?
ANSI-92…ADOで使用 % - -
SQLレコード化 GROUP BY句
のグループ化記載例SELECT * FROM テーブル名 GROUP BY フィールド名; -
SQL GROUP BY句使用時のSQL集計関数種類SELECT 集計関数(フィールド名) As 別名 FROM テーブル名 GROUP フィールド名;
Count(フィールド名)
Avg(フィールド名)
Sum(フィールド名)
Min(フィールド名)
Max(フィールド名) -
SQL GROUP BY句使用時の条件指定HAVING句を使用
SELECT * FROM テーブル名 GROUP BY フィールド名 HAVING 条件式; -
SQL 内部結合
INNER JOIN句の構文SELECT *
FROM テーブル名
INNER JOIN
テーブル名 ON テーブル名.結合フィールド=テーブル名.結合フィールド -
SQL 外部結合
LEFT JOIN句
RIGHI JOIN句SELECT *
FROM テーブル名
LEFT JOIN
テーブル名 ON テーブル名.結合フィールド=テーブル名.結合フィールド -
SQL 不一致レコードの抽出方法外部結合で抽出条件にNUllを指定することで不一致レコードを抽出することができる
SELECT *
FROM テーブル名
LEFT JOIN
テーブル名 ON テーブル名.結合フィールド=テーブル名.結合フィールド
WHERE テーブル名.フィールド名=IS NULL;
-
SQL テーブル定義の変更
新しいフィールドを追加ALTER TABER テーブル名 ADD COLUMN フィールド名 データ型(サイズ); -
SQL テーブル定義の変更
既存フィールドの属性変更ALTER TABER テーブル名 ALTER COLUMN フィールド名 データ型(サイズ); -
SQL テーブル定義の変更
既存フィールドの削除ALTER TABER テーブル名 DROP COLUMN フィールド名; -
SQL インデックスを作成するCREATE INDEX インデックス名 ON テーブル名(フィールド名1、フィールド名2…)
例)
Dim StrSQL As String
StrSQL ="CREATE INDEX idx備考 ON T在庫マスタ(備考;"
Current.QueryDafs("Qクエリ").SQL = StrSQL
Docmd.OpenGuery "Qクエリ" -
SQL インデックスを削除するDROP INDEX インデックス名 ON テーブル名
-
ADOのオブジェクト
7種類・Connection
データベースへの接続を保持する
・Command
データベースのコマンドを保持する
・Recordset
レコードの集まりを保持する
・Field
フィールドを保持する
・Paramater
パラメーターを保持する
・Property
プロパティを保持する
・Error
エラーを保持する -
ADO
データベースへの接続例Dim オブジェクト変数 As ADODB.Connection
※カレントDBへの接続
Set cn=Currentproject.Connection
※カレントDB以外へ接続
Set cn=New ADODB.Connection
cn.ConnectionString="Provider=Microsoft.ACE.CLEDB.12.0;" & _
"Date Source=データベースファイルのパス"
cn.Open -
ADO
Recordetオブジェクトの記載例■方法1RecordsetでOpenする
Dim rs As ADODB.Recordet
Set rs=New ADODB.Recordset
rs.Open ソース,cn,カーソルタイプ,ロックタイプ
以下の書き方でもOK
Dim rs As New ADODB.Recordset
rs.Open ソース,cn,カーソルタイプ,ロックタイプ
■ConnectionでExecuteする
Dim rs As ADODB.Recordset
Set rs=cn.Execute(コマンド)
※コマンド…テーブル、クエリ、SQlなど -
ADO
Recordsetオブジェクトのカーソルタイプ種類・adOpenForwardOnly
前方スクロールのみ。前方向のみの移動なので高速。その他は静的カーソルと同じ
・adOpenKeyset
他のユーザによる追加・削除は確認できない。その他は動的カーソルと同じ
・adOpenDynamic
動的カーソル。すべての方向に移動可能。他のユーザによる追加、更新、削除を確認できる
・adOpenStatic
静的カーソル。すべての方向に移動可能。他のユーザによる追加、更新、削除を確認できない -
ADO
Recordsetオブジェクトのロックタイプ・adLockReadOnly(規定)
読み取り専用
・adLockPessimistic
レコード単位の排他ロック
・adLockOptimistic
レコード単位の共有ロック
・adLockBatchOptimistic
共有的バッチ更新
・adLockUnspectified
ロックタイプを指定しない -
ADO
Recordsetオブジェクトのメソッド種類・Open
・Close
・Move
・MoveFirst
・MoveLast
・MoveNext
・MovePrevious 戻る -
ADOの記載例 2種類方法1------------------------------
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = Currentproject.Connection
Set rs = cn.Excute(テーブルなど)
方法2------------------------------
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = Currentproject.Connection
Set rs = New ADODB.Recordset
rs.Open "テーブル等"cn,adOpenStatic
-
ADO
レコードの更新方法Updateメソッドを使用する
① rs.Update フィールド1,値
② rs("フィールド").Value = 値
※Fieldオブジェクトの参照パターン
rs!(フィールド名).Value
rs.Fields("フィールド名").Value
rs("フィールド名").Value -
ADO
レコードの追加方法rs.AddNew
rs("フィールド").Value=値
rs.Update -
ADO
レコードの削除rs.Delete -
ADO
レコードの検索Findメソッドを使用する
rs.Find 検索条件,スキップ行,検索方向,開始位置
記載例)
Do
rs.Find "住所1='愛知県'"
If Not rs.EOF Then
Debug.Print rs("社員名"), _
rs("住所")
rs.MoveNext
Else
Exit Do
End If
-
FindメソッドでのNull検索rs.Find "フィールド名=Null"
ちなみにSQLでは
フィールド名 Is Null -
ADO
レコードの並べ替えSortプロパティを使用する
rs.Sort="フィールド名 ASCまたはDESC"
※並べ替えを行うには
CutsorLocationプロパティに「adUserClient」を設定する必要あり
-
ADO
レコードの抽出方法Filterプロパティを使用します
rs.Filter="フィールド1=検索条件1 And フィールド2=検索条件2"
-
ADO
レコードセットをフォーム表示等に使用する使用する例フォーム表示やコンボボックス、リストボックスに使用可能
この場合は、CursorLocationプロパティに「adUseClient」を設定する必要あり
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = Currentproject.Connection
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
rs.Open "テーブル名",cn
Set Me.コンボ1.Recorset=rs
コンボボックスの内容を解除
Set Me.コンボ1.Recordset = Nothing
Me.コンボ1.Requery
-
ADO
トランザクションの実装方法以下のメソッドを使用
BeginTrans…トランザクションを開始
CommitTrans…変更内容を更新
RollBackTrans…変更を取り消して元の状態に戻す
記載例)
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = Currentproject.Connection
Set rs = New ADODB.Recordset
rs.Open "テーブル名",cn,adOpenKeySet,adLockOptimistic
On Error GoTo ErrExit
cn.BeginTrans
Do Until rs.EOF
Loop
cn.CommitTrans
Msgbox "トランザクションを確定しました"
Exir Sub
ErrExit:
cn.RollbackTrans
Msgbox "トランザクションを取り消しました"
-
ADO
Excelブックへの接続方法記載例)
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim MyPath As String
MyPath = CurrentProject.Path & "¥"
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & MtPath & "test.xlsx;" & _
"Extended Properties='Excel 12.0;HDR=YES'"
Set rs= cn.Excute("SELECT * FROM [Sheet1$])
Do Until rs.EOF
Loop -
ADO
例外処理 ErrorオブジェクトError オブジェクトのプロパティ
・Number
・Description
・Source
記載例)
Dim MyErr As ADODB.Error
rs.Open "テーブル名",cn,adOpenKeyset,adLockOptimistic
on Error GoTo ErrExit
ErrExit:
For Each MyErr In cn.Errors
Msgbox "発生したエラー情報は次の通り” & vbCrLf & _
MyErr.Number & vbCrLf & _
MyErr.Source & vbCrLf & _
MyErr.Description
Next -
DAOとADOの違いDAOにはテーブルやクエリを作成する機能あり
Access単体で使用するのみ向いている
参照設定する必要はない
ADOはAccessのみでなく、SQLServerなどのデータベースにも接続できる -
DAOでのデータベース接続方法Set DB = CurrentDb
カレントDB以外
Set DB= OpenDatabase("データベースファイルパス") -
DAO
テーブル・クエリの作成方法新規テーブルの作成
CreateTableDefメソッドを使用する
新規クエリの作成
CreateQueryDefメソッドを使用する -
DAO
CreateTableDefの記載例Dim DB As DAO.Datadase
Dim TD As DAO.TableDef
Set DB = CurrentDb
Set TD = DB.CreateTableDef("T在庫マスタ")
TD.Fields.Append TD.CreateField("商品番号",dbText,4)
TD.Fields.Append TD.CreateField("在庫数",dbLong)
TD.Fields.Append TD.CreateField("在庫区分",dbText,4)
DB.TableDefs.Append TD
Set TD=Nothing:Set DB=Nothing
-
DAO
CreateQueryDefの記載例Dim DB As DAO.Datadase
Dim QD As DAO.TableDef
Set SQL As String
Set DB = CurrentDb
SQL="SELECT * FROM T社員名簿 WHERE 年齢>=50;"
Set QD = DB.CreateQUERYDef("Q50以上社員",SQL)
Set TD=Nothing:Set DB=Nothing
-
エラーの種類コンパイルエラー
文法の誤りなど
実行時エラー
コード実行時に処理継続できないエラー
論理エラー
プログラムが目的通りに動作しない -
On Errorステートメントとはエラーが発生した時に実行する処理を指定するステートメント
On Error Gotoステートメント
On Error Resume Nextステートメント
On Error Goto 0ステートメント -
On Errorステートメント
On Error Gotoステートメントとはエラーが発生したときに行ラベルの場所に移動して以降の処理を実行する
例)
Dim MyNumber As Long
On Error Goto ErrExit
MyNumber = InputBox("数字を入力" )
MsgBox MyNumber & "の値が入力されました"
Exit Sub
ErrExit:
MsgBox "数値が入力されませんでした"
End Sub -
On Errorステートメント
On Error Resume Nextステートメントとはエラーが発生してもエラーを無視して処理を継続する
例)
On Error Resume Next
Debug.Print 100/0
Debug.Print 100/1
Debug.Print 100/2
Debug.Print 100/4
End Sub
「100/0」は0除算エラーだがエラーメッセージは表示されない -
On Errorステートメント
On Error Goto 0ステートメントとはエラートラップを無効とする -
Resumeステートメントとはエラーが発生した際、処理を再実行する時に使用するOn Error Gotoステートメントが有効な時、エラー処理ルーチンでエラー処理を行った後、指定の場所から処理を再実行します
Resume
Resume Next
Resume 行ラベル -
Resume ステートメント
Resumeとはエラーが発生した場所から処理を再実行する
例)
Sub Test()
Dim MyNumber As Long
On Error Goto ErrExit
MyNumber = InputBox("数値を入力")
MsgBox MyNumber & "の値が入力されました"
ErrRetry:
ExitSub
ErrExit:
Select Case MsgBox("もう一度入力する?")
case vbYes
Resume
Case vbNo
Resume Next
Case vbCancel
Resume ErrRetry
End Select
End Sub -
Errオブジェクトとは実行時エラーが発生するとErrオブジェクトにエラーを識別する為の情報が格納される
Number…エラーの番号を返す
Description…エラーの情報を返す -
エラー番号とエラー情報の種類6…オーバーフローしました
7…メモリが足りません
9…インデックスが有効範囲にありません
11…0除算しました
13…型が一致しません
17…要求された操作は実行できません
ログイン