• ベストアンサー

標準モジュールについてなのですが

すみません。教えてください(/_;)VB6にて理解できないことがあります。いくつものパスを標準モジュールに記述できると知り、早速見やすいプログラムにしようと思い、標準モジュールを追加しました。サンプルなどを調べ、Function Apath() as stringを理解しました。フォームの方にはpath = Apathって書いておけばいいと書かれていたのでその通りにしました。しかし、見に行ってはくれません(>_<)で、いろいろやってみてあることに気づきました。変数を宣言してたら、ダメでしてなかったらちゃんと見に行ってくれます。 Dim path as string,Dim Apath as string.Apathを消すと働いてくれます。宣言が間違っているのでしょうか?標準モジュールをこのような感じで利用するには何か重大なルールがあるのでしょうか?すいません、初心者すぎる質問で<(_ _)>しかし、聞かぬは一生の恥と思い質問しました(>_<)よろしくお願いいたします<(_ _)>

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

No1です。 SubとFunctionの違いについてですが、ちょっと良い例が思いつきませんが・・・ Subは戻り値を必要としない処理、つまり、画面の初期化などで使うと良いでしょう。入力項目エリアに全部空白を入れるなど。 Functionは、処理開始時(ボタンを押した時)など、入力項目に漏れがないかのチェックに使うとか。例えば以下。 Function AAA() as boolean AAA=False '最初にFalseを設定しておく '入力チェック If ~ Then Exit Function 'エラーがあったら処理を終了 End If AAA=True 'エラーがなく、処理が最後まで行けばTrueにする このような感じですかね。やりたい処理によって、どちらを使うか決めていかなければなりません。 これは経験を重ねていけば身についていくでしょう。

satoshi777
質問者

お礼

なるほど、漠然とですが、何とか理解できました。 やはりプログラムって難しいですね(>_<) このような噛み砕いた説明ですと、なるほどぉって理解できるのですが、 本など読んでも、今いち理解できずにいました(>_<) 大変勉強になりました。ありがとうございます<(_ _)> 今後もよろしくお願いします<(_ _)>

その他の回答 (4)

  • skink
  • ベストアンサー率38% (7/18)
回答No.4

こんにちは。 #2の補足の質問についてですが、arという変数を標準モジュールで定義すればよいのでは? Public ar as String としておけば、フォームのほうでの値の代入などはできるはずですが。 あと、蛇足なんですが、satoshi777さん、改行できませんか? ちょっと質問がみにくいです・・・。

satoshi777
質問者

お礼

できました!ありがとうございます<(_ _)> 改行。。。心がけます(>_<) 書いていると、興奮というか気持ちが焦ってしまいまして(^_^;) 以後気をつけます<(_ _)>

回答No.3

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" >って感じでズラズラ~っと書いていけばよいのでしょうか? その通りです。

satoshi777
質問者

補足

細かく説明していただきありがとうございます。 Functionの方は自分の頭でしっかり整理、理解できました。 Text1.textがaですよ。aは何だろう、見てこよう。 aはaaabbbとなりましたよ~、text1.textに知らせてあげようって 解釈しました! しかしSubの方は今いちです(;O;) これは、関数bがあります~、関数bとは標準モジュールにありますよ~、 そこでは、c=c+1ですよ~、text2.textにはcだよ!ってことですよね? ん~、イメージ的には丁寧なのがFunctionで、いちいち面倒だから、 そのまま値を渡してしまえってのがSubって感じなんでしょうか? すいません、変な解釈の仕方で(>_<)これでも必死なんで(>_<)

回答No.2

>Apath ネーミングからすると、アプリケーションパス取得関数なのでは? Function Apath() as string   Apath = App.Path   IF (Apathのお尻が"\"ではなかったら) Then (Apathのお尻に"\"を追加する) End Function ↑って感じで でその標準モジュールは、どのプロジェクトでも有効と思われる汎用性の高い関数ライブラリとして、その知り合いの方は利用しているのかもしれません。 もしそうであれば、関数はそのままにしておき、その関数から取得した値を格納する変数名を変更することにより、対応すべきです。 そうじゃなくApathが固定パスを指すのであれば、#1さんの言われている通り、さらに補足で言われている通り、Constを羅列してくだけですね。

satoshi777
質問者

補足

1050YENさん、こんにちは。サンプルのはどうもただのパスのようです。単に、データベースまでへのパスみたいです。ごめんなさい、Apathはたんに僕が付けただけです(>_<)って、ことはConstでよさそうですね(~_~)ついでに質問になるんですが、これは完全に固定ですが、例えば、一部分だけ変数を利用したいのですが、その場合はどうなるのでしょうか?arという変数にパスの一部を取得していて、path = "C:\test\"& ar &"test2\test"って感じで指定していたのですが、この場合、標準モジュールでこのフォームで取得したarという変数を指定すると、変数を定義してくださいとなります。フォームの方でarだけをPublic ar as stringってしても間違っていますとなります(;_:)このような使い方はできないのでしょうか?すいません、追加質問になりまして<(_ _)>

回答No.1

標準モジュールにファイルパスを設定して、 フォームモジュールの方でそのファイルパスを使用したいと言うことでしょうか? それでしたら、標準モジュールのほうに、 Public Const Apath As String = "C:\temp" と記述し、 ボタンとテキストボックスを貼り付けたフォームにて、 ボタンをクリックしたときのイベントに Text1.Text = Apath と記述すれば、フォームのテキストボックスに「C:\temp」 と表示されます。 ポイントとしては、標準モジュールでPublic Constと 宣言してあげることです。 Constは定数と言う意味です。 Publicをつけないと、他のモジュールからは値を参照できません。 言っていることが的外れでしたらすみません。

satoshi777
質問者

補足

考えてくださってありがとうございます<(_ _)>僕は、どうもわざわざ関数にしていたようです。フォームには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"って感じでズラズラ~っと書いていけばよいのでしょうか?

関連するQ&A

  • VBA モジュールで共通に使う変数の宣言方法

    VBAにてプログラミングを覚えている者です。 現在、いくつかのモジュールがあり、それぞれDimにて宣言している共通の変数があります。 いくつものプロシージャに毎回宣言せず、どこかでひとまとめにしたいと思い、色々と調べています。 例えば、 Dim pic1 As Picture Dim cell1 As String Dim pass1 As String Dim pic2 As Picture などです。 Dimのほかに、Publicの宣言などがありますが、いま一つ使い方がピンときません。 共通宣言する変数をひとつのモジュールとして登録し、活用できると、いざ変更となったときに その内容だけ置き換えればいいと思うのですが、みなさんはどのように宣言をしていますか? (例えば、Stringなどは各モジュールで変更するのが大変だと思うのですが・・・) ヒントを教えていただければと思います。よろしくお願いします。

  • 標準モジュールにpublicで宣言するしかない?

    フォームモジュールと標準モジュールで同じ変数を使って値を行き来したい場合、 標準モジュールにpublicで宣言するしかないのでしょうか? 【フォームモジュール】 Private Sub cmd_コマンド0_Click() test = "aaa" Call 標準モジュールtest End Sub 【標準モジュール】 Public test As String Sub 標準モジュールtest() MsgBox test End Sub でいいのですか?

  • Publicステートメントと標準モジュールについて

    標準モジュールを挿入して、変数の前にPublicを宣言してあげると、 どのモジュールからも参照が可能になるのは、本を読んでよく分かったのですが、 「Function」などで関数プロシージャの定義を標準モジュールでする時に、 「Public」があると、なしでは、どういった効果がでるのでしょうか? 本には、ほとんどPublicが宣言されていました。 関数プロシージャを定義する場合は、Publicを付けなくても、 他のモジュール(例えばフォームなど)から参照可能ですよね? 今一、標準モジュールと関数定義、Public変数の関連がわかっていません。 良かったら、アドバイスお願いします。m(__)m

  • VBA 標準モジュールとフォーム

    ある標準モジュール内で生成した変数の値をフォームのコマンドボタンをクリックしたら表示されるプログラムはどうやってつくるのですか? 標準モジュール sub test() dim a as integer dim b as integer dim sum as string a=5 b=1 sum=a+b End sub フォームのコマンドボタンクリック Sub CommandButton1_Click() MsgBox sum End Sub 標準モジュールで計算した答えがフォームのコマンドボタンをクリックしたら答え6が表示されるようにしたいのですが、どうしたらできますか?

  • VB6-標準モジュールとの変数の受け渡し

    VB6の初心者です。ごく初歩的な問題でお恥ずかしいのですが困っています。 標準モジュール内にある以下のサブルーチンを行わせるために、 Sub Transform(NumSamples As Long, RealIn() As Double, ImageIn() As Double, RealOut() As Double, ImagOut() As Double, Optional InverseTransform As Boolean = False) (NumSamples、RealIn()、ImageIn()は入力値) (RealOut()、ImagOut()は戻り値) ... ... End Sub フォームモジュール内で以下のようにコールすると、 Private Sub cmdStart_Click() Dim A as Long Dim B(10000) as Double Dim C(10000) as Double Dim D(10000) as Double Dim E(10000) as Double ... (A,B,Cに数値入力) ... Call Transform(A, B(), C(), D(), E(), False) End Sub で実行すると、変数D()に対して「コンパイルエラー:型が一致しません:配列またはユーザ定義型を指定してください」が出ます。なお、配列は10000まで宣言していますが実際には0~4096を使っています。 変数型は合わせているはずなのになぜエラーになるのでしょうか。D(),E()の型宣言をPublicにして標準モジュール内に入れたり、いろいろやってみたつもりですがうまくいきません。 よろしくお願いします。

  • 標準モジュールとクラスモジュールの違い

    マイクロソフトのAccess2000でVBAプログラミングを行なっておりますが、 基本的なことを教えてください。 「標準モジュール」と「クラスモジュール」の違いはなんですか? 例えば、どこからでも使えるプロシージャ Public Function getSum( i1 as integer, i2 as interger ) getSum = i1 + i2 End Function を定義したとして、標準モジュール内に書くのとクラスモジュール内に 書くのとでは、何が違ってきますか?その他とにかく「標準モジュール」 とクラスモジュールの違いを教えてください。

  • ACCESS2003 標準モジュールCALLについて

    お世話になります。 ACCESS2003で、標準モジュールの呼び出しについて次のような流れを 作りたいと思っていますす。 標準モジュール名:TEST public sub AA() dim txtB as string (*1 txtB = "TEST.subBB" (*2 call txtB end sub 実現させるには、*1の命令がobjectまたはmodule型で宣言し、 2)はset命令を利用すると思います。 どのように命令作成してよいか困っています。 実際に作成する場合、どのような設定、命令が必要でしょうか。 既出、文献でも教えていただけないでしょうか。 よろしくお願いします。

  • 標準モジュールとクラスモジュールについて

    標準モジュールでType型を使用しています。 この標準モジュールをクラスモジュールに置き換えて、Formから呼び出すCOMに作り変えたいのですが、引数ってどう設定したらよいのでしょうか? 今は標準モジュールなので、こんな感じで呼んでいるのですが・・・ 例) Private Sub Command1_Click() Dim in_b As IN_PARA Dim out_b As OUT_PARA in_b.Name = "山本太郎" in_b.Seikaku = "優しい" in_b.Syumi = "釣り" in_b.Tokugi = "野球"

  • 標準モジュール 変数の宣言 英語

    vbaの標準モジュールに、変数の宣言という名前を英語でつけたいのですが、 英語にすると、変数の宣言は何になりますか?

  • VB2010で、変数の宣言がわかりません。

    VB2010で、変数の宣言がわかりません。 Option Explicit Public i, j, k, l As Long Public ii, jj, kk, ll As Long Public lngFileSuu As Long Public strTemp As String ・ ・ ・ と標準モジュールに宣言すると エラーがでています。 VB6.0とは宣言方法が違うのでしょうか? 教えてください。よろしくお願いします。

専門家に質問してみよう