🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

2回答

2502閲覧

Access VBA フォームを表示しているか確認する

Yoshikun_0945

総合スコア224

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2019/10/21 07:36

前提・実現したいこと

Access VBAを使用して
ナビゲーションフォームのサブフォームエリアに"F02-1_注文"(サブフォーム)を表示しているかを判定させたいです。

発生している問題・エラーメッセージ

下記のコードだと、開いていないという結果でした。
どのように修正すればよろしいでしょうか?

該当のソースコード

VBA

1 Dim varRet As Variant 2 3 'フォーム "F02-1_注文" の状態を取得します。 4 varRet = SysCmd(acSysCmdGetObjectState, acForm, "F02-1_注文") 5 6 '「SysCmd」が返す値から"F02-1_注文" の状態を表示します。 7 Select Case varRet 8 Case 0 9 MsgBox "開いていないか、存在しません" 10 Case 1 11 MsgBox "開いています" 12 Case 5 13 MsgBox "新しいフォームです" 14 Case 7 15 MsgBox "編集されましたが、まだ保存されていません" 16 End Select

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2019/10/21 08:07

サブフォームはサブフォームコントロールにコントロールソースとしてフォームを設定しますが、開いているかどうかとはどのような状態ですか? 表示するサブフォームを切り替えるというならコードで設定するはずですから、判別は不要だと思うのですが。
Yoshikun_0945

2019/10/21 08:12 編集

たとえば、”F02-1注文”というサブフォームをナビゲーションフォームにて表示しているときは、"F02-1_注文"をナビゲーションフォーム上の移動ボタン経由で再ロードしないという処理を行いたいです。
sazi

2019/10/21 08:27

ナビゲーションフォームはメニューの意味合いを持ちますが、F02-1_注文を一旦開くと、他のフォームへは移動させないという事ですか?
Yoshikun_0945

2019/10/21 08:59

F02-1_注文を表示させたら、再度同じボタンを押せないようにする 同じサブフォームを再表示させないという意味合いです。 Enabled = False だと文字色が鼠色になってしまうのが都合が悪い為です。
guest

回答2

0

ベストアンサー

下記のコードで現在表示されているサブフォームの名前が取得できます。

vba

1Me.NavigationSubform.SourceObject

私は、ナビゲーションフォームは制御が難しいので、標準以外の動作をさせたいときは使わないです。


いちおう下記のようなコードで現在のサブフォームを再読み込みはできないようにすることは可能のようです。

vba

1Private Sub 移動ボタン1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) 2 Dim sf As String 3 f = Me.NavigationSubform.SourceObject 4 If sf = "F02-1_注文" Then 5 Me.コマンド11.SetFocus '透明ボタンへフォーカス移動 6 End If 7End Sub

MouseDown で強制的にフォーカス移動させることで、クリックイベントを抑制する。

投稿2019/10/21 10:34

編集2019/10/21 11:10
hatena19

総合スコア34073

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

F02-1_注文を表示させたら、再度同じボタンを押せないようにする
同じサブフォームを再表示させないという意味合いです。
Enabled = False
だと文字色が鼠色になってしまうのが都合が悪い為です。

ボタン以外だと、EnabledとLocked を組み合わせれば、グレーアウトしないように出来ますけど、ボタンにはlockedがないので、出来ませんし移動ボタンは楽ができる分制御は難しそうです。

自作するしかなさそうですね。

投稿2019/10/21 10:05

sazi

総合スコア25327

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問