• 締切済み

【VBA】マクロのルールについての文章 解説

マクロのルールについて記載された一文について、次の内容を噛み砕いて教えていただけますか。 さっぱりわかりません。。。 「イベントを利用するマクロはオブジェクトのモジュールに記述する」 ワークシートをアクティブにすると、アクティブになったワークシートでActivateイベントが発生します。このイベントを利用して、ワークシートが切り替わった時自動的に起動するようなマクロは、Worksheetオブジェクトのモジュールに記述しなければなりません。

みんなの回答

回答No.4

VBEを使って、ある程度マクロを書いている という前提でお話します。 ・モジュールとは書くトコです。 いつもは『標準モジュール』に書いていると思います。 ココは自由に書いていい場所なんで「どこのシートから呼び出してもいいですよ」ということです。「他のブックからもジャンジャン呼び出して下さい」ということです。 ブック…(エクセルファイルのことを「ブック」と言います) -- ・オブジェクトとはブックとかシートとかのことです。 ゲームで出てくる、木のオブジェクトとかオブジェクト破壊とかいう言葉と同じです。セルとかもオブジェクトの一部です。まぁ部品という意味です。 -- ・イベントとは、何か操作をした瞬間に(勝手に)動かしますよ。ってマクロです。 膝のお皿を叩くと「ピコンッ」て(絶対)足が動いてしまうのがイベントです。 足を自分で動かすのが普通のマクロです。 -- ThisWorkbookというモジュールに書くと、ブックが開いた時や閉じた時、保存した時に動くイベントとなります。 各シート名のモジュール(Sheet1(Sheet1)とか)に書くと、そのシートを開いた時やシート内のセルを変更した時に動くイベントになります。 それぞれVBEの「標準モジュール」の上の「Microsoft Excel Objects」というフォルダにあります。 ココにマクロを書いてもいいんです。 -- 「イベントを利用するマクロはオブジェクトのモジュールに記述する」  ↓ 「なんかした時に勝手に動くマクロは、標準モジュールじゃなくてシートとかのモジュールに書いてね」

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.3

No2の補足です > Worksheetに関するイベントの候補が選択できるようになります。 右側のドロップダウンリストにが抜けてました。

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.2

たとえば、Sheet1がアクティブになったときに自動的に何かをするマクロを作成する場合、VBEの左側にあるプロジェクトウィンドウでSheet1をダブルクリックしたときに表示される右側のコードペインに記述しなければならないということです。(左側とか右側とかは何も設定を変更していない場合の位置です) アクティブイベント以外でも、コードペインの上にある左側のドロップダウンリストでWorksheetを選択するとWorksheetに関するイベントの候補が選択できるようになります。ここで選択した動作は、Sheet1のコードペインならSheet1だけに適用されます。 ちなみに、ThisWorkbookのコードペインでも同じようにしてWorksheetに関するイベントが記述できますが、そこで記述した場合全てのWorksheetに適用されます。

  • bartok88
  • ベストアンサー率6% (16/247)
回答No.1

ワークシートActivateイベントはワークシート固有なので イベントハンドリング処理はこのWorksheetオブジェクト内に記載しないといけない。

関連するQ&A

  • Excel VBAでの初期設定

    Excel VBA 初心者です。Excelは2013です。VBAでBookを開いたときにあるシートの初期設定をしたいと考えています。Activateイベントを使おうと思いましたがイベントが発生しないことがあるため質問しています。 例として以下のようなコードを記述したとき、sheet1以外を開いて保存している場合にはActivateイベントは発生しますが、sheet1を開いて保存している場合にはイベントが発生しないため初期設定の処理ができませんでした。 対応方法をお分かりの方ご教授いただけないでしょうか。 ============================= '"以下をThisWorkbook"に記述 Private Sub Workbook_Open() '②Worksheets("sheet2").Activate も入れれば Activateイベントは発生する Worksheets("sheet1").Activate '①もともと sheet1がActiveで保存されていた場合、Activateイベントは発生しなかった End Sub ============================= '"以下をsheet1"に記述 Private Sub Worksheet_Activate() '初期設定処理 MsgBox "sheet1の初期設定をしました" End Sub ============================= 宜しくお願いします。

  • エクセルVBA/シートのチェンジイベントを発生させない方法?

    Private Sub Worksheet_Change(ByVal Target As Range) MsgBox "イベント発生" End Sub このワークシートがアクティヴになってるときに手入力された場合以外、チェンジイベントを発生させなくするにはどのような方法があるでしょうか? 標準モジュール記載の他のマクロでセルが変更された場合を無視したいのです。 よろしくお願いします。

  • VBA:イベントの使い方

    ActiveXというのを使って、ある測定器から測定値をPC(エクセルシート)に取込んでいます(GPIB)。測定値は一行おきにエクセルに示されます。測定値を取り込んだ瞬間、作成したマクロによってそのときの時刻を隣の列に示したいのですがうまく表示できません。といいますかまずイベントが機能しません。どこが悪いのか教えてください。 Private Sub worksheet_change(ByVal target As Range) i = i + 1 Cells(4 + i, 1).Value = Now End Sub シート内に自動的に測定値が記述されるため、記述されることをイベントとして記述されたことで発生するマクロを記述したつもりです。

  • VBA

    VBEの標準モジュール(例Module1)にVBAのプログラムを書き、 実行した時、ワークシート(例Worksheets(”sheet1”)のウインドウを自動的に開くには(前面に持ってくるには)どのようにコーディングすれば良いのでしょうか。今は実行後確認するため、プロジェクトのSheet1で右クリックして「オブジェクトの表示」でSheet1を出したり、タスクバーをクリックしていますが。まずSheet1を前面に出して処理をしたい。Activate,Select、Showなど試しても効果がありません。

  • Excel VBA 標準モジュール内でイベント

    ワークブックのイベントWorkbook_Openを標準モジュールのAuto_Openで代用できるように ワークシートのイベントWorksheet_Changeを標準モジュールで実行できるようにすることは できなものでしょうか。 その他のイベントに関しても情報があれば教えてください。

  • エクセル デバッグできるのとできないのがある

    シートイベントについて教えてください。 シートモジュールに --------------------------------------------------------- Option Explicit Private Sub Worksheet_Activate() MsgBox "" End Sub Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) MsgBox "" End Sub Private Sub Worksheet_Change(ByVal Target As Range) MsgBox "" End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) MsgBox "" End Sub --------------------------------------------------------- と記載した時に、 F8で動かせるのは、Worksheet_Activateだけなのですがなぜでしょうか? ほかのイベントは、F8で実行させても、OSの音が鳴るだけで、マクロの実行はされません。 ご回答よろしくお願いします。

  • Excelのイベントマクロ

    Private Sub Worksheet_Activate()に関する質問です。 ワークシート1と2があるとします。 ワークシート1は普通のデータが記されており、それのソートを実行するマクロをMacro1、そのデータから重複したものを外してソートするマクロをMacro2とし、Macro1から呼び出してます。 今、シート2を開いたときは必ず、シート1でMacro1を実行するようにしたいのですが、以下のように記述すると、無限ループになってしまいうまくいきません。 どなたか、方法をお教えください。 Sheet2に記載したイベントマクロ Private Sub Worksheet_Activate() Sheets("Sheet1").Select Macro1 Sheets("Sheet2").Select End Sub 標準モジュールに記載したマクロ Sub Macro1() Dim team As Integer ActiveSheet.Unprotect ("pass") Range("A3:c18").Select Selection.Sort Key1:=Range("c3"), Order1:=xlAscending, Key2:=Range("A3") ,Order2:=xlAscending, Header:=xlNo,OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal team = Range("b1").Value ActiveSheet.PageSetup.PrintArea = "$A$3:$c$" + CStr(team + 2) Macro2 Range("A1").Select ActiveSheet.Protect ("pass") End Sub Sub Macro2() Range("i3:j18").ClearContents Range("i3").Select Selection.Consolidate Sources:="R3C6:R18C7", Function:=xlMax, TopRow:=False,LeftColumn:=True, CreateLinks:=False Range("i3:k18").Select Selection.Sort Key1:=Range("k3"), Order1:=xlAscending, Header:=xlNo,OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal Range("j3:j18").Select Selection.NumberFormatLocal = "0_);[赤](0)" End Sub

  • Excel2007マクロでメモリが増加し続ける

    Excel2007でVBAでマクロを組み込んだところ、 クリックイベントが走る度に、仮想メモリが増加し続けるようになってしまいました。 シート上にActiveXコントロールを配置し、 ActiveXコントロールのクリックイベントプロシージャに VBAでマクロを組み込んでいます。 内部で使っているオブジェクトは、 きちんとNothingで解放しています。 マクロを組み込むと必ず発生する現象ではなく、 シート上に配置しているコントロールの数、 ブックのシート数、 モジュールの数、ステップ数、 イベントプロシージャの処理ステップ数、 などのオブジェクトの量が多くなると、 仮想メモリが増加し続けるという現象が起きるようです。 オブジェクトの数、サイズによっては、 1クリックで50Mくらいずつ増加することもあり、 すぐにメモリリークしてしまいます。 XP+Excel2007の環境でのみ発生します。 Vistaでは発生しません。 SPはそれぞれ、XP SP2、Excel 2007 SP1です。 なぜ、このような現象がおきるのでしょうか?

  • VBA シートの切り替えができないようにするには

    こんにちは。いつもこちらでお世話になっています。 現在、VBAでフォームを利用したマクロを組んでいます。 あるボタンを押したときにマクロが実行された後、終了ボタンを押すまでの間はアクティブシートを移動してほしくない場合、シートの切り替えができないように制御したいのですが、ワークシートに直接イベントとして記述したくない場合はどうしたら良いでしょう? いっそのこと、ウインドウからシート選択ができないように画面を操作すれば良いのでしょうか? その方法はどうやって記述すればいいのでしょうか? それとも、シート切り替えのイベントをフォームで感知することができるのでしょうか? 困っています、、どなたか助けてください。 ウィンドウからシート選択ができないようにする方法だけでも結構です。 よろしくお願いします。

  • Excelマクロの配布

    失礼いたします。 ExcelVBA初心者で、環境はExcel 2003です。 現在使用しているスケジュール表ワークシート(マクロあり)に、新マクロを追加したいと考えております。 新マクロの内容は、スケジュール表ワークシートのChangeイベントによって実行されるものです。 自分のスケジュール表の場合、ワークシートのコードにChangeイベントを追加・新マクロの記述をすればよいだけなのですが、 同僚にこの新マクロを配布しなければなりません。 なるべく同僚の手間を減らそうと考え、関係のありそうなアドインについて調べたのですが、 ワークシートのコードを変更せず(Changeイベントを追加せず)に、アドインを呼び出す方法が分かりません。 どなたか、詳しい方教えて頂けないでしょうか? よろしくお願いいたします。

専門家に質問してみよう