サブルーチンに引数を2つ以上渡す方法

このQ&Aのポイント
  • Access2002、vba上でサブルーチンに引数を2つ指定したいのですが、なぜか「コンパイルエラー 修正候補=」と出てしまいます。
  • 引数を1つにするとうまく動作します。どなたかお分かりの方いらっしゃいましたら教えてください。
  • サンプルコードが以下になります:the_subroutine(a, b) ※ここでコンパイルエラー Sub the_subroutine(c As String, d As Object)
回答を見る
  • ベストアンサー

サブルーチンに引数を2つ以上渡したい

Access2002、vba上で サブルーチンに引数を2つ指定したいのですが、 なぜか「コンパイルエラー 修正候補=」 と出てしまいます。 引数を1つにするとうまく動作します。 どなたかお分かりの方いらっしゃいましたら教えて ください。 宜しくお願いします。 サンプルコード: -------------------------------- the_subroutine(a, b) ' ※ここでコンパイルエラー Sub the_subroutine(c As String, d As Object) End Sub -------------------------------

質問者が選んだベストアンサー

  • ベストアンサー
  • taocat
  • ベストアンサー率61% (191/310)
回答No.1

こんばんは。 ●( )を省く  the_subroutine a, b   ●Call で呼ぶ  Call the_subroutine(a, b) 以上です。  

svankmajer
質問者

お礼

taocatさん ●()を省く のやり方でやったらうまくいきました。 大変ありがとうございました。

関連するQ&A

  • VBAの関数で引数渡しでエラー

    関数呼び出しでObject型を渡したいのですが「引数の型が一致していません」との エラーになってしまいます。 以下のプログラムをどのように修正すればよいのでしょうか? Sub Test() Dim obj As Object Set obj = CreateObject("Scripting.Dictionary")     :   Sample(obj) End Sub Function Sample(obj As Object) End Function

  • VBAのUserFormでサブルーチンを用いる

    UserFormのコードに次のように書いてbuttomを押してみると コンパイルエラー:ByRef引数の型が一致しません。 と出てしまいます。 どこが間違っているのでしょうか?ご回答お願いします。 Private Sub buttom_Click() Dim i As Integer Dim name As String i = 1 name = "名前" Call test(i , name) End Sub ---------------------------------------------- Sub test(i As Integer, name As String) Cells(i , 1) = name End Sub

  • Perlのサブルーチンの引数引継ぎ?

    こんにちは。 Perlの引数について質問です。 サブルーチンに引数を渡し、サブルーチンの中で他のサブルーチンをよんでいます。 すると引数を渡していないサブルーチンにまで引数が与えられてしまっているようです。 @_で受け取ると引数が渡されてしまい、$_[0]だと渡されずにすみます。 これはなぜなのでしょうか?Perlには引数を引き継ぐルールでもあるのでしょうか? 以下、サンプルです。 -------------------------------- &test('引数です'); sub test { &test2; } sub test2 { (my $hoge) = @_; } -------------------------------- $hogeに「引数です」が入ります。 &test2;を&test2();とすると大丈夫です。

    • ベストアンサー
    • Perl
  • Fortranのサブルーチン引数について

    他人が作ったFortran(恐らくFortran77)のプログラムで計算をしようとしています。 コンパイルはできるのですが,実行するとエラーが出てしまい困っています。 エラーメッセージは 「forrtl:severe(157):Program Exception - access violation」 となっていて,実行時エラー番号で調べると 「プログラムが適切な参照権を持っていない仮想アドレスに書き込み,または読み取り を行おうとした」と出ていました。 Fortran初心者の自分にはイマイチ意味が判らないのですが,エラーが出た後に サブルーチンのある決まった場所に黄色い矢印が示されます。 そこで今,その部分のサブルーチンを確認しているところです。 前置きが長くなってしまいましたが サブルーチンの中を確認している途中で疑問に思った所が一つあります。 問題のサブルーチンは --------------------------------------- call dbesl(EN,0,BX0,BY0,BI0,BK0)     subroutine dbesl(X,NOR,BX,BY,BI,BK) FN = NOR  ・  ・  ・ 11 NOR = FN               <---この行に黄色い矢印が出る return end --------------------------------------- となっているのですが,サブルーチンを呼び出すcall文の所で 2つ目の引数が『0』となっているのは正しい使い方なのでしょうか? どうもサブルーチン内の計算をしてメインプログラムに引数を返す所が おかしいような気がしています。 因みにメインプログラムに戻る際の"FN"の値は『0』となっていました。 コンパイラはCompaq Visual Fortranを使用しています。 足りない情報は出来るだけ追記していきますので,ご教示宜しくお願いします。

  • 違いを教えてください。

    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)」というコンパイルエラーになりました。

  • エクセルVBA イベントプロシージャに引数を渡せま

    お世話になります。 エクセル2003/XP 使用です。 イベントプロシージャに引数を渡せまるかどうか教えていただけますでしょうか? 下記のコード中の変数mysheetnameを ユーザーフォーム、→ CommandButton1のプロシージャに 引数として渡して行きたいのですが、 実行すると、一番最初のWorkbook_SheetBeforeRightClickの時点で、 コンパイルエラー:  プロシージャの宣言が、イベントまたはプロシージャの定義と一致していません。 とエラー表示されます。 イベントプロシージャに引数を渡すことはできますでしょうか? ---------- ThisWorkBook内 ---------- Public mysheetname As String Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) mysheetname = ActiveSheet.Name UserForm1.Show (mysheetname)     '←変数mysheetnameの値をユーザーフォームに渡したい。 End Sub ---------- ユーザーフォーム ---------- Private Sub UserForm_Initialize(ByVal mysheetname As String ) 処理 End Sub Private Sub CommandButton1_Click(ByVal mysheetname As String ) 処理 End Sub ’--------- ここまで 引数について少し理解し始めたばかりの者です。 よろしくお願いします。

  • メッセージを表示する関数の引数について

    はじめましてよろしくお願いします。 現在、Access2002でメッセージを表示する関数を作成していますが、 引数を増やしたらどうしてもコンパイルが通らず困っています。 やっていることは標準モジュールに Public Sub ExcMsgBox(MSG As String, Title As String)   MsgBox MSG, vbOKOnly + vbExclamation, Title End Sub という関数をつくってフォームから ExcMsgBox ("入力必須項目が全て入力済でないため、" & _       vbCrLf & "編集内容を保存できません。","入力必須項目") という形で呼び出していますが、 これだと「コンパイルエラー、修正候補 =」と出ます。 SUBで関数宣言しているので、戻り値は無いはずなのですが TEST = ExcMsgBox ("入力必須項目が全て入力済でないため、" & _       vbCrLf & "編集内容を保存できません。","入力必須項目") とするとその場のコンパイルエラーは避けられるのですが、実際に実行すると やはり「コンパイルエラー Functionまたは変数が必要です」というエラーがでます。 関数を Public Sub ExcMsgBox(MSG As String)   MsgBox MSG, vbOKOnly + vbExclamation End Sub のように引数を一つ減らして、フォームから ExcMsgBox ("入力必須項目が全て入力済でないため、" & _       vbCrLf & "編集内容を保存できません。") のようにして呼ぶと正しくメッセージボックスが表示されるのですが。 基本的なことで何か勘違いしているかもしれませんが、何かお気づきの点が ありましたらご教授ください。よろしくお願いします。

  • サブルーチンについて

    下記のようなソースコードを書いたところエラーが出てしまいました。 $sum = $sample2($a); の箇所でエラーが起こっているようなのですが、解決の仕方が分かりません。 &sample1(5,'&sample2'); sub sample1 { ($a,$sample2) = @_; $sum = $sample2($a); print $sum; } sub sample2 { ($a) = @_; $b = 10; $sum = $a + $b; return $sum; } このように、サブルーチンの中に更にサブルーチンを書いて、なおかつそのサブルーチン名を一旦変数に格納して使用する場合はどのようにプログラムを書けば良いのでしょうか?? ""で囲ったりといろいろとしてもダメでした。 もちろん、$sum = $sample2($a); ではなく $sum = sample2($a); のように書けば良いとは思うのですが、一度サブルーチン名を変数に入れてから使用する場合はどのようにすれば良いのでしょうか?? ご回答の程よろしくお願い致します。

    • ベストアンサー
    • CGI
  • エクセルマクロのサブルーチン引数で配列を使用したい

    VBA初心者です。 エクセルのマクロを組んでいるですが、サブルーチンの引数を配列にしたいのですが、どうすればよろしいでしょうか? 下記に例を示します。 呼び出し(Call)とサブルーチンの配列変数の記載方法がわかりません。 特に気になるのは、サブルーチンの配列に配列数(下記であれば10)を記入する必要があるのか? 必要な場合、元の配列数を変更した場合、どうすればミスなく、漏れなく修正できるか、良い方法はありまんせんか? (例) (呼び出し側) Dim AA(10) As Integer Call Test(AA)     ← 引数はAAでよい?それともAA() Sub Test(ByRef AA As Integer) ← AA or AA() or AA(10) ? AA(3) = AA(2) + AA(1) 以上、お手数をおかけしますが、よろしくお願いします。

  • サブルーチンにオブジェクト名を引数で渡したい

    度々お世話になっております。 基本的なことだとは思うのですが,うまく探せませんでしたので質問させてください。 現在,次のようなプログラムをVB6.pro環境で作っています。 ・ボタン(command1)を押す→ボタンの色が赤に変わる ソースは以下の通りです。 Private Sub Command1_Click()  Call ColorChange(Command1) End Sub Sub ColorChange(Obj As Object) Obj.BackColor = vbRed End Sub 以上のプログラムでは,サブルーチンを呼び出す際に オブジェクト名(Command1)をダイレクトに入力していますが, これを自動で入力する関数はありますでしょうか。 Form1ならば,Meのようなものです。 よろしくお願いいたします。

専門家に質問してみよう