へっぽこヘタレシステム管理人の管理者です。
さて、アクセスで簡易なソフトウエア的なもの?を作っていると・・・
一つのコマンドボタンで更新クエリやデータの追加クエリを何度も実行しなければいけない場合があります。
1~2個ならそのまま順番に記述すれば良いのですが・・・
これが何個もとなると・・・
いちいち記述するのが面倒くさくて、なんとか・・・
変数を使ってループ処理できないか悩んでいたのですが・・・
ようやくその方法が分かりましたので忘備録として掲載しておきます。
実験してみたことは次のとおりです。
やりたいことは単純です・・・
チェックボックスには・・・
- check1
- check2
- check3
- check4
- check5
という名前を付けてあります。
これに対応して、チェックボックスが押されていたら・・・
対応したクエリを実行するというものです。
- query1
- query2
- query3
- query4
- query5
通常であれば・・・
if me.check1 = -1 then
docme.openquery "query1"
else
endif
if me.check2 = -1 then
docme.openquery "query2"
else
endif
if me.check3 = -1 then
docme.openquery "query3"
else
endif
以下続く・・・
とするのですが・・・
順番に実行するものが決まっているのであれば・・・
変数でコントロールを指定すれば、コードが簡略化できます。
実際に記述したコードは次のとおりです。
Private Sub コマンド0_Click()
Dim A As Integer
Dim qname As String
Dim bname As String
A = 1
For A = 1 To 5
bname = "check" & A
If Me.Controls(bname) = -1 Then
qname = "query" & A
DoCmd.OpenQuery qname, acNormal
Else
End If
Next
End Sub
クエリの指定は・・・
通常は・・・
【docmd.openquery “クエリ名”】
と記述しますが・・・・
変数を使う場合は・・・
【docmd.openquery 変数名】
で良いようです。ダブルクオーテーションで囲まなくて良いだけのようです。
しかし・・・
チェックボックスの指定は・・・
同じ方法ではダメでした。
通常だったら・・・
【Me.コントロール名】
とするので 、同じように・・・
【Me.変数名】
としたのですが・・・エラーで止まります。
調べた結果・・・
【Me.Controls(変数名)】
でいけました・・・
知らない事が多いとはいえ、まだまだ勉強不足を通過したところです。
実際の動作は次の動画のとおりとなります。
コメント