- ベストアンサー
エクセルマクロのCallとコンパイルエラー
- エクセルマクロを呼び出す方法やコンパイルエラーが発生した場合の対処方法について教えてください。
- エクセルマクロの呼び出し方法について説明し、コンパイルエラーの解決策を提案してください。
- エクセルマクロのCallでコンパイルエラーが発生した場合の対処法を教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
追伸 先の回答の意味が理解できていたとして リセット がプロシージャ名だとして場合で呼び出せないケース Private Sub リセット() となっている場合は他のモジュールからは呼び出しできません Privateとなっている場合はそのモジュール内でしかコードが実行できません そのような場合は Sub リセット()に書き直すか 呼び出し元と同じモジュールへ移動するしかありません
その他の回答 (4)
- ld8861
- ベストアンサー率33% (9/27)
更に追伸 リセットが呼び出せてコードが走ったとして リセットのプロシージャ内に引数が必要なものがあり これが与えられていないことによってエラーを起こす場合は 引数を与えてあげなければいけません 他のプロシージャへ引数を渡す場合は Call リセット(ここに引数) となりますが Callをつけて呼び出した場合は値渡しになるので引数の書換えはできなくなります また リセット側のほうには引数の受け取りをする仕掛けを作る必要があります Sub リセット(引数名 As 引数の型) となります これは 一度本を読んだほうがいいと思いますね・・ わかりやすい本だと 大村あつし氏の かんたんExcelVBA (基本、応用、コントロール)の3冊があります ほんとうは全部買ったほうがタメになりますが とりあえずは基本を買いましょう。
お礼
基本を知らず 教えてもらったとうりに行ったらたまたま動いていて それが全部通用すると思ってしまったのですね。 基本を知らないと教えてもらっても駄目ですね。 どうもありがとうございました。
- ld8861
- ベストアンサー率33% (9/27)
基本的なことを理解されていないようですね 印刷は Module2 の中にあるプロシージャで Sub 印刷() となっていませんか? この場合 この印刷 がプロシージャ名になります 変数やプロシージャ名には日本語が使えます 初めての方には感覚的に理解しがたいでしょうけど・・
お礼
モジュール名や日本語でも使える理由がわかりました。 モジュール作成の時から関係しているのですね。 ありがとうございました。
補足
申し訳ありません。 >印刷は Module2 の中にあるプロシージャで >Sub 印刷() となっていませんか? はいそのとうりでした。 でリセットというモジュールの中は Sub リセット() となってました。 よって Call リセット でいいのかと思いました。
- ld8861
- ベストアンサー率33% (9/27)
モジュール名を書いても呼び出しはできません プロシージャ名を書いてください!
お礼
たくさんお返事ありがとうございました。
補足
ありがとうございます。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$B$5" And Len(Range("B5").Value) > 1 Then Call 印刷 ← 印刷 はModule2です。ここは印刷と漢字で入力しています。 End If End Sub この印刷というマクロは動作しています。 これはなぜ呼び出せるのでしょうか?
- nattocurry
- ベストアンサー率31% (587/1853)
Call の次に書くのは、関数ですよね? モジュールは関数ではありませんよ。 関数以外も呼べるんでしたっけ?
お礼
別の方から回答いただきました。 モジュール名だと思ったらプロシージャー?だそうです。 漢字で入れて動いたので??でした。 ありがとうございました。
補足
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$B$5" And Len(Range("B5").Value) > 1 Then Call 印刷 ← 印刷 はModule2です。ここは印刷と漢字で入力しています。 End If End Sub セルB5の値は空白で、セルB5に入力してエンターを押すと 標準モジュールにある印刷というマクロが走って 印刷というマクロの内容が実行されて印刷までされます。 ですから印刷というマクロは動いています。 この印刷というマクロの中である条件になったら、別のマクロであるリセットというマクロを 起動させたいのですがコンパイルエラーです。
お礼
教えていただいたとうりでした。 その後の説明で納得です。 ありがとうございます。