• 締切済み

vbs subプロシージャーにするべきなの?し

vbs subプロシージャーにするべきなの?しないべきなの? call a sub a() msgbox "b" end sub vbsでこのコードを実行すると問題なく動くのですが、 call a をsubとend subで囲わなくていいのでしょうか?

みんなの回答

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.2

vbsは、subとend subで囲われたところがサブプロシージャーになる(当たり前)。 では、subとend subで「囲われていないところ」は何になるかというと、ここがメインプロシージャーとでもいうようなものになるわけだ。 より具体的に言うと、 A sub hoge() B end sub C sub fuga() D end sub E などというvbsのスクリプトがあった場合、Windows Scripting HostはAを実行し、hogeをサブプロシージャーとして覚えておき、Cを実行し、fugaをサブプロシージャーとして覚えておき、Eを実行して終了する。まぁ普通はこんな変態的なスクリプトを書く人はいないと思うが、原理としてはsubでないエリアを上から順番に実行していく。これをCに書き直すと以下のようなイメージになる。 #include <stdio.h> void hoge() { B; } void fuga() { D; } int main(int argc, char** argv) { A; C; E; return 0; } このイメージからわかる通り、subで囲われていない箇所をつなぎ合わせたものを一つのプロシージャーとして実行している感じだな。質問者のスクリプトではcall aがAの部分に相当する。そこがメインプロシージャーとなっている訳だ。ここをsubで囲ってしまうと、サブプロシージャーが2つあり、メインプロシージャーにあたるものが何もないスクリプトになってしまう。 ぼんやりとした解説だがイメージをつかんでもらえただろうか。

回答No.1

>をsubとend subで囲わなくていいのでしょうか あなたは、なぜそう思ったのでしょう

関連するQ&A

  • マクロ subプロシージャーは指定できない?

    accessのマクロの アクション:プロシージャの実行 は、 subプロシージャーは指定できないのでしょうか? 標準モジュールに Sub test1() MsgBox "プロシージャーの実行のテストです" End Sub Function test2() MsgBox "プロシージャーの実行のテストです" End Function と作り、 マクロのプロシージャの実行で プロシージャ名をtest2()にすると、うまく表示されますが、 test1()だと、失敗します。 subプロシージャーをマクロで呼び出す方法を教えてください。

  • Subステートメント と Subプロシージャ の違いは?

    Subステートメント と Subプロシージャ は何が違うのですか? 例えば Sub test() MsgBox "a" End Sub これは、 Subステートメントですか? Subプロシージャですか?

  • 【VBA】SUBプロシージャーは標準モジュール以外に書いてもいい?

    ThisWorkbookのコードを書く場所や Sheetのイベントプロシージャーが実行されるところに Sub test() MsgBox "あああ" End Sub と書いて実行するとメッセージボックスが表示されます。 クラスモジュールとフォームのイベントプロシージャーを書くところではできませんでした。 ということはSUBプロシージャーは 標準モジュールでなくてもいいのでしょうか?

  • 元のプロシージャーを取得するプロパティ

    Sub test1() Call test2 End Sub Sub test2() If ?? Then MsgBox "test1から実行されたマクロです。" End If End Sub 上記のコードで どこから実行されたプロシージャ化を取得する方法はありますか? 現在は、 Dim bl_test1_yes As Boolean Sub test1() bl_test1_yes = True Call test2(bl_test1_yes) End Sub Sub test2(bl_test1_yes) If bl_test1_yes = True Then MsgBox "test1から実行されたマクロです。" End If End Sub としていますが、 元のプロシージャーを取得するプロパティがあれば教えてください。

  • ExcelVBAのSetFocusとプロシージャーの呼び出しについてで

    ExcelVBAのSetFocusとプロシージャーの呼び出しについてです。 質問させて頂きます。 セルをSetFocusで選択することはできないのでしょうか? 同じブックの別々のユーザフォームからプロシージャーを呼びだすことはできないのでしょうか? ユーザフォーム1 sub mh() a=1 msgbox a End sub SUB A_clik() 呼び出し可能 mh            End sub ユーザフォーム2  Sub B_click() call mh    呼び出し不可能     End Sub Sub B_click() userform1.mh    呼び出し不可能     End Sub 呼び出しの指定の仕方がわかりません。 よろしくお願いします。

  • subプロシージャ

    2次方程式a*x^2+bx+c=0えお解くプログラムを考える。メインプロシージャmain1がsubプロシージャread1,solve1,display1を1回ずつ呼び出す。プロシージャread1で変数a,b,cにinputboxで整数値を入力する。プロシージャsolve1では、まず判別式D=b^2-4*a*cを計算して、D>0の場合にはx1、x2に実数解x1=(-b+sqr(D)/(2*a)、x2=(-b-sqr(d)/(2*a)を求める。D<0の場合はx1に実部-b/(2*a)を、x2に虚部sqr(-D)/(2*a)を求める。プロシージャdisplay1は入力された3つの整数値とsolve1で得られた2つの変数x1.x2の値を判別式Dの符号に応じてMsgbox関数で表示する。 以上のプログラムをモジュールレベル変数を用いてつくりなさい。 Sub read1() '問10(1) Dim a As Integer, b As Integer, c As Integer a = InputBox(" aの値を入力して") b = InputBox(" bの値を入力して") Sub solve1() D = b ^ 2 - 4 * a * c If D > 0 Then x1 = (-b + Sqr(D)) / (2 * a) x2 = (-b - Sqr(D)) / (2 * a) Else x1 = -b / (2 * a) x2 = Sqr(-D) / (2 * a) Sub display1() End Sub ここまでやったのですがこの先どうやるかわかりません。 おしえてください。 あとモジュールレベル変数ってなんですか?

  • subプロシージャーですか?subステートメン

    ---------------- Sub test() End Sub ---------------- は、subプロシージャーですか?subステートメントですか? 上記のコードの「Sub」にカーソルをあて、F1を押すとヘルプが立ち上がり「Sub ステートメント」と表示されますが、 挿入(I)→プロシージャー(P)を見ると画像のように「Subプロシージャー」となっています。 どちらが正しいのでしょうか? どちらも正しいのでしょうか?

  • subプロシージャーは標準モジュールではなくフォームのコードを書く部分

    subプロシージャーは標準モジュールではなくフォームのコードを書く部分に書いても問題ないのでしょうか? エクセルにVBAでフォームを挿入し、 「Private Sub UserForm_Initialize()」 などのフォームのモジュールに、 Sub test() MsgBox "あああ" End Sub という標準モジュールに書くべきのsubプロシージャーを書いてもなにもエラーにならないし正常に動きます。 subプロシージャーは標準モジュールではなくフォームのコードを書く部分に書いても問題ないのでしょうか? それともエラーにならなくても標準モジュールに書いた方がいいですか?

  • プロシージャが実行されたかの有無の判断

    Sub test() ・・・・・ IF ・・・・ then Call マクロ1 End If ・・・・・ ・・・・・ If testと言う名のプロシージャーの中でマクロ1と言うプロシージャーが実行されたなら Then MsgBox "マクロ1は実行されました" End If End Sub ということを実行したいのですがどうすればいいのでしょうか? マクロ1の実行条件自体が複雑でIf ~Thenの中に書ききれないので 実行の有無を値で返したりすることは不可能でしょうか? よろしくお願い致します。

  • VB6でWSH(vbs)を起動できる方法を教えてください。

    visual Basic 6でアプリケーションを開発していますが、 このアプリケーション(exe)から、test.vbsを起動したいと考えています。 ====vbのコード===== 'ボタンクリックしたら、test.vbsが実行される Private Sub Command1_Click() shell("test.vbs") End Sub ==== test.vbs ==== MsgBox("test.vbs起動しました。") です。 上記のようにコードを書きましたが、Shell関数で 「実行時エラー'5' プロシージャの呼び出し、または引数が不正です。」 のメッセージが出力されて、vbsが起動できません。 VB6でWSH(vbs)を起動できる方法を教えてください。 環境は以下の通りです。 OS:WIN2000 アプリ:VB6 ブラウザ:IE5.0

専門家に質問してみよう