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に変えたときに、けっこう不具合のチェックをしたんですが、こんなところにも影響が出てたとは。。

 

 

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Optionally add an image (JPEG only)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください