ExcelでVBAフォームを使用しているときに、私はある種の動作に遭遇しました。私は他のフォームを呼び出すためのハブとして機能するModelessフォームを呼び出すモジュールを持っています。他のフォームはModalとして呼び出されます。問題は、子フォームが隠されたりアンロードされたりするとすぐに、親のModelessフォームも閉じられるということです。終了時にモーダルフォームがすべてのモードレスオープンフォームを閉じるのを防ぐ
私はこれに対する答えを見つけようとしましたが、これらの行には疑問がありますが、答えが得られなかった人はいませんでした。
少しのテストの後、私は開いている任意の数のフォームが同じ方法で閉じられると決めました。さらに、新しいワークブックで最小限のモデルを使用して問題を再現することができませんでした。その後、元のワークブックのすべてのコンポーネント(いくつかのモジュール、10-20クラス、およびいくつかのフォームがあります)を追加して、問題がいつ発生するかを確認しました。
私は、絶対にすべてを戻しても問題が再現されないことがわかったとき、私は同時に安心して迷惑になりました。私の結論は、これは私をもう一度気にしないであろう一種の虫だったということでした。しかし、まもなく、同一の呼び出しコードを持つ別の子フォームを追加すると、同じものが新しいもので再び発生し始めましたが、古いものでは起こりませんでした。
次に、誤動作しているフォームをエクスポートし、ブックから削除してからインポートします。そして、もう一度働いた。
以前にこのような動作が発生した人はいますか?私は何か間違っているのですか?あるいは、私はこれを厄介で回避可能なバグとして扱うべきですか?
すべてのコンテンツを除いて、問題の最小モデルの下ご覧ください:
Sub testA()
Dim main1 As MainForm1
Set main1 = New MainForm1
main1.Show (vbModeless)
End Sub
メインフォーム::
Option Explicit
Dim formobject As frmPickInjection
Private Sub CommandButton1_Click()
Set formobject = New frmPickInjection
With formobject
.Show (vbModal)
Label1.Caption = CStr(.SelectedInjection)
End With
End Sub
子フォーム:
メインフォームを呼び出すモジュール
Option Explicit
Public passvar As Boolean
Private Sub CheckBox1_Click()
passvar = CheckBox1.Value
End Sub
システム:Microsoft Windows 7のエンタープライズ6.1.7601(サービスパック1つのビルド7601)
Excelのバージョン:Office365エクセル2016(16.0.6729.1014)、64ビット
VBAのバージョン:7.1
魅力的!私はそれを解決することはできませんでしたが、回避策でOKです。すべてのフォームをエクスポートする - マクロに割り当てたすべてのフォームをインポートし直します。 このコマンドシーケンスを一度実行してから、しばらくの間それを修正する必要がありますか、これはフォームの呼び出しコードの一部でなければなりませんか? そして、好奇心を離れて - どうやってこれを見つけ出すのですか? –
私は実際にWinAPIのコマンドを含んでいますが、実際にはそれを使ってもっと良い解決策を見つけました。新しい解決策で上記の答えを修正します。 – Gnixxus