引数はいるけど戻り値がいらない場合のプロシージャの記述方法ですが、
今の私の認識では、
戻り値がある場合にはfunction
戻り値が無い場合はsubで記述すると思っています。
で、共通関数的に使用したく、
標準モジュールに以下のように記述しました
Public Sub outputFile(fileName As String, contents As String)
Open fileName For Output As #1
Print #1, contents
Close #1
End Sub
呼び出し元ではこのように書きたいのです。
outputFile(TxtOutputFileName.Text, TxtResult.Text)
すると、「戻り値を受け取れ」と赤表示になってしまいます。
根本的に考え方が間違っているのでしょうか?
(JavaからVBに転向したばかりなので概念の違いに戸惑っています)
よろしくお願いします。
Call outputFile(TxtOutputFileName.Text, TxtResult.Text)
じゃダメなんですか?
outputFile TxtOutputFileName.Text, TxtResult.Text
だとコンパイル通るような気がしましたが?
VBA、VB6以下、およびVBScriptでは、戻り値の無いメソッド(Subプロシージャ)を
呼び出すときには、括弧を使わない事になっています。
(ただしVB.NETの場合は、括弧が必要です。)
つまり、
outputFile(TxtOutputFileName.Text, TxtResult.Text)
ではなく、
outputFile TxtOutputFileName.Text, TxtResult.Text
のように記述します。
もし、括弧を使う場合は、
Call outputFile(TxtOutputFileName.Text, TxtResult.Text)
のように、『Call 』を先頭に記述する事になります。
おそらく多くの方がお気づきと思いますが、一部間違って書いてしまいました
標準モジュールに書いたときには
functionで記述しました。
で、今のところ、(何も返さないのに)意味の無い
値の受け取り処理を記述しています。
フォームのコードに記述したときには
subとfunctionの両方を試したのですが、
subで書いても同じように戻り値受け取りを要求されます。
「やべ、間違えた」と気づき
訂正の書き込みをしている間に回答をいただいておりました。
で、お二人の回答どおりに記述したところ解決しました。
タイトルどおり超初心者質問でしたね。
でも、本を見てもわからなかったので。お恥ずかしいですが。
ファン太さん魔界の仮面弁士さんありがとうございました。
ツイート | ![]() |