• ベストアンサー

変数を引き継ぐには...

Public Sub CommandButton1_Click() Dim m As Integer m = 1 run "macro8()" End Sub Sub Macro8() range("a1")=m end sub run を実行したときに,変数mを引き継ぐ方法を教えてください。

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

  • ベストアンサー
回答No.3

Private Sub CommandButton1_Click()  Dim m As Integer  Dim z As String  m = 10  z = "ABC"  Call Macro8(m, z) End Sub Private Sub Macro8(X As Integer, y As String)  Range("a1") = X  Range("a2") = y End Sub あえて、変数名を別にしてみました。 つまり、Macro8で使う変数は m や z で無くても良いのです。 順番とタイプが合えばOKです。 run "macro8()"は、 Call Macro8()にして下さい。 (call は要らないけど、明示したほうが分りやすい。) Sub Macro8()は、 Private Sub Macro8()として下さい。 ではでは

その他の回答 (2)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

Public Sub CommandButton1_Click() Dim m As Integer m = 1 Call Macro8(m) End Sub Sub Macro8(m As Integer) Range("A1") = m End Sub

noname#91724
noname#91724
回答No.1

これでどうでしょ? Dim m As Integer m = 1 Macro8 m End Sub Sub Macro8(m As Integer) Range("a1") = m End Sub

yoshiki234
質問者

お礼

早速の回答をありがとうございます。 試したところ,  コンパイルエラー  subまたはFunctionが設定されていません。 とメッセージがでるのですが,何が原因でしょうか?

関連するQ&A

  • EXCELでの変数によるMacro自動実行について

    すいませんが教えてください・・・・・・ EXCELシートにツールボックスより、コマンドボタンを2つ配置しました。 (AUTOMATICはPublic変数で標準モジュールで定義しています Dim AUTOMATIC As Boolean ) ------------------------------------------------------------------ CommandButton_1 : Private Sub CommandButton1_Click() AUTOMATIC = True End Sub CommandButton_2 : Private Sub CommandButton2_Click() AUTOMATIC = False End Sub ------------------------------------------------------------------ あとはEXCELを起動中に、AUTOMATICが Trueでセル(例えばA2のセル)の 値が100のときには Macroを起動したいのですが、どこにどう記述したら いいか教えて欲しいのです。 ------------------------------------------------------------------ CommandButton_1 : Private Sub CommandButton1_Click() if Cells(2,1) = 100 then 'A2はCells(2,1) Macro実行 end if End Sub とAUTOMATICを使用せずに記述しても、毎回CommandButton_1をクリックしな ければMacroが起動することができないので煮詰まってしまいました。 (一度CommandButton_1をクリックしておくとあとはA2セルを監視するだけ でMacroを起動させたい) すいませんがわかる方、教えていただけないでしょうか よろしくお願いします。

  • ExcelVBA 変数を使ってセルの番地を表す

    Exce2000のlVBAで Sub Macro11() Dim LastColumn As Integer Dim LastRow As Integer LastColumn=5 LastRow=1 Range(("LastColumn"), ("LastRow")).Select End Sub と打ち込むとエラーが出ます. 変数を使ってセルの番地を指定して セルを選択できないでしょうか?

  • エクセルでpublic変数が使えない!

    突然、私のパソコンで、エクセルのpublic変数が使えなくなりました。なぜか、public変数そのものが機能しなくなったみたいです。たとえば、 public a as integer と宣言し、aの値を別のbookに渡して使おうとします。ユーザフォームにCommandButton1を貼り付けて、クリックし、次のイベントプロシージャを実行させ、デバックモードのウォッチ式で、aの値を追跡すると、”あるセルの値”は一旦、aに代入されるのですが、End Subのところで、値が<対象範囲外>、型がemptyとなってしまうのです。 Private Sub CommandButton1_Click() a = ”あるセルの値” End Sub 何か設定が変わってしまったのでしょうか? それまで使っていた、プログラムが使えなくなって困っています。 どなたか、回答よろしくおねがいします。

  • VBAのプロシージャーと変数の名前の区別について

    VBAの初心者です。教えてください。 Sub ex() Dim a As Integer Dim b As Integer a = 2 a a, b MsgBox b End Sub Sub a(a As Integer, b As Integer) b = a End Sub 上記のプログラムを実行するとうまくいきません。VBAのプロシージャーと変数って同じ名前を使うとだめなのですか?教えてください。

  • vba boolean変数を開放する方法

    エクセルのセルに「○○○○○○○○○○××××××××××」と入っているものをランダムに並べ代えるマクロを探してみました。 Sub macro2() Dim i, m As Integer Dim b, c As String Dim flg(1 To 20) As Boolean b = Cells(1, 1).Value Randomize For i = 1 To 20 Do m = Int(20 * Rnd + 1) If flg(m) = False Then flg(m) = True Exit Do End If Loop c = c & Mid(b, m, 1) Next i Cells(1, 2).Value = c End Sub これはうまく動くのですが、10行分やろうとして、以下のように変更すると暴走(終わらない)します。 Sub macro2() Dim i, m, n As Integer Dim b, c As String Dim flg(1 To 20) As Boolean For n = 1 To 10 b = Cells(n, 1).Value Randomize For i = 1 To 20 Do m = Int(20 * Rnd + 1) If flg(m) = False Then flg(m) = True Exit Do End If Loop c = c & Mid(b, m, 1) Next i Cells(n, 2).Value = c next n End Sub 一行目が終わってもboolean変数の値がそのまま残っているのが原因らしいのですが開放する方法がわかりません。 取りあえずもう一つマクロを追加してやりたいことはできたのですが、 Sub macro1() Dim n As Integer For n = 1 To 10 Call macro2(n) Next n End Sub Sub macro2(n As Variant) 以下略 なんかスッキリしません。 boolean変数を開放し、マクロひとつですます方法を教えて頂きたくお願いします。 flg(m) = Falseを挿入してもダメでした。

  • 変数の扱いについて

    こんにちは。お世話になります。 ユーザーフォームモジュールで宣言した変数を標準モジュールのサブプロシージャ内で使うには どのようにしたらよいのでしょうか? ====== ユーザーフォームモジュール ======= Dim MyData1 as Long Dim MyData2 as Long Private Sub CommandButton1_Click() For MyData1 = 1 To 10 MyData2 = MyData1 * 2 Call test1 Call test2 Next MyData1 End Sub ====== 標準モジュール ======= Sub test1() Worksheets("Sheet1").Range("A" & MyData1).value = MyData2 * MyData2 End Sub Sub test2() Worksheets("Sheet2").Range("A" & MyData1).value = MyData2 + MyData2 End Sub For~Nextは標準モジュール内ではなくユーザーフォームモジュール内に作りたいのです。 おわかりの方よろしくお願いしますm(_ _)m

  • 実行中のマクロを中断したい

    過日、「マクロの中断」について質問し適切な回答をいただき無事解決したものです。 ところが、初心者の悲しさ、少し変わると全く応用がききません。 Range("A1:B10")を読み上げている途中で中断したいのです。前回ご教示いただいたところにより 「DoEvents」や「Me.Repaint」「Sleep」などをあちこち挿入してみましたがうまくいきません。理屈、理論を理解できていないので仕方ないのでしょうがよろしかったら又ご指導のほどお願いします。Excel2003です。 Dim c As Range Dim CancelFlg As Integer Private Sub CommandButton1_Click() Range("A1:B10").Select CancelFlg = 0 For Each c In Selection   ’ DoEvents Application.Speech.Speak c.Value  ’ DoEvents If CancelFlg = 1 Then Exit For  ’ DoEvents Next c Range("A1").Select End Sub Private Sub CommandButton2_Click() CancelFlg = 1 End Sub 前回のご教示いただいたもの Private Sub CommandButton1_Click() Dim i As Integer CancelFlg = 0 For i = 1 To 100 DoEvents ActiveCell.Value = 1 ActiveCell.Offset(1, 0).Activate Application.Wait (Now + TimeValue("0:0:01")) If CancelFlg = 1 Then Exit For Next i End Sub Private Sub CommandButton2_Click() CancelFlg = 1 End Sub

  • 変数の型の色の違い

    Sub test() Dim a As String Dim i As Range End Sub とすると 変数の型のが 「String」と「Range」の色が違いますがなぜでしょう?

  • 値渡しについて

    UserForm1で以下のように求めた値「R」を UserForm2に渡すにはどのようにすればよいのでしょうか。 **************************************** <UserForm1(コード)> Public R As Integer ----------------------------------- Private Sub CommandButton1_Click()    Dim N As Integer        :    N = TextBox1.Text    R= N * 2 + 3        : End Sub **************************************** <UserForm2(コード)> Private Sub CommandButton1_Click()   Dim i As Integer       :   For i = 4 To R       :   Next i       : End Sub **************************************** どなたか教えて下さい。

  • エクセルVBAの次のコードの意味教えて下さい。

    Sub macro1() Dim a As Integer, b As Integer a = 1 b = 5 macro2 a, b MsgBox a + b End Sub Sub macro2(c As Integer, d As Integer) c = c * 10 d = d * 5 End Sub 答えは35と出ます。 よろしくお願いします。

専門家に質問してみよう