よくカンニングするACCESS VBAたち



2019/01/12 00:33


Qiitaにでも書けよというような内容だったりする
ほとんどが初ACCESS開発から半年以内に貯めこまれたもの

■面倒なSELECTとかRecordsetのオブジェクトを指定せずに、テーブルから値を取る方法
□プロパティから設定するとき
DLookup("[項目名]", "テーブル名", "[項目名]='" & seq & "'")
□VBAでやるとき
DLookup("ID", "テーブル名")
DLookup("コード名称", "T_MCODE", "コード区分=91 AND コード= 1")
他にもDSumとかある

■ナビゲーションウィンドウを非表示にする
DoCmd.SelectObject acForm, "", True
DoCmd.RunCommand acCmdWindowHide

■ショートカットキーを無効にする
ChangeProperty "AllowSpecialKeys", 1, False



■レポートをpdf出力
DoCmd.OutputTo acOutputReport, "R_レポート名", acFormatPDF, 指定フォルダ & "\" & ファイル名

■CSV出力
一番後ろの引数に65001をつけるとunicodeで出力できる
DoCmd.TransferText acExportDelim, , “テーブル名”, CurrentProject.Path & “\ファイル名.csv”, True, “”, 65001

■他のMDBファイルのテーブルをリンクする
"ナントカ.accdb"にあるテーブル"コードマスタ"を"旧コードマスタ"という名前でリンクします
DoCmd.TransferDatabase acLink, "Microsoft Access", "c:\My Documents\ナントカ.accdb", , "コードマスタ", "旧コードマスタ"

■テーブル削除(リンクテーブルも可)


Public Function テーブル削除(オブジェクト名 As String)
On Error Resume Next
DoCmd.DeleteObject acTable, オブジェクト名
End Function



■キー入力させない


Private Sub cmb_コントロール_KeyDown(KeyCode As Integer, Shift As Integer)
KeyCode = 0
End Sub





■右からn文字
?iif(len(文字列) < n,"",left(right(文字列,n),1))


■フォルダ存在チェック


If Dir(TXT_ファイル, vbDirectory) = "" Then
MsgBox "フォルダが存在しません。", , "条件入力エラー"
TXT_ファイル.SetFocus
Exit Function
End If



■先月末
DateAdd("d", -1,format(日付,'yyyy/mm/01'))

■今月末
DateAdd("d", -1, DateAdd("m", 1, Format(日付, "yyyy/mm/01")))


■半角のみかどうかチェック


If Nz(項目,"")<>"" Then
If LenB(StrConv([項目], 128)) <> Len(項目) Then
MsgBox "半角じゃないよ"
End If
End If



■入力を数字のみに制限


Private Sub txt_項目_KeyPress(KeyAscii As Integer)
If (KeyAscii < Asc("0") Or KeyAscii > Asc("9")) _
And KeyAscii <> 8 Then
KeyAscii = 0
End If
End Sub




■メインフォームのレコードソースを動的に変える
フォームを開いた直後に書き換える処理を入れる
DoCmd.OpenForm フォーム名
Forms(フォーム名).RecordSource = "テーブル名"



■タブコントロールを移動したときにイベント起こす方法


Private Sub タブ1_Change()
Select Case Me.タブ1.Value
Case 0
'1ページ目が選択されたときの処理
Case 1
'2ページ目が選択されたときの処理
Case 2
'3ページ目が選択されたときの処理
'例えばレコードソースを書き換える
Me.Fs_サブフォーム名.Form.RecordSource = "テーブル名"
End Select
End Sub




■とってきたデータの数だけDO LOOPする


Set W_RS = CurrentDb.OpenRecordset(wsql, dbOpenSnapshot)
Do Until W_RS.EOF
total= total+ W_RS!金額
W_RS.MoveNext
Loop



■コンボボックスの幅を自動調整してみた


Dim i As Integer
i = 0
wsql = cmb_コンボボックス.RowSource
Set W_RS = CurrentDb.OpenRecordset(wsql, dbOpenSnapshot)
Do Until W_RS.EOF
i = IIf(i < Len(W_RS!コード名称), Len(W_RS!コード名称), i)
W_RS.MoveNext
Loop

cmb_コンボボックス.WIDTH = 250 * i




VBAじゃないけど
■sqlをさがす
SELECT MSysQueries.Expression,MSysObjects.name
FROM MSysObjects left join MSysQueries
on
MSysQueries.ObjectId=MSysObjects.id;


さりげなくソースをハイライトするやつを使ってみてる

必要性やいかに

comment(0)











「#オリジナル」のBL小説を読む
BL小説 BLove
- ナノ -