■ 現在のこのページの役立ち度:
表示されない場合こちらのリンクからもご覧になれます。
■ このページの役立ち度を評価する:
役立ち度を評価してください。
(1(左):あまり役立たない - 5(右):大変役立った):
■ ページの共有:
[ サイト内検索 ]
カスタム検索
#4874-01つのコマンドボタンで複数ブロックを処理する方法は?LHFBu1999-12-06(月) 15:02
     #4883-0RE#4874:1つのコマンドボタンで複数ブロックを処理する方法は?JI1999-12-06(月) 16:43
     #4896-0RE#4883:お礼ですLHFBu1999-12-06(月) 18:43
     #4922-0フォームファイルの数と最大記述サイズは?LHFBu1999-12-07(火) 12:06
     #4926-0RE#4922:フォームファイルの数と最大記述サイズは?Rei1999-12-07(火) 13:46
     #4927-0RE#4922:フォームファイルの数と最大記述サイズは?よねKEN1999-12-07(火) 13:57
     #4929-0RE#4927:フォームファイルの数と最大記述サイズは?みゃお1999-12-07(火) 14:17
#4874-0
1つのコマンドボタンで複数ブロックを処理する方法は?
1つのコマンドボタンを作成し、それがクリックされると、ブロック単位で複数の処理をしたいのです。
AブロックでテキストファイルAのレコード数を確認し、空ファイルならば、
Aブロックの残りの処理を実行せずにBブロックの処理を実行したいのです。

以下のソースでコンパイルしようとしたら、AブロックとBブロックの間に水平線が引かれて
別ブロックとして強制的に仕切られ、Command1_Click()に対するEnd Subが無いという
コンパイルエラーが表示されました。
これを回避して、1つのコマンドボタンで複数のブロックを処理する方法を御教授願います。

尚、システムの都合上、コマンドボタンは1つだけでプログラミングしたいのです。
また、複数ブロックにする理由は、ファイルAがゼロ行だったらファイルAの処理を
一切行わずにファイルBの処理へジャンプしたいからです。(Exit Subでブロックから脱出します)
C言語のようにラベル付きのgoto文でジャンプできれば複数のSubブロックは不要ですが・・・

Private Sub Command1_Click()

  '★Aブロック
  Private Sub a_block()
    'テキストファイルAのレコード数の確認(有:処理続行、無:Bブロックへ)
    If FileLen("c:\test\a.txt") = 0 Then
      Exit Sub
    End If
  
    この部分にはAブロックの処理を具体的に書く
  End Sub

  '★Bブロック
  Private Sub b_block()
    'テキストファイルBのレコード数の確認(有:処理続行、無:Cブロックへ)
    If FileLen("c:\test\b.txt") = 0 Then
      Exit Sub
    End If
  
    この部分にはBブロックの処理を具体的に書く
  End Sub

  '★Cブロック(以下同様)

End Sub  →コマンドボタンのEnd Subです
#4883-0
RE#4874:1つのコマンドボタンで複数ブロックを処理する方法は?
> 1つのコマンドボタンを作成し、それがクリックされると、ブロック単位で複数の処理をしたいのです。
> AブロックでテキストファイルAのレコード数を確認し、空ファイルならば、
> Aブロックの残りの処理を実行せずにBブロックの処理を実行したいのです。
> 
> 以下のソースでコンパイルしようとしたら、AブロックとBブロックの間に水平線が引かれて
> 別ブロックとして強制的に仕切られ、Command1_Click()に対するEnd Subが無いという
> コンパイルエラーが表示されました。
> これを回避して、1つのコマンドボタンで複数のブロックを処理する方法を御教授願います。
> 
> 尚、システムの都合上、コマンドボタンは1つだけでプログラミングしたいのです。
> また、複数ブロックにする理由は、ファイルAがゼロ行だったらファイルAの処理を
> 一切行わずにファイルBの処理へジャンプしたいからです。(Exit Subでブロックから脱出します)
> C言語のようにラベル付きのgoto文でジャンプできれば複数のSubブロックは不要ですが・・・
> 
> Private Sub Command1_Click()
> 
>   '★Aブロック
>   Private Sub a_block()
>     'テキストファイルAのレコード数の確認(有:処理続行、無:Bブロックへ)
>     If FileLen("c:\test\a.txt") = 0 Then
>       Exit Sub
>     End If
>   
>     この部分にはAブロックの処理を具体的に書く
>   End Sub
> 
>   '★Bブロック
>   Private Sub b_block()
>     'テキストファイルBのレコード数の確認(有:処理続行、無:Cブロックへ)
>     If FileLen("c:\test\b.txt") = 0 Then
>       Exit Sub
>     End If
>   
>     この部分にはBブロックの処理を具体的に書く
>   End Sub
> 
>   '★Cブロック(以下同様)
> 
> End Sub  →コマンドボタンのEnd Subです
全てを1つのプロシージャ(この場合はイベント)でやろうとすると
処理がごちゃごちゃしてしまいます。
各処理(Aブロック、Bブロック)をサブルーチン化しましょう。
メインのプロシージャからは、各サブルーチン(a_block等)を呼び出しましょう

Private Sub Command1_Click()
   Call a_block()
   Call b_block()
      :
End Sub

Private Sub a_block()
      :
end sub

Private Sub b_block()
      :
end sub
#4896-0
RE#4883:お礼です
> 全てを1つのプロシージャ(この場合はイベント)でやろうとすると
> 処理がごちゃごちゃしてしまいます。
> 各処理(Aブロック、Bブロック)をサブルーチン化しましょう。
> メインのプロシージャからは、各サブルーチン(a_block等)を呼び出しましょう
> 
> Private Sub Command1_Click()
>    Call a_block()
>    Call b_block()
>       :
> End Sub
> 
> Private Sub a_block()
>       :
> end sub
> 
> Private Sub b_block()
>       :
> end sub

成功しました。有り難うございます。助かりました。m(_ _)m
そう言えば、数年前、他言語でサブルーチン化の手法は経験済みでした。f^_^;
VBの習得に慌てていて、すっかりサブルーチンの概念を忘れていました。
#4922-0
フォームファイルの数と最大記述サイズは?
> 全てを1つのプロシージャ(この場合はイベント)でやろうとすると
> 処理がごちゃごちゃしてしまいます。
> 各処理(Aブロック、Bブロック)をサブルーチン化しましょう。
> メインのプロシージャからは、各サブルーチン(a_block等)を呼び出しましょう
> 
> Private Sub Command1_Click()
>    Call a_block()
>    Call b_block()
>       :
> End Sub
> 
> Private Sub a_block()
>       :
> end sub
> 
> Private Sub b_block()
>       :
> end sub
 
別の質問です、、、。
上記のプログラムを作成する場合、各プロシージャの記述が長くなる時は、
全てを1つのフォームファイルに書くのでしょうか?
複数のフォームファイルに書くのが望ましければ、どういう単位(基準)で
ファイル分割すればよろしいでしょうか?

また、参考までに、1つのフォームファイルに記述可能な最大ステップ数はどのくらいですか?
(1つのフォームファイルに記述可能なコードの最大容量はどのくらいですか?)
#4926-0
RE#4922:フォームファイルの数と最大記述サイズは?
> 上記のプログラムを作成する場合、各プロシージャの記述が長くなる時は、
> 全てを1つのフォームファイルに書くのでしょうか?

モジュールに記述するという手があります。

> 複数のフォームファイルに書くのが望ましければ、どういう単位(基準)で
> ファイル分割すればよろしいでしょうか?

「基準はない」と考えてもいいかと思います。この辺は好みの問題もありますし。
いくつか作っていくうちに、自分の中で「これが基準」ってのが出てくるのでは
ないでしょうか。あえて言うなら、見やすい(解読しやすい)単位でしょうか。

私の場合は、複数フォームに利用するならモジュールに記述します。
また、処理によってモジュールを分けたりもします。
(データベース系、INI関係、印刷関係、基本動作 等々)
Publicで宣言している変数だけのモジュールもあったりします。
フォームには、そのフォームしか関係ないことしか記述しません。
と、まぁこんな感じです。必ずではないです、あくまで基本です。

> また、参考までに、1つのフォームファイルに記述可能な最大ステップ数はどのくらいですか?
> (1つのフォームファイルに記述可能なコードの最大容量はどのくらいですか?)

ごめんなさい。これはちょっとわかりませんが、あんまりたくさん記述すると
見難いような気がします。
#4927-0
RE#4922:フォームファイルの数と最大記述サイズは?
> 上記のプログラムを作成する場合、各プロシージャの記述が長くなる時は、
> 全てを1つのフォームファイルに書くのでしょうか?
プロシージャの長さに関係なく、例えばForm1でのみ使うプロシージャは
Form1モジュールにプロシージャを書きます。
プロシージャの前についているPrivateは”私的な”ということで、
そのプロシージャでのみ使えることを示しています。

また、いろんなフォームで使うプロシージャは、標準モジュールにて、
Publicなプロシージャとして作成します。

それから、ひとつのプロシージャが大きくなりすぎるようであれば、
そのプロシージャ中のコードでまとめられる部分を新たなプロシージャ
としてまとめてしまいしょう。
#プロシージャの大きさについて決まりがあるわけではないですが、
#見やすさなどの点から、なるべくコンパクトにし、大きくてもだいたい
#100行くらいまでにするとよいと思います。

> 複数のフォームファイルに書くのが望ましければ、どういう単位(基準)で
> ファイル分割すればよろしいでしょうか?
プロジェクト全体で使う共通の機能は標準モジュールに、
また、あるフォームだけで使うプロシージャはそのフォームモジュールで
記述します。プロシージャは機能単位で作成すればよいでしょう。
 
> また、参考までに、1つのフォームファイルに記述可能な最大ステップ数はどのくらいですか?
> (1つのフォームファイルに記述可能なコードの最大容量はどのくらいですか?)
うーん、これは知りません。でも、上で書いたようにちゃんと各モジュールに
何を記述するかを考えてプログラムしてる限り、そうそう困ることはないと思います。
#4929-0
RE#4927:フォームファイルの数と最大記述サイズは?
補足です。

> #プロシージャの大きさについて決まりがあるわけではないですが、
一つのプロシージャは64KBまでです。
それ以上だと「プロシージャが大きすぎます」と言うエラーが出るはず。
お探しの情報は見つかりましたか?お困りの問題は解決しましたか?
サイト内検索, 似た記事検索で見つからなくてもあきらめずに掲示板で質問してみましょう。
VB初心者友の会があなたのお役に立てれば幸いです。また、本ページの投稿者の方々にこの場を借りて感謝致します。
本ページは過去ログを集めて自動構成しています。よろしければこのページに関するフィードバックをお願いします。
(※ 構成の誤り、広告等の不適切な記事、リンク切れ、読めないページの報告など)