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も見ています
-
あなたの「必」の書き順を教えてください
ふだん、どういう書き順で「必」を書いていますか? みなさんの色んな書き順を知りたいです。 画像のA~Eを使って教えてください。
-
「平成」を感じるもの
「昭和レトロ」に続いて「平成レトロ」なる言葉が流行しています。 皆さんはどのようなモノ・コトに「平成」を感じますか?
-
【お題】引っかけ問題(締め切り10月27日(日)23時)
【大喜利】 「日本で一番高い山は富士山……ですが!」から始まった、それは当てられるわけ無いだろ!と思ったクイズの問題
-
あなたは何にトキメキますか?
「きゅんとした〜♪」 と思う瞬間ってありますよね。 それは恋愛だったり、推し活だったり、映画のワンシーンだったり……。
-
【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
【お題】 ・急に朝起こしてきた母親に言われた一言とは?
-
accessVBA 「フォームが見つかりません」
その他(データベース)
-
Accessのフィールド数が255しかない=業務では使えない?
PowerPoint(パワーポイント)
-
Access サブフォームでの選択行の取得
その他(データベース)
-
-
4
Access2010 「演算子がありません」エラー
その他(データベース)
-
5
ACCESSのクエリで集計で、先頭・最後とは?
その他(データベース)
-
6
Accessで、フォームからフォームへ値を引き継ぐやり方
Access(アクセス)
-
7
アクセスで#エラーを表示させない方法は?
Access(アクセス)
-
8
【アクセス】複数の条件のDSumを記述したい
Excel(エクセル)
-
9
サブフォームに対してGoToRecordするには?
その他(Microsoft Office)
-
10
access別のテーブルを参照してテキストボックスに値を表示、編集したい
Access(アクセス)
-
11
Accessでフォームから別フォームのテキストボックスの値を設定する
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・ハマっている「お菓子」を教えて!
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
【VBA】ワークブックを開く時に...
-
VBAでfunctionを利用しようとし...
-
On ErrorでエラーNoが0
-
文字列内で括弧を使うには
-
VBA データ(特定値)のある最...
-
データベース操作時エラーについて
-
ACCESS2007 VBA 「INSERT INTO...
-
お助けください!VBAのファイル...
-
フランスの生年月日(jj/mm/aaaa)
-
String""から型'Double'への変...
-
F9キーを実行するVBスクリ...
-
「実行時エラー '3167' レコー...
-
JAVA Jasper Report でのQRコー...
-
Excel vbaについての質問
-
SQLでエラーです。
-
実行時エラー'-2147467259(8000...
-
VBAコード実行を中止する方法は...
-
マクロ計算で%計算のやり方
-
(マクロ)コピー貼付のマクロで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
VBAでfunctionを利用しようとし...
-
String""から型'Double'への変...
-
【VBA】ワークブックを開く時に...
-
マクロで"#N/A"のエラー行を削...
-
VBA データ(特定値)のある最...
-
お助けください!VBAのファイル...
-
文字列内で括弧を使うには
-
On ErrorでエラーNoが0
-
「実行時エラー '3167' レコー...
-
【Access】Excelインポート時に...
-
インポート時のエラー「データ...
-
ACCESSで値を代入できないとは?
-
実行時エラー 438 の解決策をお...
-
Excel vbaについての質問
-
【VBAエラー】Nextに対するFor...
-
Filter関数を用いた結果、何も...
-
ApplicationとWorksheetFunctio...
-
エクセルVBAで埋め込みグラフ(C...
-
VBでSQL文のUPDATE構文を使った...
おすすめ情報