アプリ版:「スタンプのみでお礼する」機能のリリースについて

のみこみが悪くてすみません。
マクロ自動記録でマクロをほんの少し進めている初心者です。

ファイルをあけたときに「TOP」シートを開きたいのですが

以前次のように教えていただいたのですが
その後の操作についてさらに教えてください。

標準モジュール→ModueL 1 をダブルクリックをしました。
そして画面の右側に

Sub Auto_Open()
Worksheets("TOP").Activate
End Sub
と入れました。

この後どのようにしたら良いのか教えてください。
よろしくお願いします。

別件でModueL 1~ModueL 10ぐらいはありますが
そもそもモジュールとは何ですか。
どのようなときに活用するのですか。

こんな基本的な質問ですみませんがよろしくお願いします。

A 回答 (3件)

>ファイルをあけたときに「TOP」シートを開きたいのですが



保存するとき「TOP」シートを一番前にして保存すれば、
開いたときは必ず「TOP」が開いた状態で出てきますけど?

AutoOpenマクロは、下手に使うと色々と問題が出てくるマクロですから
初心者の方は「最後に特定のシートが先頭に出てくるような処理をして
保存する」ような方針でプログラムを組んだほうがいいと思いますが?
    • good
    • 0

こんにちは。



まず、前回(#2569163)で、教えてもらったものの内の選択肢ですが、基本的には、

ThisWorkbookモジュールで、
で、
Private Sub Workbook_Open()
 Worksheets("TOP").Select
 'Worksheets("TOP").Activate 'どちらでもよい
End Sub

ということです。

Auto_Open() に書いてもよいのですが、その使いこなしを理解してからのほうがよいです。その違いについては、あまり書かれていませんし、知らない人も多いかと思います。

その理由は以下で書きます。

>この後どのようにしたら良いのか教えてください。

一旦、保存し、再び開けるだけで良いです。
これは、「イベント・ドリブン型マクロ」と呼んで、イベント(人が何かを行う時 -- 開ける・閉じる・選ぶ)などによって起動される種類の自動実行型のマクロです。

>別件でModueL 1~ModueL 10ぐらいはありますが
>そもそもモジュールとは何ですか。

モジュールというのは、元の意味は、「規格化された構成単位」ということで、プロシージャをまとめて置いておく場所です。(何年後かにこの意味が、とても大事なことになります。ならなかったら、それはそれまでです。)

そこには、三つのものが基本的には入ります。「宣言」「ステートメント」「プロシージャ」というものです。それぞれは、詳しく知らなくてもよいです。プロシージャの中で、単独で他から命令で動かせるものが、「マクロ」です。主に計算をし、自分では仕事をしないのが、「ユーザー定義関数」です。

モジュールには、また、三つあります。

・クラスモジュール
・標準(ジェネラル)モジュール
・ローカルモジュール[例:ThisWorkbook, Sheet, UserForm]
 (「ローカルモジュール」と言い方は一般的ではないようです。これは、スコープと言って、その守備範囲に対して、標準モジュールに対して、便宜的に呼んでいます。)

それぞれには、それぞれの特徴がありますが、Excelでは、基本的には、標準モジュールに入れることになっています。しかし、他のアプリケーションでは、必ずしも、そうではありません。時々、シートモジュールやユーザーフォームモジュールに詰め込む方がいますが、それは、間違いです。

シートモジュールは、その親オブジェクト(シート)を働かせるために専用の働きをします。

>別件でModueL 1~ModueL 10ぐらいはありますが

それは多すぎます。というよりは、必要な限り、まとめてください。

標準モジュールというのは、親オブジェクトが、Application になっていますので、扱いが楽なのです。親には、直接、抱えている他に違った子供(シート)がいないために、命令を素直に聞いてくれます。しかし、あまり子供が多いと、面倒をみるのが遅れてしまいます。また、子供が親に要求する内容(複数のプロシージャの内容)は、なるべく統一したほうがよいということです。例えば、文字処理班とか、レイアウト班とか、計算処理班とか、それぞれをモジュールの中で別けてあげます。

シートモジュールでは、自分の子供(シートなど)のいうことを優先します。例えば、「"A1"」というと、自分のシート(Sheet1)の、"A1" のことを考えるように作られています。だから、いや、「Sheet2 のA1」だというと、「知らない(エラー)」と言ってきます。

根本的な違いは、最初の区分けで書いたように「ローカル」と「標準」というように、標準モジュールは、その守備範囲は、何もステートメント(自分はここしか面倒みません、と書く = "Private")しない限りは、ブック全体に掛かってきますが、「ローカル」は、基本的には、そのシートなどの範囲のみです。

では、なぜ、ThisWorkbookモジュールを私は薦めたかというと、ThisWorkbook モジュールは、ブックの玄関なのです。ほとんどは、ThisWorkbookを通ってから、次に、命令を読むからです。

クラスモジュールというのは、家の中の家訓のようなものです。門限が何時とか、洗濯は夜中にしないとかいうように、それぞれのオブジェクトの子供たちにルール作りをさせます。しかし、それは、単に家訓書みたいにしていますから、開くときなどに、その家訓書を読み上げないと、みんなは実行しません。しかし、これは、ThisWorkbook モジュールでも同じようなことが出来ます。ただ、あまり、ここは玄関ですので、私は、あまり、ここにごちゃごちゃ置くのが好きではありません。かなり上級の人でも、ここに平気な人がいるようですが、あまり、片付け上手ではない人かも、と思ってしまいます

クラスモジュールは、将来、重要になってきます。今VBAユーザーは、あまりクラスモジュールを目の当たりにすることが多くありません。先ほど述べたイベント(人が何かをする動作)の設計図になるのです。その時に、一つ一つの動作ではなく、汎用性のあるもの(オブジェクト)の設計にもなるのです。

なお、オブジェクトというのは、VBAでは、二つの意味を持っています。本来は同じものなのですが、一つは、シートやブック、または、ボタンやユーザーフォームなどのコントロールなど既に形になったものと、もう一つは、そうした概念(クラス定義)が実体化(インスタンス)したものと両方があります。

ところで、最初のご質問のレベルですが、入門編で行ってもよいのですが、本格的には、中級に入ってからです。「イベント」というのは、書いて貼り付けるなら誰でも出来ますが、それを本当に取り上げられるの、VBAの上級コースです。上級とはいっても、理屈だけだったら、3ヶ月ぐらいで卒業してしまいます。
    • good
    • 0

前にも同じ質問があって、答えたような気がするが、


TOPシートって何?
この用語エクセルで余り見ないが。
(!)TOPという名をつけたシート
(2)アクチブシート
(3)(現時点で)タブが一番左にあるシート
のどれかでしょうが。区別できてますか。
(1)Worksheets("TOP").Activate
(2)Activesheet.Select
((3)Worksheets(1).Activate
標準モジュールとは
VBEでVBAのコードを書き込む場所です。シートモジュールに対し、どこからでも参照できる。
http://t_shun.at.infoseek.co.jp/My_Page/Excel-VB …
http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub0 …
クラスモジュール
http://www.moug.net/skillup/opm/opm08-01.htm
その他
http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub0 …
WEBで照会すれば沢山でてきます。
>どのようにしたら良いのか教えてください
何をしたいのかかいてないのでは。
閉じてエクセルブックを保存すればよい
ということかな?
その後、いつでも、そのブックを開くという人間(またはプログラム)の動作をキッカケとして実行されるのです。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!