- ベストアンサー
本当に基本的なことなんですが
エクセルVBAでモジュールを使おうと思っています。 以下のようにモジュールにコードを書き、実行したらコンパイルエラー End Subが必要ですとメッセージがでてしまいます。 どこをどう直せばいいんでしょうか? 変数を宣言しているだけだと思うんですが。 Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2002/10/29 ユーザー名 : ' Sub Main() Public BaseCell As CellFormat Public BaseCellRow, BaseCellColumn As String End Sub End Sub 暇な時でいいですから、回答お願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>スタートアッププロシージャとして定義するSub Main これは、呼ぶ側が便宜上そう定義しているだけです。 マクロとしてのVBAであれば、常にMainという名前のプロシージャがコールされる わけではなく、ボタンなりに登録してある名前のプロシージャが必要なときに コールされるという使われ方です。 おそらくそのマニュアルでは、最初にMainが起動されるような「Excelの設定」が 存在し、そこから検索なりの機能を起動するという意味で、「スタートアップ」と 呼んでいるのだと思います。 また、別な言い方をするならば、 >C言語におけるMainのようなもの は、Excel自身。と解釈しておいた方が混乱しなくてよいと思います。 Mainに相当するものはすでに動いていて、どのプロシージャをコールするかは ユーザーの設定しだいということですね。
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
(1)Publicの宣言は、宣言セクションにしないといけないのでは。 「モジュール レベル変数をほかのモジュールでも利用できるようにするには、モジュールの宣言セクションで Public キーワードを使って "パブリック変数" を宣言します。パブリック変数の値は、アプリケーションのすべてのプロシージャで利用できます。 (2)CellFormatはエクセル2002からできた機能のようで、エクセルのVersionを銘記すべきである。 (3)Main()という名をつけるのは勝手だが、Javaなどのように、コントロール(制御)がここに初めに 来るという保証は無いのはご存知ですよね。
お礼
すばやい回答ありがとうございます。 VBA、VBはまったくの初心者であるためモジュールの使い方とかよくわかっていませんでした。もう少し勉強したほうがよさそうですね。 (2)エクセルのバージョンはご指摘のとおりエクセル2002でした。
補足
もう少し質問させて下さい。私の持っているマニュアルによると、「スタートアッププロシージャとして定義するSub Main」と書いてあります。なので私はMainはC言語におけるMainのようなものだと思っていました。これは間違っていますか?
- taknt
- ベストアンサー率19% (1556/7783)
マクロ内で他のマクロを使うには、 call Main とかすればいいです。
- taknt
- ベストアンサー率19% (1556/7783)
マクロのなかにマクロは できません。 Sub Macro1() End Sub Sub Main() Public BaseCell As CellFormat Public BaseCellRow, BaseCellColumn As String End Sub とすれば、いいでしょう。 って、外側のマクロは 何をやってるのかな?
補足
すばやいレスありがとうございます。 >って、外側のマクロは 何をやってるのかな? 実はこのあとSub Main内でUserForm1とUserForm2を表示させようとしています。この際Sub Macro1内ではすることがないんですが、そういうやり方って正しいですか?あるいは書き方としておかしいでしょうか?
お礼
回答ありがとうございます。 私のみたのはVisual Basicのマニュアルだったので、ちょっと意味が違っていたかもしれないですね。CにおけるMain=Excel自身という解釈了解しました。わかりやすい説明ありがとうございました。