
こんばんわ!
エクセルのVBAを使った管理システムを作ろうと思うのですが、色々考えて下記のような状態にしてみたのですが、ユーザーフォームをモードレスにするとスタック容量が足りなくなります。
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
bbb_date(ユーザーフォーム)に↓
Private Sub CommandButton1_Click()
Range("a1") = 2
Unload Me
End Sub
Private Sub CommandButton2_Click()
Range("a1") = 3
Unload Me
End Sub
ccc_date(ユーザーフォーム)に↓
Private Sub CommandButton1_Click()
Range("a1") = 1
Unload Me
End Sub
Private Sub CommandButton2_Click()
Range("a1") = 3
Unload Me
End Sub
ddd_date(ユーザーフォーム)に↓
Private Sub CommandButton1_Click()
Range("a1") = 1
Unload Me
End Sub
Private Sub CommandButton2_Click()
Range("a1") = 2
Unload Me
End Sub
※bbb_dateとccc_dateとddd_dateはそれぞれにあるボタンを押すとA7セルの値を変更するようにして、aaa_dateでどのフォームを表示するのかを選択しています。
※実際にはもっと沢山ユーザーフォームがあります。
上記の状態では動作するのですが、エクセルの表に値を入力したいので、bbb_dateとccc_datとddd_datをvbModeless(モードレス状態)にすると、スタック容量が足りませんと出ます。
別のやり方でもよいですので、ユーザーフォームを切り替える良い方法があったらお願いします。

No.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
No.1
- 回答日時:
>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コントロールを使うなどして仕様も見直したほうが良いのかもしれません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
えエクセルで○は1とし△は0.5で...
-
VBAで組み合わせ算出やCOUNTIFS...
-
EXCELで2つの数値のうち大きい...
-
Excelで隣のセルと同じ内容に列...
-
PowerPointで表の1つの列だけ...
-
エクセルでオートフィルタのボ...
-
エクセル(勝手に太字になる)
-
行を飛ばして検索条件にあう個...
-
エクセルのオートフィルタで最...
-
エクセルで、2種類のデータを...
-
エクセルで時刻(8:00~20:00)...
-
エクセル 時間帯の重複の有無
-
エクセルで2列のセルを連続して...
-
Excelのオートフィルタで非表示...
-
エクセルのセル内の文字の一部...
-
隣のセルに入力したら自動的に...
-
エクセルで年月の合計の関数を...
-
桁の違う数値での並び替え
-
エクセルの項目軸を左寄せにしたい
-
エクセルVBAで別BOOKに「名前の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
えエクセルで○は1とし△は0.5で...
-
UWSCのCALLで呼び出すファイル...
-
サンダーバードの移行ツール
-
どうして急に3分の4が出てくる...
-
Excel ユーザーフォームのオプ...
-
この問題の解き方と答えを教え...
-
VBAで組み合わせ算出やCOUNTIFS...
-
VBA スタック容量が足りない・...
-
誰か解いてください!
-
Susieのスライドショーにて
-
エクセルのマクロを使って、デ...
-
数学Ⅲ
-
絶対値の取り方
-
数IIBの数列の問題、、、
-
EXCELで2つの数値のうち大きい...
-
2つのエクセルのデータを同じよ...
-
PowerPointで表の1つの列だけ...
-
Excelで隣のセルと同じ内容に列...
-
エクセルで二つの数字の小さい...
-
エクセルでオートフィルタのボ...
おすすめ情報