• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:クリックイベントなのに、2回クリックしないとフォー)

クリックイベントでフォームが閉じない理由と対策

このQ&Aのポイント
  • 2回クリックしないとフォームが閉じない理由と対策について解説します。
  • フォームを閉じるためのコマンドボタンのクリックイベントが1回では反応せず、2回目のクリックでフォームが閉じる現象が発生しています。
  • この現象はフォームの名前を指定せずに閉じようとしているため起こるものであり、Me.Nameではなく具体的なフォーム名を指定することで1回のクリックでフォームを閉じることができます。

質問者が選んだベストアンサー

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.1

【対応策】 OpenFormでは、以下の構文を使用するようにします:   DoCmd.OpenForm "Fフォーム", acNormal Closeでは、以下のどちらかの構文を使用します:   DoCmd.Close acForm, "Fフォーム"   DoCmd.Close acForm, Me.Name (または、「Const cForm As String = "Fフォーム"」と定数を宣言しておいて  「DoCmd.OpenForm cForm, acNormal」等とします) 【原因・理由】 ご推測の通り、原因はFフォームの開き方にあります。 実は、「Form_Fフォーム.Name」といったように「Form_Fフォーム」を何らかの 形で参照した場合、そのフォームが非表示で展開されてしまいます。 (「Form_Fフォーム.Visible = True」とすると、表示させることができます) さらに、この方法を使用した場合、同じフォームを同時に複数展開させることが 可能になります。 <参考> http://okwave.jp/qa/q7778972.html この結果、   1)Form_Fフォーム.Nameの参照により、Fフォームが非表示で展開   2)DoCmd.OpenFormにより、Fフォームが通常表示で展開 と、Fフォームは二重で開かれることになります。 そのため、DoCmd.Closeを呼び出した際は、   まず「1」によって、先に展開された非表示のFフォームが閉じられ、   2回目の呼び出しでようやく「2」の通常表示のFフォームが閉じられる、 ということになり、見た目としては「2回クリックしないと当該フォームが閉じない」 という動作になっている、ということです。   従って、OpenFormでは「Form_フォーム1」を参照するのではなく、冒頭に提示 したように定数式を使用します。 (なお、上記参考URLで触れているように、同じフォームを意図的に複数表示  したいなどの特殊な場合には、【OpenForm】は使わずに、【Form_Fフォーム】  の方法だけを使用します) また、これは「DoCmd.Close」を行う場合も同様で、そこで「Form_Fフォーム」を 参照してしまうと、表示済みのFフォームが閉じられる一方で、非表示のFフォーム が展開されてしまいます。 ですので、この場合も同様に定数式を使用するか、既に展開済みの「自身」を 参照する(=新たにFフォームが非表示で展開されたりしない)「Me.Name」を使用 します。 【余談】 「Form_Fフォーム.Name」を参照するだけで本当に非表示で展開されているか どうかは、以下の方法で確認できます: 1)開いているフォームを一旦全て閉じる 2)Ctrl+Gキーの同時押しなどでイミディエイト ウィンドウを開く 3)現在開いているフォームの数を確認するため、「?Forms.Count」と入力して  Enterキーで改行  →次行に「0」が表示される 4)その次の行に、「?Form_Fフォーム.Name」と入力して、Enterキーで改行  →次行に「Fフォーム」が表示される 5)「?Forms.Count」と入力した行に戻って、Enterキーで改行  →次行に「1」が表示される(=1つのフォームが開かれている) 6)一番下の行に移動して、「?Forms(0).Name」と入力して、Enterキーで改行  →「Fフォーム」が表示される(=開かれたのがFフォームだとわかる)

GVHZUWNTL3
質問者

お礼

回答ありがとうございました。

関連するQ&A