お仕事で使っているACCESSめもが貯まってきたので、通ってきた道を共有したいと思う
超初心者向け
メモなので割と雑、信ぴょう性が…
型
VBAではVariant型にしかNULLが入らない、あとオブジェクト
テーブルでは日付、数値、テキスト…でオートナンバー以外には入る気がする
テーブルのデータ取得
面倒なSELECTとかRecordsetのオブジェクトを指定せずに、テーブルから値を取る方法
DLookup("列", "テーブル名","条件")
■プロパティから設定するとき
DLookup("[項目名]", "テーブル名", "[項目名]='" & seq & "'")
■VBAでやるとき
DLookup("ID", "テーブル名")
DLookup("コード名称", "コードマスタ", "コード区分=1 AND コード= 1")
他にもDSumとかある
データがないときの挙動
DCOUNT→0
DMAX→NULL
DMIN→NULL
DSUM→NULL
VBA入力候補
Ctrl+spaceで入力候補が出る
決定はenterでも出来るが直後に改行される
tabキーで改行無しの確定ができる
プロパティのフォーマット
■書式に書く場合
〒@@@-@@@@
ggge\年m\月d\日
#,##0
■コントロールソースに書く場合
=Format(Now(),"ggg" & " 年 月 日")
□注意
FormatとかReplaceの戻り値は文字列かVariantだからいろいろと注意
ところで金額の書式って#,#でも行ける気がするんですが
式に未定義関数xxxがあります
SQLで関数を使おうとしてた時に、関数名が日本語だと発生したんだけど
発生しない場合もあるので詳細原因は謎
「式に未定義関数Nzがあります」と言われたこともある
こちらはACCESS修復かなんかで直った気がする
プロシージャ移動
ctrl+↑↓
ctrl+↑↓で前後のプロシージャに移動できる
しんせつせっけい
サブフォーム内の関数とかを呼び出す
Call Me.Fs_サブフォーム名.Form.関数名
ただし関数とかはpublicにしておく必要がある
配列の初期化
Erase 配列名
べき乗の書き方
A = 2 ^ 10
↑^の前後に必ずスペースが必要
このオブジェクトに値を代入することはできません
Form_Open時のイベントで連結項目に値を代入しようとするとなる気がする
値を代入するときはForm_Load時にやる
あとレコードソースに関数指定したら起こった
桁数チェック
数値項目で桁が大きすぎると指数表示になる
桁数チェックをlenでやると引っかからなくなってしまうので、lenの前でformat(チェック対象コントロール,"0")にするといいらしい
更新前処理
更新前処理でcancel=trueにすると更新後イベントに行かない
レコードに検索キーが見つかりませんでした
フィルターをセットするときに発生
SELECT DISTINCTにしたのが原因っぽい
クエリにしてごまかそうとしたけどダメだった
四捨五入
Format関数で四捨五入できるらしい
strText = Format(12.345, "0.00")とすると結果は
12.35になるらしい
参考
http://www.openreference.org/articles/view/522
MoveLastとMoveFirst
Recordset.MoveLastはテーブルが空の場合落ちる気がする
AfterUpdateイベント
AfterUpdateイベントで入力チェックとかやった場合、SetFocusがうまくいかない
詳細はここ
http://accessclub.jp/bbs/0071/beginers26922.html
メインフォームからサブフォームのコントロールを参照
str=Me.サブフォーム名!txt_あああ
VBA内で別フォームの項目を変更
Forms![フォーム名]![txt_項目] = "あああ"
↑ただし参照するフォームが開かれていないといけない