Page 496 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼引数について かっくん 03/1/1(水) 19:10 ┣Re:引数について JuJu 03/1/1(水) 19:20 ┣Re:引数について Jカーター 03/1/1(水) 20:08 ┃ ┗Re:引数について(さらに追加) りん 03/1/3(金) 0:01 ┃ ┣Re:引数について(さらに追加) Jカーター 03/1/3(金) 6:30 ┃ ┗Re:引数について(さらに追加) ごんぼほり 03/1/4(土) 9:39 ┗Re:引数について かっくん 03/1/1(水) 20:31 ─────────────────────────────────────── ■題名 : 引数について ■名前 : かっくん ■日付 : 03/1/1(水) 19:10 -------------------------------------------------------------------------
下記のような関数を作りましたが fMaru (365,250) のように書いて呼び出そうとするとエラーになってしまいます。 いろいろ、試したのですが、引数をひとつにすると動きます。 何が問題なのでしょうか? よろしくお願いいたします。 Public Sub fMaru(vX As Integer, vY As Integer) '希望位置に丸をつける関数 ActiveSheet.Shapes.AddShape(msoShapeOval, vX, vY, 24.75, 16.5).Select Selection.ShapeRange.Fill.Visible = msoFalse End Sub |
かっくんさん、あけましておめでとう^^; >下記のような関数を作りましたが > fMaru (365,250) fMaru 365, 250 と呼び出してください。 それか、 Call fMaru (365, 250) でも良いと思います。 ではではぁ |
>いろいろ、試したのですが、引数をひとつにすると動きます。 横からすいません。 使い方によっては Callのあるなしで結果が違うので注意が必要です。 例 Option Explicit Public Sub XXX(n As Long) n = 100 End Sub Sub test1() Dim i As Long i = 50 XXX (i) MsgBox i End Sub Sub test2() Dim i As Long i = 50 Call XXX(i) MsgBox i End Sub test1とtest2はどちらもXXXを実行していますが結果が違います。 Callなしで引数を括弧で囲むと値渡しになってしまうためです。 引数ひとつでもCallの使用をおすすめします。 おじゃましました。 |
Jカーターさん、こんばんわ。 >>いろいろ、試したのですが、引数をひとつにすると動きます。 >横からすいません。 >使い方によっては >Callのあるなしで結果が違うので注意が必要です。 >Public Sub XXX(n As Long) > n = 100 >End Sub > >Sub test1() 略 >End Sub > >Sub test2() 略 >End Sub > Sub test3() Dim i As Long i = 50 'JuJuさんのやり方としてはこんな感じ(Callも括弧も省略) XXX i MsgBox i End Sub Callのヘルプより 引用開始=========== プロシージャを呼び出すとき、キーワード Call は省略できます。 キーワード Call を使って、引数が必要なプロシージャを呼び出す場合は、引数リスト (引数 argumentlist) をかっこで囲む必要があります。 キーワードCallを省略するときは、引数リストを囲むかっこも省略しなければなりません。 引用終了=========== >Callなしで引数を括弧で囲むと値渡しになってしまうためです。 引数が2つ以上だと起こらないエラーですね(その前に構文エラーが発生)。 Callを省略して括弧を省略し忘れると結果が変わるというのは、バグかな? それとも仕様かな? |
> Callを省略して括弧を省略し忘れると結果が変わるというのは、バグかな? >それとも仕様かな? おはようございます。 たぶん仕様と思われます。(理由はわかりませんが) |
こんにちわ >>Callなしで引数を括弧で囲むと値渡しになってしまうためです。 > 引数が2つ以上だと起こらないエラーですね(その前に構文エラーが発生)。 > Callを省略して括弧を省略し忘れると結果が変わるというのは、バグかな? >それとも仕様かな? 私見ですが Call をつける場合は、引数リスト全体を()で囲わなくてはなりませんから、 XXX (i) と書いたらば、これは Call XXX ((i)) とおなじであると解釈すべきではないかと思います。 この時、内側の()は、式の一部とみなされてしまうので、 サブプロシジャには、変数iが参照渡しでわたるのではなくて、 (i)という式の演算結果が値渡しでわたっていると考えられます。 すなわち、 Call XXX ( i*1 ) としたときと同様に、変数iには値が返ってこないです。 ということで、至極まっとうな仕様であると私は理解しています。 |
jujuさん 早速の回答ありがとうございました。 Jカーターさん 詳しい説明ありがとうございました。 お二人のレスにてこの件解決できました。 |