|
▼ぺっぱー さん:
こんばんは。
>
>ユーザーフォームのOptionButtonのイベントプロシージャを
>書いているのですが、行数が長すぎてしまうため
>「プロシージャが大きすぎます」とエラー文が出てしまいました。
>
>そこで、途中までイベントを書いて
>残りを標準モジュール内に書き、Callを使って呼び出そうと考えました。
>ですが、標準モジュール内に書いた文章にはフォーム内で使われている
>TextBoxのオブジェクト名や、フォーム内で使用している変数が載っています。
まず、標準モジュールに記述すべきプロシジャーか否かをよくよく検討してみてください。
このような場合に標準モジュールにプロシジャーを記述する理由としては、
そのプロシジャーが他のモジュールからも呼び出される可能性があるような
汎用的な機能を持ったプロシジャーである場合が考えれます。
例えば、印刷関連を一手に引き受けてくれるプロシジャーとか
いろんな種類のファイルの読み込みや書き込みを行うプロシジャーといったように
再利用可能なプロシジャー等。
今回の標準モジュールに記述したプロシジャーがそのような汎用性を持っているか
否かを検討してみてください。
もし、標準モジュールに記述した内容がこれは、このユーザーフォームに深く関わったコードで汎用的なコードではない と判断したならば、このユーザーフォーム内に記述するべきです。プロシジャーは機能分割して関わりのあるコードは、同じモジュール内に
記述するべきですよ(複合設計法より)!!
このような考え方は、御自分でオブジェクトを作成する時に(クラスモジュールの作成)大いに役に立つと思います。
検討してみてください。
>
>つくった物の一部分を乗せます。(はしょって書いてますが大体こんな感じです。)
>オプションボタンが3つあり、それぞれクリックするとBox1に
>値が入力されます。
>
>Private Sub OpButton0_Click()
> If OpButton0 = True Then
> Box1.Value = Empty
> Else
> End If
>End Sub
>
>Private Sub OpButton1_Click()
>Dim Money1 As Integer
>Money1 = 500
> If OpButton1 = True Then
> Box1.Value = Money1
> Else
> End If
>End Sub
>
>Private Sub OpButton2_Click()
>Dim Money2 As Integer
>Money2 = 1000
> If OpButton2 = True Then
> Box1.Value = Money2
> Else
> End If
>End Sub
>
>■各ボタンがTrueになったときに、書き込む部分が多くなってしまったので、
>Callを使いました。以下に書きます。
>
>■ユーザーフォーム内↓
>Private Sub OpButton0_Click()
> If OpButton0 = True Then
> Box1.Value = Empty
> Else
> End If
>End Sub
>
>Private Sub OpButton1_Click()
>Dim Money1 As Integer
>Money1 = 500
> If OpButton1 = True Then
Call 収納データ1(Box1,Money1)
> Else
> End If
>End Sub
>
>Private Sub OpButton2_Click()
>Dim Money2 As Integer
>Money2 = 1000
> If OpButton2 = True Then
Call 収納データ1(Box1,Money2)
> Else
> End If
>End Sub
>
>■標準モジュール内↓
Public Sub 収納データ1(byval txt as msforms.textbox,byval vl as integer)
txt.Value = vl
End Sub
>Public Sub 収納データ2()
> Box1.Value = Money2
>End Sub
ちなみにこういう場合は、なるべくパラメータ渡しでデータを受け渡すことを
考えてください。
理由は、
www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=28808;id=excel
と以前記述しました。
|
|