プロが教える店舗&オフィスのセキュリティ対策術

VBAについて質問です。

/////////////////////
Sub sample1(a As String)
a = "abc"
MsgBox a
End Sub
---------------------
Sub sample2()
Dim a As String
a = "abc"
MsgBox a
End Sub
/////////////////////

sample1とsample2の違いは何でしょうか?

どちらも標準モジュールに記載しました。

sample2はF5で実行できますが、sample1はF5を押しても何も起きません。
それだけの違いでしょうか?
Sample1の使い道がわかりません。

/////////////////////
Option Explicit
Sub sample2()
Call sample1
End Sub
---------------------
Sub sample1(a As String)
a = "abc"
MsgBox a
End Sub
/////////////////////
にしたら、
「引数は省略できません。(Error 449)」というコンパイルエラーになりました。

A 回答 (3件)

sample1は



Sub sample1(a As String)
MsgBox a
End Sub

の間違いではないですか?
aはsample1を呼び出す時の引数となります。
引数を受け取ったプロシージャはその引数をプロシージャ内で使用する事ができます。

/////////////////////
Option Explicit
Sub sample2()
Call sample1 "abc"
End Sub
---------------------
Sub sample1(a As String)
MsgBox a
End Sub
/////////////////////
    • good
    • 0
この回答へのお礼

ありがとうございました。

Sub sample1(a As String)
a = "abc"
MsgBox a
End Sub
ではなく
Sub sample1(a As String)
MsgBox a
End Sub
にするべきなのですね。

ちなみに

Sub sample2()
Call sample1 "abc"
End Sub
をそのまま貼り付けたら
Call sample1 "abc"
の部分がエラーになってしまうのですが
なぜでしょうか?

お礼日時:2012/05/21 21:02

サンプル 1 の中身はとりあえず置いといて、


Sub sample1(a As String)

sample1 は a という文字列型の引数を必要としていて、それを省略できないように作ってあるため、F5 で単独実行ができない。

Option Explicit
Sub sample2()
 Call sample1("abc")
End Sub

Sub sample1(a As String)
 MsgBox a
End Sub
    • good
    • 0
この回答へのお礼

Call sample1("abc")
のように、カッコが必要なのですね。

自分のパソコンで実験したらうまく行きました。

しかしこのような使い方をする機会は多々あるのでしょうか?

最初から
Sub sample3()
Dim a As String
MsgBox "abc"
End Sub
にしちゃえばいいのに。
と思ってしまいます。

ありがとうございました。

お礼日時:2012/05/21 21:02

>Call sample1 "abc"


の部分がエラーになってしまうのですが
なぜでしょうか?

ごめんなさい、コピー&ペーストで文を書いてたのでミスしました。No.2さんが既に回答されていますが.....

× Call sample1 "abc"
↓↓↓↓↓
○ Call sample1("abc")
または
○ sample1 "abc"

上記の2種どとらでもかまいません、私の場合は基本的には後者の記述をしています。
前者の場合はCall文でsample1が関数ではなくプロシージャの呼び出しであることを明確にしています。

No.2さんへのお礼で
>最初から
・・・・・・・・・・・
にしちゃえばいいのに。
と思ってしまいます。

この程度のコードでは確かにそうですが実際のプログラムではここまで単純なのはそうはありません。
考え方の基本としては「同じ機能のコードは一つにまとめる」こうすることでプログラムのあちこちで同じコードをその都度書かなくてもその機能のプロシージャ呼び出すだけでよくなります、機能の修正が必要な場合も一ヶ所の修正だけで済みます。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2012/10/13 23:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!