実現したいこと
VBAでUserform起動時に落ちる問題を解消したい
発生している問題・エラーメッセージ
業務でVBAのユーザーフォームを使って開発したのですが、入力項目が多くtextboxやlabel,combboxなどが100個近く存在する仕様になっているのですが、これが原因なのか特定できず、Userform1.showすると頻繁に落ちます。
さらに仕様でUserformが閉じているか判定して、ワークシートに選択したセルによって行に色をつける事をおこなっているのですが、コンパイルする言語でコードを保存し忘れて動かした時のように、
intNum = 1
という記述があっても、変数に値が入らずその後の処理が動かないような状態になってしまっていて困り果てております。
エラートラップを仕込んでいても、関係なく落ちます。
該当のソースコード
VBA
1IF Userform1.Visible Then 2 '処理 3Else 4 '開いていようが閉じていようがこちらが選択される 5End if 6 7'ユーザーフォームを閉じるときにintNum = 0 を入れる 8intNum = 1 '←を通過してもintNumは0が入り続ける
試したこと
・Object型変数を使用して使った後はNothingで消去。 ←変わらず落ちる
・Userformを起動する際にNewして起動するように変更 ←変わらず落ちる
https://teratail.com/questions/70370
・新たなBookにUserformをインポートして作り直した。 ←変わらず落ちる
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14228025529
現在新しい、Bookを作ってエクスポートとインポートを繰り返し、作り直してテストしております。少し軽くなったような気がしていますが、これでもダメだった時はどうしていいのか?.Net等で作り直すしかないのか不安です。
このような状態になった時は何が起きているのでしょうか?
このような事にならないためにもVBAはメモリを意識して書かないといけないのか?
このような状態の解決方法がお分かりになられる方いらっしゃいましたらご教授ください。
よろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
Excel2016
メモリ4Gと8Gの両方のPCが存在するが、どちらかで落ちる現象を確認したら、どちらのPCでも同じ操作をすると同じ落ち方をします。
追記
落ちる原因と対策
1、シートの保護
シートに保護をかけているのですが
'シートの保護を有効にする(VBAのみシート内操作が可能) ThisWorkbook.Worksheets("Sheet1").Protect UserInterfaceOnly:=True ThisWorkbook.Worksheets("Sheet1").Cells(2, 1).Value = "AAA"
値を入れようとすると落ちる時がある。(ステップ実行で確認)
値を入れる前に保護を全て一度外し、最後にまたかけるという処理に変更
2、モジュール内に関数の書き方を間違えていて使えないコードがある(使っていない関数)
朝一PC起動後に開いたら
「DLLが正しく読み込めませんでした。」
とみたことのないエラーメッセージが出現。(関数を読み込む行)
しかしデバッグで進めるので、ステップ実行するとこの位置で確実に落ちる。
このモジュールを読み込む際に何かあるのか?と思い、普段やらないデバッグのVBAProjectのコンパイルを実行すると、使っていない関数があり、IsDateの書き方を間違えていて「引数が不正です」と表示される箇所がありました。これを一時的に読み込んでしまっているのか?と思いコメントアウトすると、落ちる行が落ちなくなりました。

あなたの回答
tips
プレビュー