- ベストアンサー
VBAのスタック容量が足りない!ユーザーフォーム切り替えの方法を教えてください
- エクセルのVBAを使った管理システムでユーザーフォームをモードレスにするとスタック容量が足りなくなる問題が発生しています。bbb_dateとccc_dateとddd_dateのユーザーフォームにあるボタンを押すとA7セルの値を変更するように設定しています。しかし、モードレスにするとスタック容量エラーが発生します。別のユーザーフォーム切り替えの方法を教えてください。
- VBAを使用したエクセルの管理システムにおいて、ユーザーフォームをモードレスにするとスタック容量不足の問題が発生しています。具体的には、bbb_date、ccc_date、ddd_dateの3つのユーザーフォームがあり、それぞれのフォームにはボタンがあります。ボタンを押すとA7セルの値が変更されます。しかし、ユーザーフォームをモードレスにすると、スタック容量が足りなくなるエラーが発生します。ユーザーフォームの切り替え方法を教えてください。
- VBAを使ったエクセルの管理システムで、ユーザーフォームのモードレス化によりスタック容量不足のエラーが発生しています。bbb_date、ccc_date、ddd_dateという3つのユーザーフォームがあり、それぞれのフォームにはボタンが存在します。ボタンを押すとA7セルの値を変更します。しかし、モードレスにするとスタック容量のエラーが出ます。ユーザーフォームを切り替える良い方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
はじめまして、 下記のプロシージャのCall aaa_date の部分は自分自身を呼び出しているので、 再帰呼び出しになるかな、VBAではエラーになる若しくはなりやすい処理の仕方です。 ※実際にはもっと沢山ユーザーフォームがあります。 とのことですが、もしデザインが同一であれば雛形を作り中のデータなど はコード内から変更します。フォームの表題であれば、.caption = 何何 となるはず。 メインフォーム ↓ 項目を選択 → コード ↓ ↓ ユーザーフォームのデザインを選択 ↓ ↓ 雛形のデータを変更 ↓ ← ユーザーフォーム表示 Sub aaa_date() If Range("a1") = 1 Then bbb_date.Show ElseIf Range("a1") = 2 Then ccc_date.Show ElseIf Range("a1") = 3 Then ddd_date.Show End If Call aaa_date End Sub
その他の回答 (1)
- end-u
- ベストアンサー率79% (496/625)
>Sub aaa_date() >If Range("a1") = 1 Then >bbb_date.Show >ElseIf Range("a1") = 2 Then >ccc_date.Show >ElseIf Range("a1") = 3 Then >ddd_date.Show >End If >Call aaa_date >End Sub このコードは実際のコードですか? どういう意図で書きました? Sub aaa_date()の中で Call aaa_date 自分自身をCallしていて、終了条件がありません。 bbb_dateやccc_dateをモードレスで開くと無限Loopですからスタック不足になります。 コードもそうですが >※実際にはもっと沢山ユーザーフォームがあります。 どれくらい沢山なのかにもよりますが TabStripやMultiPageコントロールを使うなどして仕様も見直したほうが良いのかもしれません。