
AというフォームからBというフォームを開く際、AフォームのVisibleをFalseにし、Bのフォームを閉じる際、AというフォームのVisibleをTrueにするようにしました。
そうしたところ、Bというフォームを開いた状態でAccessの右上の×ボタンをクリックすると、エラーが出るようになりました。
エラー内容より、上記手順の場合、すでにAフォームが閉じている状態で、AフォームのVisibleをTrueにしようとしているためだと思いました。
そのため、Aフォームが開いている場合のみ、AフォームのVisibleをTrueにしたいと思ったのですが、どのように記述すれば良いか分からなかった為、アドバイスいただける方がいらっしゃいましたら、ご教示の程よろしくお願いします。
以上、宜しくお願いします。
No.1ベストアンサー
- 回答日時:
OfficeのSamplesにあるNorthWindowのユーティリティ関数
のIsLoaded関数を使用します。
標準モジュールに以下の関数を貼り付け保存します。
Function funcIsLoaded(ByVal strFormName As String) As Boolean
Const conObjStateClosed = 0
Const conDesignView = 0
If SysCmd(acSysCmdGetObjectState, acForm, strFormName) <> conObjStateClosed Then
If Forms(strFormName).CurrentView <> conDesignView Then
funcIsLoaded = True
End If
End If
End Function
Bを閉じるときのイベントを以下のように
設定します。
Private Sub Form_Close()
If funcIsLoaded("A") = True Then
Forms!A.Visible = True
End If
End Sub
ご回答ありがとうございます。
ご教示いただいたソースで意図した動作となりました。
【フォーム:A】
Option Compare Database
Option Explicit
Private Sub command_form_open_b_Click()
On Error GoTo Err_command_form_open_b_Click
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = "B"
DoCmd.OpenForm stDocName, , , stLinkCriteria
Me.Visible = False
Exit_command_form_open_b_Click:
Exit Sub
Err_command_form_open_b_Click:
MsgBox Err.Description
Resume Exit_command_form_open_b_Click
End Sub
【フォーム:B】
Option Compare Database
Option Explicit
Private Sub Form_Close()
If funcIsLoaded("A") = True Then
Forms!A.Visible = True
End If
End Sub
【標準モジュール:Module1】
Option Compare Database
Option Explicit
Function funcIsLoaded(ByVal strFormName As String) As Boolean
Const conObjStateClosed = 0
Const conDesignView = 0
If SysCmd(acSysCmdGetObjectState, acForm, strFormName) <> conObjStateClosed Then
If Forms(strFormName).CurrentView <> conDesignView Then
funcIsLoaded = True
End If
End If
End Function
このたびはどうもありがとうございました。
以上、よろしくお願いします。
No.2
- 回答日時:
現在、『A』フォームのVisibleをTrueにする処理を行っているイベントで、
他に、別フォームを参照した処理を行っていないようなら、エラー処理で
「'○○' フォームが見つかりません」エラーだけを無視するようにしまうのが
最も簡単かと思います。
但し、この方法を採ると、それ以外のエラーが発生した場合に、今まで
エラー発生時に表示されていた、『終了/デバッグ/ヘルプ』の選択肢
つきのメッセージボックスは表示されなくなるので注意してください(汗)
(下記コードの「On Error Goto エラー処理」の先頭に「'」をつけて
無効化した後に再度同じ処理を行えば、上記メッセージボックスは
再び表示されるので、必要に応じて「'」を追加/消去して切替)
※下記サンプルでは、その代わりにMsgBoxでエラー内容を表示させています。
(ボタンは「OK」のみ)
【現状】
'Closeイベントでの処理を想定
Private Sub Form_Close()
Forms!A.Visible = True
End Sub
【修正】
Private Sub Form_Close()
'エラー発生時に「エラー処理:」の行まで飛ばすための宣言
On Error Goto エラー処理
Forms!A.Visible = True
終了処理:
'エラー未発生時に「エラー処理」が行われるのを回避
Exit Sub
エラー処理:
If Err.Number = 2450 Then
'「実行時エラー '2450'」は無視して処理を継続
Resume Next
'即座に中断したい場合は以下を有効にして下さい
'Resume 終了処理
Else
'上記以外のエラー発生時は、MsgBoxで内容を表示
'(『終了/デバッグ/ヘルプ』の選択肢つきMsgBoxの代わり)
MsgBox Err.Number & ":" & Err.Description, vbCritical, Me.Name & " Close"
Resume 終了処理
End If
End Sub
・・・以上です。
1つのFunctionやSubの中で複雑な処理をやっている場合はお勧めできませんが、
そうでない場合は、覚えておくと他のエラーにも応用できますので、参考まで。
ご回答ありがとうございます。
ご教示いただいたソースで意図した動作となりました。
【フォーム:A】
Option Compare Database
Option Explicit
Private Sub command_form_open_b_Click()
On Error GoTo Err_command_form_open_b_Click
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = "B"
DoCmd.OpenForm stDocName, , , stLinkCriteria
Me.Visible = False
Exit_command_form_open_b_Click:
Exit Sub
Err_command_form_open_b_Click:
MsgBox Err.Description
Resume Exit_command_form_open_b_Click
End Sub
【フォーム:B】
Option Compare Database
Option Explicit
Private Sub Form_Close()
'エラー発生時に「エラー処理:」の行まで飛ばすための宣言
On Error GoTo エラー処理
Forms!A.Visible = True
終了処理:
'エラー未発生時に「エラー処理」が行われるのを回避
Exit Sub
エラー処理:
If Err.Number = 2450 Then
'「実行時エラー '2450'」は無視して処理を継続
Resume Next
'即座に中断したい場合は以下を有効にして下さい
'Resume 終了処理
Else
'上記以外のエラー発生時は、MsgBoxで内容を表示
'(『終了/デバッグ/ヘルプ』の選択肢つきMsgBoxの代わり)
MsgBox Err.Number & ":" & Err.Description, vbCritical, Me.Name & " Close"
Resume 終了処理
End If
End Sub
このたびはどうもありがとうございました。
以上、よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- JavaScript ラジオボタンによるフォームの開閉を行いたい 3 2022/03/31 21:30
- Visual Basic(VBA) VB.net フォーム 親子 1 2022/07/04 19:00
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- Access(アクセス) docmd.gotorecordを起動するには 5 2022/06/17 15:20
- JavaScript ソースコードは下の共有コードサイト「張り紙」にあります。 入力フォームの javascript で 1 2022/05/11 11:01
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Excel(エクセル) 【vba】日付の形式が勝手に変わってしまう。 1 2022/09/29 10:54
- JavaScript 空白で入力フォームのボタンをクリックしたら、ブラウザの上部からjavascriptで 表示されるアラ 1 2022/05/20 11:16
このQ&Aを見た人はこんなQ&Aも見ています
-
見学に行くとしたら【天国】と【地獄】どっち?
みなさんは、一度だけ見学に行けるとしたら【天国】と【地獄】どちらに行きたいですか? 理由も聞きたいです。
-
何回やってもうまくいかないことは?
みなさんには、何回やってもうまくいかないことはありますか?
-
もし10億円当たったら何に使いますか?
みなさんの10億円プランが知りたいです!
-
洋服何着持ってますか?
洋服を減らそうと思っているのですが、何着くらいが相場なのかわかりません。
-
思い出すきっかけは 音楽?におい?景色?
記憶をふと思い出すきっかけは 音楽、におい、景色 どれですか?
-
Access サブフォームでの選択行の取得
その他(データベース)
-
サブフォームに対してGoToRecordするには?
その他(Microsoft Office)
-
ラベルとテキストボックスのグループ化を解除したい
Access(アクセス)
-
-
4
アクセスでテキストボックスの値が空白だったら
Access(アクセス)
-
5
アクセスで外字を探す方法
Access(アクセス)
-
6
Access フォームのテキストボックスに半角英字のみで入力する設定は
Access(アクセス)
-
7
Accessのフォームで開く時のウィンドウサイズを指定する
Access(アクセス)
-
8
Access を×ボタンで閉じる時、レコード保存したくない。
Visual Basic(VBA)
-
9
アクセスで数値型のフィールドにNullをいれたい
その他(データベース)
-
10
accessVBA 「フォームが見つかりません」
その他(データベース)
-
11
ACCESS VBA ウィンドウを閉じる
Visual Basic(VBA)
-
12
アクセスでエラー このフィールドに入力した値が正しくありません
その他(データベース)
-
13
どこにもフォーカスを当てたくない
Access(アクセス)
-
14
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
15
サブフォームを非表示させる方法を教えて下さい
その他(Microsoft Office)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
【VB.NET】 パワポ操作を非表示で
-
お助けください!VBAのファイル...
-
VBAでfunctionを利用しようとし...
-
文字列内で括弧を使うには
-
On ErrorでエラーNoが0
-
マクロで"#N/A"のエラー行を削...
-
【VBA】ワークブックを開く時に...
-
String""から型'Double'への変...
-
VBA データ(特定値)のある最...
-
ASPでこんなエラーが出たんです...
-
Excel vbaについての質問
-
ゴールシーク関数のマクロが作...
-
VB.net 重複チェックがしたいです
-
VBAのリストボックスで、横スク...
-
Perlのエラーについてご教授く...
-
Oracle Case文でのエラー(デー...
-
VB6とVB.NETでNullの扱いが違う?
-
Filter関数を用いた結果、何も...
-
VBでSQL文のUPDATE構文を使った...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
お助けください!VBAのファイル...
-
VBAでfunctionを利用しようとし...
-
【VBA】ワークブックを開く時に...
-
String""から型'Double'への変...
-
マクロで"#N/A"のエラー行を削...
-
文字列内で括弧を使うには
-
VBA データ(特定値)のある最...
-
On ErrorでエラーNoが0
-
LaTeXのエラーについて(コンパ...
-
Filter関数を用いた結果、何も...
-
ACCESSで値を代入できないとは?
-
Excel vbaについての質問
-
インポート時のエラー「データ...
-
ApplicationとWorksheetFunctio...
-
実行時エラー 438 の解決策をお...
-
VBでSQL文のUPDATE構文を使った...
-
pythonのopenpyxlについて
-
【Access】Excelインポート時に...
-
SQLでエラーです。
おすすめ情報