■ 現在のこのページの役立ち度:
表示されない場合こちらのリンクからもご覧になれます。
|
■ このページの役立ち度を評価する:
役立ち度を評価してください。
(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
#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
LHFBu1999-12-06(月) 15:02
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です
JI1999-12-06(月) 16:43
> 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
LHFBu1999-12-06(月) 18:43
> 全てを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の習得に慌てていて、すっかりサブルーチンの概念を忘れていました。
LHFBu1999-12-07(火) 12:06
> 全てを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つのフォームファイルに記述可能なコードの最大容量はどのくらいですか?)
Rei1999-12-07(火) 13:46
> 上記のプログラムを作成する場合、各プロシージャの記述が長くなる時は、 > 全てを1つのフォームファイルに書くのでしょうか? モジュールに記述するという手があります。 > 複数のフォームファイルに書くのが望ましければ、どういう単位(基準)で > ファイル分割すればよろしいでしょうか? 「基準はない」と考えてもいいかと思います。この辺は好みの問題もありますし。 いくつか作っていくうちに、自分の中で「これが基準」ってのが出てくるのでは ないでしょうか。あえて言うなら、見やすい(解読しやすい)単位でしょうか。 私の場合は、複数フォームに利用するならモジュールに記述します。 また、処理によってモジュールを分けたりもします。 (データベース系、INI関係、印刷関係、基本動作 等々) Publicで宣言している変数だけのモジュールもあったりします。 フォームには、そのフォームしか関係ないことしか記述しません。 と、まぁこんな感じです。必ずではないです、あくまで基本です。 > また、参考までに、1つのフォームファイルに記述可能な最大ステップ数はどのくらいですか? > (1つのフォームファイルに記述可能なコードの最大容量はどのくらいですか?) ごめんなさい。これはちょっとわかりませんが、あんまりたくさん記述すると 見難いような気がします。
よねKEN1999-12-07(火) 13:57
> 上記のプログラムを作成する場合、各プロシージャの記述が長くなる時は、 > 全てを1つのフォームファイルに書くのでしょうか? プロシージャの長さに関係なく、例えばForm1でのみ使うプロシージャは Form1モジュールにプロシージャを書きます。 プロシージャの前についているPrivateは”私的な”ということで、 そのプロシージャでのみ使えることを示しています。 また、いろんなフォームで使うプロシージャは、標準モジュールにて、 Publicなプロシージャとして作成します。 それから、ひとつのプロシージャが大きくなりすぎるようであれば、 そのプロシージャ中のコードでまとめられる部分を新たなプロシージャ としてまとめてしまいしょう。 #プロシージャの大きさについて決まりがあるわけではないですが、 #見やすさなどの点から、なるべくコンパクトにし、大きくてもだいたい #100行くらいまでにするとよいと思います。 > 複数のフォームファイルに書くのが望ましければ、どういう単位(基準)で > ファイル分割すればよろしいでしょうか? プロジェクト全体で使う共通の機能は標準モジュールに、 また、あるフォームだけで使うプロシージャはそのフォームモジュールで 記述します。プロシージャは機能単位で作成すればよいでしょう。 > また、参考までに、1つのフォームファイルに記述可能な最大ステップ数はどのくらいですか? > (1つのフォームファイルに記述可能なコードの最大容量はどのくらいですか?) うーん、これは知りません。でも、上で書いたようにちゃんと各モジュールに 何を記述するかを考えてプログラムしてる限り、そうそう困ることはないと思います。
みゃお1999-12-07(火) 14:17
補足です。 > #プロシージャの大きさについて決まりがあるわけではないですが、 一つのプロシージャは64KBまでです。 それ以上だと「プロシージャが大きすぎます」と言うエラーが出るはず。
このページと関連する記事:
#4974-01フォーム内で複数のプロシージャをCallする時のエラー1999-12-08(水) 15:10#25171-0メニューコマンドとコマンドボタンに記述した処理の違い2001-12-06(木) 16:44
#16781-0イベントの呼び出し方。2000-12-02(土) 07:57
#37768-0サブモジュール名を変数を使ってCallできますか?2001-01-26(金) 15:20
#1543-0Callでのコンパイルエラー1999-09-06(月) 16:33
#3020-0コマンドボタンをクリックするプロシージャを他から呼びだす方法1999-11-06(土) 16:10
#17560-0フォームの中にコードを書いてはいけない?2000-03-08(水) 13:11
#5085-0サブフォームをUnloadすると、メインフォームがUnloadできなくなる2002-02-14(木) 15:27
#13174-0コマンドボタンの連動など2000-12-05(火) 00:14
#6477-1プロシージャの呼び方について2002-04-03(水) 11:31
お探しの情報は見つかりましたか?お困りの問題は解決しましたか?
サイト内検索, 似た記事検索で見つからなくてもあきらめずに掲示板で質問してみましょう。
VB初心者友の会があなたのお役に立てれば幸いです。また、本ページの投稿者の方々にこの場を借りて感謝致します。
サイト内検索, 似た記事検索で見つからなくてもあきらめずに掲示板で質問してみましょう。
VB初心者友の会があなたのお役に立てれば幸いです。また、本ページの投稿者の方々にこの場を借りて感謝致します。
本ページは過去ログを集めて自動構成しています。よろしければこのページに関するフィードバックをお願いします。