- ベストアンサー
標準モジュールについてなのですが
すみません。教えてください(/_;)VB6にて理解できないことがあります。いくつものパスを標準モジュールに記述できると知り、早速見やすいプログラムにしようと思い、標準モジュールを追加しました。サンプルなどを調べ、Function Apath() as stringを理解しました。フォームの方にはpath = Apathって書いておけばいいと書かれていたのでその通りにしました。しかし、見に行ってはくれません(>_<)で、いろいろやってみてあることに気づきました。変数を宣言してたら、ダメでしてなかったらちゃんと見に行ってくれます。 Dim path as string,Dim Apath as string.Apathを消すと働いてくれます。宣言が間違っているのでしょうか?標準モジュールをこのような感じで利用するには何か重大なルールがあるのでしょうか?すいません、初心者すぎる質問で<(_ _)>しかし、聞かぬは一生の恥と思い質問しました(>_<)よろしくお願いいたします<(_ _)>
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
No1です。 SubとFunctionの違いについてですが、ちょっと良い例が思いつきませんが・・・ Subは戻り値を必要としない処理、つまり、画面の初期化などで使うと良いでしょう。入力項目エリアに全部空白を入れるなど。 Functionは、処理開始時(ボタンを押した時)など、入力項目に漏れがないかのチェックに使うとか。例えば以下。 Function AAA() as boolean AAA=False '最初にFalseを設定しておく '入力チェック If ~ Then Exit Function 'エラーがあったら処理を終了 End If AAA=True 'エラーがなく、処理が最後まで行けばTrueにする このような感じですかね。やりたい処理によって、どちらを使うか決めていかなければなりません。 これは経験を重ねていけば身についていくでしょう。
その他の回答 (4)
- skink
- ベストアンサー率38% (7/18)
こんにちは。 #2の補足の質問についてですが、arという変数を標準モジュールで定義すればよいのでは? Public ar as String としておけば、フォームのほうでの値の代入などはできるはずですが。 あと、蛇足なんですが、satoshi777さん、改行できませんか? ちょっと質問がみにくいです・・・。
お礼
できました!ありがとうございます<(_ _)> 改行。。。心がけます(>_<) 書いていると、興奮というか気持ちが焦ってしまいまして(^_^;) 以後気をつけます<(_ _)>
- kerorin9999
- ベストアンサー率22% (10/44)
No1です。 そうですね。質問者様の方法は関数となります。 通常どちらを使うべきかとの事ですが、これは質問者様の 文脈からは読み取れません・・・ 定数を宣言したいだけならCONSTを、処理を行いたいのなら 関数を使います。 基本的に、標準モジュールに宣言するCONST値(定数)と いうのは、複数のモジュールから呼ばれる値を、一箇所で 管理したほうが都合が良いですよ、と言うものです。 なぜなら、後で変更が生じた場合に、一箇所だけ変更 すれば良いからです。 例えば、フォーム1とフォーム2があり、この両方から 同じ値(今回は場合はファイルパス)を使いたいときに 標準モジュールに宣言します。 どこか一箇所(フォーム1だけ)でしか使わない場合は、 そのフォームの中でCONSTを宣言してあげればよいわけです。 また、関数にはFunctionとSubがあり、Functionの方は 結果を呼び出し元に返します。 Subは結果を返しません。 Function Apath() as stringというのは、処理の結果を string(文字列型)で返しますよ、という事です。 以下のサンプルを見ていただければ何となく分かりますかね? Private Sub Command1_Click() Text1.Text = a '関数aを呼び出して、結果をText1に b '関数bを呼び出し End Sub Function a() As String a = "aaa" & "bbb" End Function Sub b() Dim c As Integer c = c + 1 Text2.Text = c End Sub >Public Const Apath As String = "C:\temp" >Public Const Bpath As String = "D:\temp" >Public Const Cpath As String = "C:\temp\test" >って感じでズラズラ~っと書いていけばよいのでしょうか? その通りです。
補足
細かく説明していただきありがとうございます。 Functionの方は自分の頭でしっかり整理、理解できました。 Text1.textがaですよ。aは何だろう、見てこよう。 aはaaabbbとなりましたよ~、text1.textに知らせてあげようって 解釈しました! しかしSubの方は今いちです(;O;) これは、関数bがあります~、関数bとは標準モジュールにありますよ~、 そこでは、c=c+1ですよ~、text2.textにはcだよ!ってことですよね? ん~、イメージ的には丁寧なのがFunctionで、いちいち面倒だから、 そのまま値を渡してしまえってのがSubって感じなんでしょうか? すいません、変な解釈の仕方で(>_<)これでも必死なんで(>_<)
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
>Apath ネーミングからすると、アプリケーションパス取得関数なのでは? Function Apath() as string Apath = App.Path IF (Apathのお尻が"\"ではなかったら) Then (Apathのお尻に"\"を追加する) End Function ↑って感じで でその標準モジュールは、どのプロジェクトでも有効と思われる汎用性の高い関数ライブラリとして、その知り合いの方は利用しているのかもしれません。 もしそうであれば、関数はそのままにしておき、その関数から取得した値を格納する変数名を変更することにより、対応すべきです。 そうじゃなくApathが固定パスを指すのであれば、#1さんの言われている通り、さらに補足で言われている通り、Constを羅列してくだけですね。
補足
1050YENさん、こんにちは。サンプルのはどうもただのパスのようです。単に、データベースまでへのパスみたいです。ごめんなさい、Apathはたんに僕が付けただけです(>_<)って、ことはConstでよさそうですね(~_~)ついでに質問になるんですが、これは完全に固定ですが、例えば、一部分だけ変数を利用したいのですが、その場合はどうなるのでしょうか?arという変数にパスの一部を取得していて、path = "C:\test\"& ar &"test2\test"って感じで指定していたのですが、この場合、標準モジュールでこのフォームで取得したarという変数を指定すると、変数を定義してくださいとなります。フォームの方でarだけをPublic ar as stringってしても間違っていますとなります(;_:)このような使い方はできないのでしょうか?すいません、追加質問になりまして<(_ _)>
- kerorin9999
- ベストアンサー率22% (10/44)
標準モジュールにファイルパスを設定して、 フォームモジュールの方でそのファイルパスを使用したいと言うことでしょうか? それでしたら、標準モジュールのほうに、 Public Const Apath As String = "C:\temp" と記述し、 ボタンとテキストボックスを貼り付けたフォームにて、 ボタンをクリックしたときのイベントに Text1.Text = Apath と記述すれば、フォームのテキストボックスに「C:\temp」 と表示されます。 ポイントとしては、標準モジュールでPublic Constと 宣言してあげることです。 Constは定数と言う意味です。 Publicをつけないと、他のモジュールからは値を参照できません。 言っていることが的外れでしたらすみません。
補足
考えてくださってありがとうございます<(_ _)>僕は、どうもわざわざ関数にしていたようです。フォームにはpath=Apath()で標準モジュールにFunction Apath() as stringってしていました(>_<)関数ですよね?呼び出しに行ってました(>_<)ずいぶん前のサンプルを知り合いから見せていただいて、そのプログラムでは、そのように呼び出していました。通常、どちらを利用すべきなんでしょうか?あと、kerorin9999さんの方法ですと、標準モジュールにPublic Const Apath As String = "C:\temp" Public Const Bpath As String = "D:\temp" Public Const Cpath As String = "C:\temp\test"って感じでズラズラ~っと書いていけばよいのでしょうか?
お礼
なるほど、漠然とですが、何とか理解できました。 やはりプログラムって難しいですね(>_<) このような噛み砕いた説明ですと、なるほどぉって理解できるのですが、 本など読んでも、今いち理解できずにいました(>_<) 大変勉強になりました。ありがとうございます<(_ _)> 今後もよろしくお願いします<(_ _)>