[[20050510220630]] 『コンパイルエラー:プロシャージが大きすぎます』(超初心者) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『コンパイルエラー:プロシャージが大きすぎます』(超初心者)
 お疲れ様です。
 お伺いさせてください。
 ユーザーフォーム作成中です。
 コンボボックス1の値により、データベース(シート部品A)
 からの情報をテキストボックス1、2,3・・・と、
 それぞれに値を代入する、というものを作っています。
 とりあえずこんなもんです。

Private Sub コンボボックス1_Change()

  If コンボボックス1.Value = "商品A" Then
    テキストボックス1.Value = Sheets("部品A").Range("C2").Offset(コンボボックス1.ListIndex).Value
  テキストボックス2.Value = Sheets("部品A").Range("D2").Offset(コンボボックス1.ListIndex).Value
 ElseIf コンボボックス1.Value = "商品B" Then
  テキストボックス1.Value = Sheets("部品A").Range("C2").Offse(コンボボックス1.ListIndex).Value
    テキストボックス2.Value = Sheets("部品A").Range("D2").Offset(コンボボックス1.ListIndex).Value
               .
             .
                          .

 EndIf
End Sub
 となっています。

シート部品Aは

    A    B    C    D
1        
2  商品A        aaa    bbb
3  商品B            CCC     DDD
                 .
                 .
                 .
となってます。

(わかりにくくてすいません)

 下にどんどん書き足していくと、
 「コンパイルエラー:プロシャージが大きすぎます」
 って出るんですが、どうしたらよいでしょうか?
 このプロシージャーの中には、それ以上かけないってことでしょうか?
 私はコンボボックス1で表現したいんですが無理なんでしょうか?

 幼稚な質問ですがお願いいたします。。

 エラーメッセージまんまです。
プロシージャが大きすぎます。

 プロシージャとは、
Private Sub コンボボックス1_Change()
から始まり
End Sub
で終わるまでの間の事です。
この間に書かれている行数(と言うか文字数)が大きすぎる(書きすぎている)って事です。

 パッと見、なぜIfで条件分けしているのかが分かりませんが、
Private Sub コンボボックス1_Change()
    テキストボックス1.Value = Sheets("部品A").Range("C2").Offset(コンボボックス1.ListIndex).Value
  テキストボックス2.Value = Sheets("部品A").Range("D2").Offset(コンボボックス1.ListIndex).Value
End Sub
だけでは駄目なのでしょうか。
(ご近所PG)

(ご近所PG)さん、ありがとうございます。
 そのまんまなんですね。。
 文字数が決まっているってことですね。

 間違ってました。。すみません。

 If コンボボックス1.Value = "商品A" Then
    テキストボックス1.Value = Sheets("部品A").Range("C2").Offset(コンボボックス1.ListIndex).Value
  テキストボックス2.Value = Sheets("部品A").Range("D2").Offset(コンボボックス1.ListIndex).Value
 ElseIf コンボボックス1.Value = "商品B" Then
  テキストボックス1.Value = Sheets("部品B").Range("C2").Offset(コンボボックス1.ListIndex).Value
    テキストボックス2.Value = Sheets("部品B").Range("D2").Offset(コンボボックス1.ListIndex).Value
               .
             .
                          .

です。

 なにせ素人ですので・・(^^;

 なにかほかに方法ありますでしょうか?
 お願いいたします。
 先に進めません。

 Set ステートメントで文字数を減らす。
 With ステートメントで文字数を減らす。
それでもダメならプロシージャを分けるとか。
今回の場合IFで分岐させなくてもシート名を変数に格納してあげれば済みそうですが。
    sh = コンボボックス1.Value
    テキストボックス1.Value = WorkSheets(sh).Range("C2").Offset(コンボボックス1.ListIndex).Value
  テキストボックス2.Value = WorkSheets(sh).Range("D2").Offset(コンボボックス1.ListIndex).Value
(ケン)

(ケン)さん、早速のご回答ありがとうございますm(_ _)m

 現在記述途中で、600行くらいあるんです。
 ちなみに3000行くらい入れたいと思っておりました。
 自分の無知さにうなだれております。
 やはりプロシージャーを分けよう思います。

 (ケン)さん(ご近所PG)さん、ありがとうございました。
 また教えてください。

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.