Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
オプショングループ内のトグルボタンが押下状態にならない
投稿日時: 20/06/18 11:40:02
投稿者: takodo

オプショングループ内のトグルボタンが押下状態にならないことがあります。
オプショングループに(flm処理)
トグルボタンを配置します。(tBtn1,tBtn2,tBtn3)値は1,2,3
とします。
そして、次のようなコードを書きます。
'*************************************************
'flm処理をクリックしたとき
'*************************************************
Private Sub flm処理_Click()
    Dim tmp
    Select Case Me.flm処理
        Case Me.tBtn1.OptionValue
            処理1
        Case Me.tBtn2.OptionValue
            処理2
        Case Me.tBtn3.OptionValue
            処理3
    End Select
End Sub
 
トグルボタンをクリックすると、各処理が行われます。
具体的には、フォームのレコードソースを書き換えます。
このとき、処理自体は正しく行われますが、
トグルボタンの押下状態が変わらないことがあります。
 
クリックしたトグルボタンがへこんだ状態となり、他のトグルボタンはへこんでいない状態となる。
というようになって欲しいのですが、
全てのトグルボタンがへこまない状態となってしまうことがある。
 
毎回このようになるわけでもありません。
期待通りにクリックしたトグルボタンがへこむみ、他は通常の状態となることもあります。
 
flm処理_Click()イベントの各処理の前に
me.flm処理=Me.tBtn1.OptionValue
などと記載してみましたが結果は変わりません。
 
クリックしたトグルボタンがへこんだ状態になって欲しいです。
おわかりになる方みえましたらよろしくお願いいたします。

回答
投稿日時: 20/06/19 11:44:48
投稿者: sk

引用:
オプショングループ内のトグルボタンが押下状態にならないことがあります。

引用:
トグルボタンをクリックすると、各処理が行われます。
具体的には、フォームのレコードソースを書き換えます
このとき、処理自体は正しく行われますが、
トグルボタンの押下状態が変わらないことがあります。

引用:
flm処理_Click()イベントの各処理の前に
me.flm処理=Me.tBtn1.OptionValue
などと記載してみましたが結果は変わりません。

それらの処理を実行しないようにした場合も
同様の現象が発生するのでしょうか。

投稿日時: 20/06/20 09:29:19
投稿者: takodo

skさんレス有り難うございます。
[quote="sk"]

引用:

それらの処理を実行しないようにした場合も
同様の現象が発生するのでしょうか。

実行しないようにすると、発生しません。
この、フレーム押下による主な処理はレコードソースを変更することです。
だから、レコードソースを設定するコード
Me.RecordSource = strSQL
を実行しなければこの現象は起きません。
 
strSQLは、文字型で次の3つのいずれかをとります。
select * from フリマ where 出購ID=1 order by [出品番号] ASC ; (1)
select * from フリマ where 出購ID=2 order by [出品番号] ASC ; (2)
select * from フリマ order by [出品番号] ASC ; (3)
「フリマ」はデータベース名です。
(1)は出品したものを表示する場合
(2)は購入したものを表示する場合
(3)は全データを表示する場合
です。
(1)(3)では押下状態が正常に動作します。
(2)のときに押下状態が変化しません。つまりクリックしてもへこんだ状態になりません。
 
このフレームをクリックするとレコードソースを変更し、次に行う処理は
レコードの移動、フォーカスの移動です。
そのコードを以下に示します。
レコード数は(1)(2)(3)の全ての場合について15以上あります。
03 .Move -15 ★ の処理は、画面を上に引き上げて、その後下げるために行っています。
この行をコメントアウトしても症状は変わりません。
しかし、
01〜05まで全てをコメントアウトすると、正常に動作します。
 
01 With Me.Recordset
02 .MoveLast
03 .Move -15 ★
04 End With
05 DoCmd.GoToRecord , , acNewRec
06 With Me.tBox出品名
07 .SetFocus
08 .SelStart = 0
09 .SelLength = 0
10 End With
 
01〜05の一部分をコメントアウトしただけでは症状が改善されません。
最終行に移動させる処理だけコメントアウトしても
レコードを移動させる処理だけをコメントアウトしても
新規レコードへ移動させる処理だけをコメントアウトしても
改善されない。
全てをコメントアウトすれば症状が出ない。
レコードソースを切り替えなくても症状が出ない。
つまるところ、原因がわかりません。

回答
投稿日時: 20/06/22 13:15:56
投稿者: sk

引用:
実行しないようにすると、発生しません。
この、フレーム押下による主な処理はレコードソースを変更することです。
だから、レコードソースを設定するコード
Me.RecordSource = strSQL
実行しなければこの現象は起きません

引用:
次に行う処理はレコードの移動、フォーカスの移動です。

引用:
01 With Me.Recordset
02 .MoveLast
03 .Move -15 ★
04 End With
05 DoCmd.GoToRecord , , acNewRec

引用:
01〜05まで全てをコメントアウトすると、正常に動作します。

[flm処理]が非連結オプショングループではなく
連結オプショングループになっている、ということはないでしょうか。

投稿日時: 20/06/22 14:39:43
投稿者: takodo

skさん、レス有り難うございます。

引用:
[flm処理]が非連結オプショングループではなく
連結オプショングループになっている、ということはないでしょうか。

コントロールソースを設定していないかということですよね。
していません。

回答
投稿日時: 20/06/22 16:30:41
投稿者: sk

引用:
コントロールソースを設定していないかということですよね。
していません。

では今のところ、現時点で明らかにされている情報を元に
同じような帳票フォームをを作成してみても、その現象の
再現性は認められません。
 
ただ申し上げられるのは、「 RecordSource プロパティの書き換え」、
「 Move 系メソッドの実行」、「 GoToRecord メソッドの実行」に共通しているのは、
そのフォームのカレントレコードの移動が行なわれる点である、
ということぐらいです。
 
例えば、それらの操作に伴って別のイベント(フォームの Current イベント等)の
処理が走っており、それがオプショングループに何らかの影響を及ぼしている、
といった可能性が挙げられます。
 
また、もう1点気になるのは以下のご説明です。
 
引用:
(2)のときに押下状態が変化しません。つまりクリックしてもへこんだ状態になりません

「ボタンを押し続けている間( MouseDown / KeyDown )は一応へこんでいるが、
ボタンを離す( MouseUp / KeyUp )と元に戻ってしまう」のか、
「ボタンを押しても全くへこまない」のかでは、恐らくその原因も
異なってくるはずです。

投稿日時: 20/06/23 06:29:25
投稿者: takodo

skさん、重ねて貴重な情報を有り難うございます。

引用:
共通しているのは、
そのフォームのカレントレコードの移動が行なわれる点である、
ということぐらいです。

カレントレコードの移動について、msgBoxなどを使って走査しているのですが見つけられません。
 
引用:
「ボタンを押し続けている間( MouseDown / KeyDown )は一応へこんでいるが、
ボタンを離す( MouseUp / KeyUp )と元に戻ってしまう」のか、
「ボタンを押しても全くへこまない」のかでは、恐らくその原因も
異なってくるはずです。

クリックすると一端へこんだ状態になり、レコードソースが切り替わりその後に画面が変わると、へこんだ状態のボタンがへこんでいない状態に戻ってしまいます。

回答
投稿日時: 20/06/23 09:50:28
投稿者: sk

引用:
クリックすると一端へこんだ状態になり、レコードソースが切り替わり
その後に画面が変わると、へこんだ状態のボタンがへこんでいない状態に
戻ってしまいます。

では恐らく、一連の処理が完了した時点において
[flm処理]の値が 1, 2, 3 以外の値になっているのではないでしょうか。
 
引用:
カレントレコードの移動について、msgBoxなどを使って
走査しているのですが見つけられません。

とりあえず、ステップイン実行とウォッチウィンドウの機能を利用して
デバッグ作業を進められることをお奨めします。

投稿日時: 20/06/23 10:22:01
投稿者: takodo

skさん、貴重なアドバイスを有り難うございます。

引用:
では恐らく、一連の処理が完了した時点において
[flm処理]の値が 1, 2, 3 以外の値になっているのではないでしょうか。

レコードソースを変え、その後レコード移動をし、一連の処理が終わってからの[flm処理]の値を調べました。
値は、「2」でした。つまりクリックしたトグルボタンの値です。
これらの処理が終わった後でどのようなイベントが発生しているかわかりません。
ググってみましたが、
マイクロソフトアクセスで発生しているイベントを調べる方法
でヒントになる情報はありませんでした。
 
引用:
カレントレコードの移動について、msgBoxなどを使って
走査しているのですが見つけられません。
とりあえず、ステップイン実行とウォッチウィンドウの機能を利用して
デバッグ作業を進められることをお奨めします。

可能な限り、各イベントについて[flm処理]の値を調べましたが不自然な値が表示されることはありませんでした。

回答
投稿日時: 20/06/23 15:19:35
投稿者: sk

引用:
レコードソースを変え、その後レコード移動をし、
一連の処理が終わってからの[flm処理]の値を調べました。
値は、「2」でした。つまりクリックしたトグルボタンの値です。

現状では「公開されていない部分のコードに何らかの問題がある」か、
「 Access の画面描画処理に何らかの影響を及ぼす不具合(のような現象)」の
いずれかだろう、としか申し上げようがないですね。
 
引用:
Private Sub flm処理_Click()
    Dim tmp
    Select Case Me.flm処理
        Case Me.tBtn1.OptionValue
            処理1
        Case Me.tBtn2.OptionValue
            処理2
        Case Me.tBtn3.OptionValue
            処理3
    End Select
End Sub

Private Sub flm処理_Click()
    Dim tmp 'この変数は何のために使っているのか
    Me.Painting = False
    Select Case Me.flm処理
        Case Me.tBtn1.OptionValue
            処理1
        Case Me.tBtn2.OptionValue
            処理2
        Case Me.tBtn3.OptionValue
            処理3
    End Select
    Me.Painting = True
    Me.Repaint
End Sub
------------------------------------------------------------
 
例えば以上のようなコードを挿入してみても改善しないのでしょうか。
 
また、各トグルボタンの[テーマの使用]プロパティは
「はい」と「いいえ」のどちらを設定されているのでしょうか。

投稿日時: 20/06/23 16:13:12
投稿者: takodo

重ねて迅速に教えていただきありがとうございます。

引用:
Dim tmp 'この変数は何のために使っているのか

これは、各処理を関数で記載しているためその返値を得るために使用しています。
tmp=procedure01()
 
引用:
Me.Painting = False
    Me.Painting = True
    Me.Repaint
例えば以上のようなコードを挿入してみても改善しないのでしょうか。

ダメでした。
 
引用:
また、各トグルボタンの[テーマの使用]プロパティは
「はい」と「いいえ」のどちらを設定されているのでしょうか。

Access2003です。
各トグルボタンの[テーマの使用]プロパティ
見つかりません。
 
レコード数についてですが、以前、各処理でのレコード数はいずれも15以上と記載しました。
処理2のときのレコード数が25以上ほどになるようにダミーデータを追加しました。
すると、
こんどは、処理1でトグルボタンがへこまないというようになってしまいました。
レコードを移動させるところが問題。
しかし、
On Error GoTo
でのエラー処理にも引っかからない。
以前書いたように、このレコードの移動をしなければ、今回問題にしてる事象も発症しないです。
へこむか、へこまないかだけで、処理は確実に実行できているので
こだわりを止めようか。とも思いますが。
でも、原因がわからないままというのは、つらいです。

回答
投稿日時: 20/06/23 17:09:20
投稿者: sk

引用:
Access2003です。
各トグルボタンの[テーマの使用]プロパティ
見つかりません。

もし Windows 10 環境に Access 2003( Office 2003 )を
インストールして使用されているということなのであれば、
その環境固有の現象なのかもしれませんね。
(既にサポートが切れているバージョンである上、
Windows 10 上での動作保証はされていないため、
そういう環境で運用されているケースは少なく、
他のユーザーによる検証報告はあまり期待できません)
 
引用:
へこむか、へこまないかだけで、処理は確実に実行できているので
こだわりを止めようか。とも思いますが。

あとは別の種類のコントロール(オプションボタンやチェックボックスなど)でも
同じ現象が起こるかどうかを調査するぐらいでしょうか。

投稿日時: 20/06/25 10:42:28
投稿者: takodo

skさん、何回にもわたりアドバイスをいただき有り難うございました。
とりあえずは一度この質問を閉じます。
どうも、ありがとうございました。