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)」というコンパイルエラーになりました。
No.1
- 回答日時:
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
/////////////////////
ありがとうございました。
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"
の部分がエラーになってしまうのですが
なぜでしょうか?
No.2
- 回答日時:
サンプル 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
Call sample1("abc")
のように、カッコが必要なのですね。
自分のパソコンで実験したらうまく行きました。
しかしこのような使い方をする機会は多々あるのでしょうか?
最初から
Sub sample3()
Dim a As String
MsgBox "abc"
End Sub
にしちゃえばいいのに。
と思ってしまいます。
ありがとうございました。
No.3ベストアンサー
- 回答日時:
>Call sample1 "abc"
の部分がエラーになってしまうのですが
なぜでしょうか?
ごめんなさい、コピー&ペーストで文を書いてたのでミスしました。No.2さんが既に回答されていますが.....
× Call sample1 "abc"
↓↓↓↓↓
○ Call sample1("abc")
または
○ sample1 "abc"
上記の2種どとらでもかまいません、私の場合は基本的には後者の記述をしています。
前者の場合はCall文でsample1が関数ではなくプロシージャの呼び出しであることを明確にしています。
No.2さんへのお礼で
>最初から
・・・・・・・・・・・
にしちゃえばいいのに。
と思ってしまいます。
この程度のコードでは確かにそうですが実際のプログラムではここまで単純なのはそうはありません。
考え方の基本としては「同じ機能のコードは一つにまとめる」こうすることでプログラムのあちこちで同じコードをその都度書かなくてもその機能のプロシージャ呼び出すだけでよくなります、機能の修正が必要な場合も一ヶ所の修正だけで済みます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) Excel VBA キーワードから列を取得して、さらに空欄行を非表示にする 3 2022/10/21 22:49
- Visual Basic(VBA) Excel VBA カーソルを当てた際に表示される”4161”とは 1 2022/04/30 21:53
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 標準モジュール Public mOnTime As Date Sub sample() '実行プロシ 1 2023/02/22 15:44
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ASPで日付(期間)検索
-
【VB6.0】 あるフォームから他...
-
C#のループでtextboxに値を入れ...
-
二点の座標から距離や角度を求...
-
VB.NETでのイベントの途中終了
-
エクセルVBAでテキストボッ...
-
C言語のサフィックスについて
-
VBAでcallで呼び出したsubを終...
-
他のフォームから別のフォーム...
-
pthread_cond_waitとptherad_co...
-
VC++ (byte)(col & 0xFF) の意味
-
Pythonでのstrip()とsplit()の...
-
perlによるxmlファイルの取得
-
sublimit textっていうエディタ...
-
レコードセットにnullの場合
-
C言語で10行10列の行列式の値を...
-
タイムアウトする仕組みを作りたい
-
String型の値にスラッシュをつ...
-
アクセスできない保護レベルエ...
-
VBA public変数はどのようなこ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SavePictureで保存できない
-
ボールが壁に当たって跳ね返る...
-
Matlabでsin波を使って矩形波を...
-
PictureBoxでのアニメーション...
-
Matlab/SimulinkのChirp信号に...
-
FlexGridで文字色を変更。
-
ピッ、ってアルファベットでど...
-
SCALEの使い方教えてください
-
プログレスバーに似たコントロ...
-
Picture box の サイズを変更
-
(VB)ピクチャボックスに表示し...
-
画像をランダムに表示させたい...
-
ペイントソフトの作成方法
-
ピクチャーボックスの画像を印...
-
C言語のOpenGLで複数のテクスチ...
-
VBによる回帰直線のプログラム
-
文字間の幅の設定
-
画像処理
-
三項でたとえば交換って
-
VBA public変数はどのようなこ...
おすすめ情報