お仕事で使っているACCESSめもが貯まってきたので、通ってきた道を共有したいと思う
メモなので割と雑、信ぴょう性が…
ACCESSは壊れることさえ除けばいろいろ融通が利くしプログラミング初心者に超おすすめ
壊れる事さえ除けば
.netを初めて触った時、テキストボックスに書式を設定できないことに絶望した思い出
※プログラミングは経験無かったので難しい言葉は分からないし常に我が道を行ってしまっています
変数とか関数名に容赦なく日本語を使うし、なんならプロシージャとファンクションとメソッドと関数という単語を全部同じ意味で使う
■型
VBAではVariant型にしかNULLが入らない、あとオブジェクト
テーブルでは日付、数値、テキスト…でオートナンバー以外には入る気がする
■データがないときの挙動
DCOUNT→0
DMAX→NULL
DMIN→NULL
DSUM→NULL
■入力候補
Ctrl+spaceで入力候補が出る
決定はenterでも出来るが直後に改行される
tabキーで改行無しの確定ができる
■プロパティのフォーマット
□書式に書く場合
〒@@@-@@@@
ggge\年m\月d\日
#,##0
□コントロールソースに書く場合
=Format(Now(),"ggg" & " 年 月 日")
□注意
FormatとかReplaceの戻り値は文字列かVariantだからいろいろと注意
■式に未定義関数xxxがあります
SQLで関数を使おうとしてた時に、関数名が日本語だと発生(´・ω・`)
■ctrl+↑↓
ctrl+↑↓で前後のモジュールに移動できる
しんせつせっけい
■サブフォーム内の関数とかを呼び出す
Call Me.Fs_サブフォーム名.Form.F_220_InsertData
ただし関数とかはpublicにしておく必要がある
■配列の初期化
Erase 配列名
■べき乗の書き方
A = 2 ^ 10
↑^の前後に必ずスペースが必要
■このオブジェクトに値を代入することはできません
Form_Open時のイベントで連結項目に値を代入しようとするとなる気がする
値を代入するときはForm_Load時にやる
あとレコードソースに関数指定したら起こった
■桁数チェック
数値項目で桁が大きすぎると指数表示になる
桁数チェックをlenでやると引っかからなくなってしまうので、lenの前でformat(チェック対象コントロール,"0")にするといいらしい
追記に続く
■更新前処理
更新前処理でcancel=trueにすると更新後イベントに行かない
■レコードに検索キーが見つかりませんでした
フィルターをセットするときに発生
SELECT DISTINCTにしたのが原因っぽい
クエリにしてごまかそうとしたけどダメだった
■レコードは削除されています
Me.Requeryをしたときに「レコードは削除されています」と出ることがある
vbaでコントロールの中身を書き換えた時に起こるっぽいので?
書き換えた後にMe.Requeryを入れたらとりあえずは出ない
■四捨五入
Format関数で四捨五入できるらしい
strText = Format(12.345, "0.00")とすると結果は
12.35になるらしい
参考
http://www.openreference.org/articles/view/522
■Nz()
クエリでNz使うと文字列になる
■空の項目
wsql = wsql & "カラム名 = '" & 項目 & "',"
みたいにすると勝手に空白扱いにしてくれる
■日付型のnull
If Me.日付型の項目 & "" = "" Then
↑これがtrueになった
イミディエイトで見たけど項目にはしっかりnullが入ってた
■MoveLastとMoveFirst
Recordset.MoveLastはテーブルが空の場合落ちる気がする
■レコードソース
レコードソースにテーブル名だけ書いた場合と、select文で書いた場合
結果の並びが違う気がする
■強制的にレコード保存
DoCmd.RunCommand acCmdSaveRecord
↑accessのバージョンによってはエラーが出るらしい
DoCmd.RunCommand acCmdRefresh
↑試したことはない
Me.Refreshでもいい?
■AfterUpdateイベント
AfterUpdateイベントで入力チェックとかやった場合、SetFocusがうまくいかない
詳細はここ
http://accessclub.jp/bbs/0071/beginers26922.html
■メインフォームからサブフォームのコントロールを参照
Me.サブフォーム名!txt_あああ
■VBA内で別フォームの項目参照
Forms![フォーム名]![txt_項目] = "あああ"
↑ただし参照するフォームが開かれていないといけない