ACCES2007のフォームでチェックボックスを自動的にOFFるVBA
ACCESSのフォームでサブフォームに抽出したデータの中からチェックボックスにチェックした行だけを印刷(プレビュー表示)し、その後チェックを自動的にOFFにするVBAなんですが、、
ACCESS2003で動作していたVBAがACCESS2007以降では正常に動作しないことが分かりました。
ACCESS2003で作成したVBAは、、
—————————————————————————————–
DoCmd.OpenReport “レポート名”, acViewPreview
Dim j As Integer
Dim i As Integer
j = Me!”サブフォーム名”.Form.RecordsetClone.RecordCount
Me!”サブフォーム名”.Form.Recordset.MoveFirst
Me!”サブフォーム名”.Form!”チェックボックス名” = 0
For i = 1 To j – 1
Me!”サブフォーム名”.Form.Recordset.MoveNext
Me!”サブフォーム名”.Form!”チェックボックス名” = 0
Next i
Me!”サブフォーム名”.Form.Recordset.MoveFirst
—————————————————————————————–
レポートをプレビュー表示した後、
まず、サブフォームに抽出された行数をカウント。
1行目に移動してチェックボックスをOFF(0)に。
次の行に移動してチェックボックスをOFF(0)に。
これをカウントした行数-1回繰り返す。
最後に1行目に戻って終了。
と言う単純なプログラムです。
ACCESS2003ではこれでチャンと動いていたんですが、先日OFFICEを2003から2007にバージョンアップしたクライアント先から、最近チェックがOFFにならないことがあると言われ、いろいろ調べた結果、、
1行目から連続してチェックを入れた場合は正常にOFFになるが、2行目以降にチェックを入れた場合や1行目と3行目のように行が飛んだ場合、チェックOFFにならないことが分かりました。
つまり、ACCESS2007以降ではチェックボックスがOFFになっている行があるとそこで止まってしまうってことです。
それなら、チェックボックスがOFF(0)だったらその行を飛ばしちゃえばイイんじゃね!?
ってことで、こんな感じで書き直してみました。
—————————————————————————————–
DoCmd.OpenReport “レポート名”, acPreview
Dim j As Integer
Dim i As Integer
j = Me!”サブフォーム名”.Form.RecordsetClone.RecordCount
Me!”サブフォーム名”.Form.Recordset.MoveFirst
If Me!”サブフォーム名”.Form!”チェックボックス名” = -1 Then
Me!”サブフォーム名”.Form!”チェックボックス名” = 0
End If
For i = 1 To j – 1
Me!”サブフォーム名”.Form.Recordset.MoveNext
If Me!”サブフォーム名”.Form!”チェックボックス名” = -1 Then
Me!”サブフォーム名”.Form!”チェックボックス名” = 0
End If
Next i
Me!”サブフォーム名”.Form.Recordset.MoveFirst
—————————————————————————————–
プログラム的にど~なの?って気もしますが、、w これでバッチリ動作してくれました。
…とにかく動けばOKってことで。。w
OFFICE2003から2007に変えたときに、けっこう不具合のチェックをしたんですが、こんなところにも影響が出てたとは。。