質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

0回答

887閲覧

VBAでUserform起動時に落ちる、IF判定が正しくできない時がある

ataru2222

総合スコア272

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2022/12/22 13:44

編集2022/12/28 12:35

実現したいこと

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の書き方を間違えていて「引数が不正です」と表示される箇所がありました。これを一時的に読み込んでしまっているのか?と思いコメントアウトすると、落ちる行が落ちなくなりました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2022/12/22 14:59

CPUやメモリの使用状況はどうなっているのでしょうか?
ataru2222

2022/12/22 15:23

meg_様 CPUはIntel celronです。 タスクマネージャーで見る限りは、メモリの数値が振り切る事はない気がしております。
hawawa

2022/12/22 20:42

Userform1.showのところにブレークポイント設定して F8で1行ずつ実行してもshowのところで落ちるのでしょうか?
ataru2222

2022/12/22 21:21

VBEを起動するとユーザーフォームの立ち上げで落ちる事はないように感じます。 ただ、シートに書いてある、選択したセルの行に色をつけるマクロが動かない→ユーザーフォームの中で記載しているintNumの値がおかしいと思い、ステップ実行すると変数が機能しない状態になっています。 Userform.visibleが正常に判定できないので、ユーザーフォームを閉じる時にグローバル変数に0を格納するような二段構えにしたのですが、この0でも判定できず、困ったことに適当な行にintNum=1を入力しても0が入り続けるという状態になっております。
odataiki

2022/12/25 06:20

質問文の実現したいことと該当のソースコードの内容が合致していません。 intNum の件の部分ではなく、UserFormのコントロールやShowする部分の開示がないと これ以上は判断しようがないと思います。
ataru2222

2022/12/25 12:57

odataiki様 業務アプリなので開示はできないのですが、とにかくコントロールが多いです。 それに伴うinitializeイベントの中身も多く、comboboxが読み込まれていない状態も発生しています。 このようなうまく行くときとうまくいかない時があり、それは何が起こっているのか? また変数が機能しなくなるような症状になった事がある方がいらっしゃればお話をお聞きしたいと考えております。
odataiki

2022/12/26 06:29

開示出来ない件は承知しました。諸々まずいこともあるでしょう。 ただ、回答する側としては想像であーだこーだと提案する他なく、 質問者さんにとって期待外れな提案になる可能性が大きいです。 ここの回答者の多くは不確定な状態での当てずっぽう提案ではなく ある程度情報が揃った状態で推理・考察される方がほとんどの為 回答が集まりにくい質問文だと思います。 開示出来ない場合 同じ現象が出る開示可能なソースコードを公開し 回答者の方に再現してもらい考察する という方法もあります。 かなり昔ですが、私自身再現可能なソースを作成して 下記サイトにて質問を募りました。 質問する側として正直かなり手間でしたが、無事回答を得ることが出来ました。 https://social.msdn.microsoft.com/Forums/vstudio/ja-JP/a227c4ef-6d5f-4ea6-ab15-94c8889a3bd9/windows81proaccessime?forum=vbajp
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問