AccessVBA小技集

更新:2017.5.4

目次

フォームの背景色をコードで指定する方法

フォームは下記のように、セクションごとに分かれているので、任意のセクションを指定して背景色を変更することになります。

' フォーム詳細
Me.Section(0).BackColor = 色番号

' フォームヘッダー
Me.Section(1).BackColor = 色番号

' フォームフッター
Me.Section(2).BackColor = 色番号

' ページヘッダー
Me.Section(3).BackColor = 色番号

' ページフッター
Me.Section(4).BackColor = 色番号

サブフォームの項目にフォーカスを移す方法

いったん、サブフォームにフォーカスを移す必要があります。

Forms![フォーム名]![サブフォームコントロール名].SetFocus
Forms![フォーム名]![サブフォームコントロール名].Form![コントロール名].SetFocus

サブフォーム側に下記のようなコードを書いたプロシージャを用意しておいて、親フォーム側から呼び出してフォーカスを移すこともできます。

Parent![サブフォームコントロール名].SetFocus
Parent![サブフォームコントロール名].Form![コントロール名].SetFocus

サブフォームのプロシージャを呼び出す方法

サブフォームにPublicでプロシージャを作っておく必要があります。

Public Sub プロシージャ名()
    MsgBox ("Hello")
End Sub

呼び出し方は、下記のように書けば、呼び出せます。

Forms!親フォーム名!サブフォーム名.Form.プロシージャ名

背景色を16進数で指定する方法

16進数のままでは指定できないので、変換して指定する必要があります。

こんな感じの関数をモジュールとして作っておけば割と便利です。

Private Function f_getColor(ByVal strHex As String) As Long

    Dim lngR As Long
    Dim lngG As Long
    Dim lngB As Long

    lngR = CLng("&H" & Mid$(strHex, 1, 2))
    lngG = CLng("&H" & Mid$(strHex, 3, 2))
    lngB = CLng("&H" & Mid$(strHex, 5, 2))

    f_getColor = RGB(lngR, lngG, lngB)

End Function

別アプリの起動

Shell "c:\なんらかのプログラム.exe 引数", vbNormalFocus

Shell "MSACCESS.EXE c:\なんらかのアクセス.mdb /cmd 引数 " , vbNormalFocus

filterの解除

この方法でFilterを解除できないことがある。

FilterOn = False
Filter = ""
FilterOn = True

FilterOn=Falseの前に、下記を書いておけば、確実にFilterを解除できる。

DoCmd.ShowAllRecords

クエリのパラメータに値を入れて実行する方法

Dim db As Database
Dim qdf As QueryDef

Set db = CurrentDb
Set qdf = db.QueryDefs("実行するクエリ")

qdf.Parameters("パレメータ1") = 1
qdf.Parameters("パレメータ2") = 2
qdf.Parameters("パレメータ3") = 3

qdf.Execute

AccessVBAで音を鳴らす

PlaySoundAPIを利用します。

Private Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" (ByVal filename As String, ByVal hmod As Long, ByVal flag As Long) As Long
' 同期
Private Const SND_SYNC = &H0
' 非同期
Private Const SND_ASYNC = &H1
' 繰り返し
Private Const SND_LOOP = &H8
' 停止
Private Const SND_PURGE = &H40

こんな感じで呼べば再生されます。

Call PlaySound("音ファイル.wav", 0, SND_SYNC)

テーブルリンクの更新

マクロにしておけば、DBのテーブルが更新されたときに、実行すればよいだけなので、いちいち手動でリンクを張りなおさなくてよい。

Option Compare Database
Option Explicit

Public Function テーブルリンク更新()

    Dim dbs As Database
    Dim tdf As TableDef
    Dim strRefreshedTable As String

    Set dbs = CurrentDb

    strRefreshedTable = "下記のテーブルリンクを更新しました。" & vbCr & vbCr

    '全テーブルの探索ループ
    For Each tdf In dbs.TableDefs
      With tdf
        If .Connect <> "" Then
          'リンテーブルのみ処理
          .Connect = "ODBC;DSN=xxxxxx;UID=xxxxxx;PWD=xxxxxx;DATABASE=xxxxxx"
          .RefreshLink
          strRefreshedTable = strRefreshedTable & .Name & vbCr
        End If
      End With
    Next tdf
    MsgBox (strRefreshedTable)
End Function

Accessのクエリにフォームの値を入れる

テキストボックスの値をクエリの条件に指定したいときには、下記のように書く。

select
    *
from
    table1
where
    table1.id = [Forms]![frmフォーム名]![項目名]

AccessVBAで数値の判定

値が数値かどうか、IsNumeric()で判定できます。

IsNumeric(値)

数値型に変換できる場合 True を、できない場合は False を返します。

if IsNumeric(値) then
    ' 処理
end if

if Not IsNumeric(値) then
    ' 処理
end if

「Nullの使い方が不正です」のエラーが出たときの対処

こんな風に書いたとき、「Nullの使い方が不正です」とエラーが出る。

プロシージャ名(コントロール名)

nzで空文字なり、0なりに変換すれば、OKです。

プロシージャ名(nz(コントロール名,""))
IT関係関連記事




AccessSQL小技集
2017/05/04







これからブログなどのサイトを作りたいと思っている人は、お名前.comでのドメイン取得がオススメです。

■□━━ 急げ、ドメインは早い者勝ち! ━━□■
     ■お名前.com

アマゾンの2019年本屋大賞一覧

そして、バトンは渡された
ひと
ベルリンは晴れているか
熱帯
ある男

楽天市場のおすすめ商品一覧

お金2.0 新しい経済のルールと生き方 [ 佐藤航陽 ]
全部レンチン!やせるおかず 作りおき 時短、手間なし、失敗なし
「読む力」と「地頭力」がいっきに身につく 東大読書 [ 西岡 壱誠 ]