プロが教えるわが家の防犯対策術!

アクセス2003について質問です。フォーム(1)、(2)、(3)があり、フォーム(3)上にはAボタンとBボタンがあります。フォーム(1)からフォーム(3)を開いた時はAボタンを使用可能(表示)し、Bボタンを使用不可(非表示)にしたいと考えています。反対にフォーム(2)からフォーム(3)を開いた時は、Aボタンを使用不可(非表示)、Bボタンを使用可能(表示)にしたいです。理由はフォーム(1)や(2)の値をフォーム(3)の中に値代入しているのですが、フォーム(3)を共有しているのでマクロで別々のボタンAとBを作っているためす。どなたかよろしくお願いいたします。

A 回答 (3件)

追記。



参考。

Function IsLoaded(ByVal strFormName As String) As Integer
'*****
'***** 指定されたフォームが開いているかどうかを返す
'*****
'
Const conObjStateClosed = 0
Const conDesignView = 0

If SysCmd(acSysCmdGetObjectState, acForm, strFormName) <> conObjStateClosed Then
If Forms(strFormName).CurrentView <> conDesignView Then
IsLoaded = True
End If
End If

End Function

古いバージョンのときのものなので
動作確認をしてみてください。
「If IsLoaded("frm_印刷メニュー") = True Then」
こんな感じです。
    • good
    • 0

フォーム3のオープン時かアクティブ時Orロード時イベントに


Me!ボタンA.Visible = CurrentProject.AllForms("フォーム1").IsLoaded
Me!ボタンA.Visible = Not CurrentProject.AllForms("フォーム2").IsLoaded
Me!ボタンB.Visible = CurrentProject.AllForms("フォーム2").IsLoaded
Me!ボタンB.Visible = Not CurrentProject.AllForms("フォーム1").IsLoaded
のどれかを適宜変更して記述
かな?
    • good
    • 0

フォーム、どのフォームが開いているか確認できるテクニックがあります。

今すぐは教えられないのでネットで見つけてみて下さい。VBAでいつでも使える関数です。

これで
フォーム3のフォームロードのときフォーム1が開いているかフォーム2かを確認し、その結果でボタン制御します。


別途状態を保持するテーブル等作ってもいいですが同じチェックタイミング増えるたび設定値が膨らみます。使えませんね。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!