
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も見ています
-
Access「レコードが削除されました」のエラー
Access(アクセス)
-
アクセスでテキストボックスの値が空白だったら
Access(アクセス)
-
accessVBA 「フォームが見つかりません」
その他(データベース)
-
-
4
dbFailOnError とは?
その他(データベース)
-
5
Access サブフォームでの選択行の取得
その他(データベース)
-
6
Access を×ボタンで閉じる時、レコード保存したくない。
Visual Basic(VBA)
-
7
なぜエラーになるのでしょう?アクティブコントロール
その他(Microsoft Office)
-
8
ACCESS VBA ウィンドウを閉じる
Visual Basic(VBA)
-
9
サブフォームに対してGoToRecordするには?
その他(Microsoft Office)
-
10
サブフォームを非表示させる方法を教えて下さい
その他(Microsoft Office)
-
11
サブフォームの新規レコードに移動したい アクセス
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
マクロOn Error GoTo ErrLabel...
-
if関数の順番 iserrorが認識さ...
-
VBA 空白行の削除
-
VBAでfunctionを利用しようとし...
-
OpenOffice Basicで簡単な関数...
-
UserForm1.Showでエラーになり...
-
On Error GoTo でエラーが発生...
-
ApplicationとWorksheetFunctio...
-
現在、HP作成業者さんがつく...
-
ExcelにSQLの結果を表示
-
WindowsのプロダクトIDを取得す...
-
検索Find処理を2重、3重とす...
-
インポート時のエラー「データ...
-
EnableWindow()後のGetLastError()
-
オブジェクト型の変数にフォー...
-
VBA データ(特定値)のある最...
-
実行時エラー'1004'の詳細と回...
-
VBA変数をFunction.VLookupの戻...
-
条件式について
-
エクセルVBAの二重ループについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
お助けください!VBAのファイル...
-
VBAでfunctionを利用しようとし...
-
String""から型'Double'への変...
-
【VBA】ワークブックを開く時に...
-
文字列内で括弧を使うには
-
マクロで"#N/A"のエラー行を削...
-
Excel vbaについての質問
-
VBA データ(特定値)のある最...
-
On ErrorでエラーNoが0
-
ApplicationとWorksheetFunctio...
-
【Access】Excelインポート時に...
-
インポート時のエラー「データ...
-
実行時エラー 438 の解決策をお...
-
オブジェクト型の変数にフォー...
-
.VBSだとADODBのプロバイダが見...
-
実行時エラー'-2147467259(8000...
-
【VB.NET】 パワポ操作を非表示で
-
フランスの生年月日(jj/mm/aaaa)
-
【VBAエラー】Nextに対するFor...
おすすめ情報