- ベストアンサー
アクティブシートとは
excel vbaの初心者です。 アクティブシートについて聞きます。 (1)マクロ実行中、ある時点では、アクティブシートはひとつだけですか、それとも 複数のシートがアクティブになっているということもありますか。 (2)今アクティブなものはどれかデバッグなどで認識することできますか。 (3)処理で次次に別のシートをアクティブにした場合、前のシートはアクティブでならなくなうのでしょうか。 以上宜しくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
(1)ActiveSheetは1つです。 VBAでは、複数あるものはコレクションオブジェクトといって、オブジェクトの集合体を表す1つのオブジェクトとして扱われます。WorkbooksとかWorksheetsとかがそうです。Worksheetsはそのブックのシート全体のコレクションで、単体のシートを指定するにはWorksheets("Sheet1")などと表記します。 ActiveSheetはコレクションオブジェクトでなく、単体のシートを指すので、常に1つだけです。 (2)デバッグ中にActiveSheetを確認したいときは、ステップ実行やブレークポイントで処理を中断させ、「デバッグ」>「ウォッチ式の追加」で「ActiveSheet.Name」を追加すれば、ウォッチウィンドウでシート名を確認することができます。 (3)ActiveSheetは1つなので、別のシートをアクティブにしたら、前のシートはアクティブではありません。
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17070)
ThisWorkbookのSheetActivateイベント Private Sub Workbook_SheetActivate(ByVal Sh As Object) MsgBox Sh.Name End Sub これはブック単位でしか反応しないようだか。 選択はシートタブで2つ以上できて、だから2つあるように見えるが や 「ウインドウー新しいウインドウうを開く」で色々やって見たが 、片方はウインドウ的なコピーで、見た目は2つ有るように見えるが 「アクチブシートは(その時点で)1つ」でよいのではないでしょうか。 Sub test01() ActiveSheet.Cells(1, "A") = "AAA" End Sub 新しいウインドウを開いていたときはコピーなので、両方にセットされるように見えるが、アクチブシートが2つではないでしょう。 普通に使っているときは、この考えで少なくても困りません。 シートを2つ以上指定したりしてやってみたが、シートタブでマウスでクリックしたシートですね。キーボ-ドやマウスで入力できるシート ですね。キーやマウス以外で、VBAでやると VBAでは Sub test02() Worksheets("Sheet1").Activate Worksheets("Sheet3").Range("A3") = "DDDDDDDD" End Sub が可能(アクチブシート以外に値をセットできる)ですから、余りActivateに拘らなくても(むしろ拘らないで明示的に指定したほうが)良いのでは。
お礼
余りActivateに拘らなくても(むしろ拘らないで明示的に指定したほうが)良いのでは。 は特に参考になりました。 更に理解を深めることができました。ご回答どうもありがとうございました。
- ham_kamo
- ベストアンサー率55% (659/1197)
No.1です。 すみません、No.2さんの回答を読んで、ブックを2つ以上開いていた場合のことが抜けていたことに気がつきました。No.1の回答は、「開いているブックが1つのとき」に限定しての解説だとご理解ください。
- siddhaartha
- ベストアンサー率25% (45/175)
(1)ActiveSheetプロパティはApplication/Workbook/Windowオブジェクトのメンバなので Excelを複数起動している場合や複数ワークブックを開いている場合、ウィンドウを 複数開いている場合は、対象のオブジェクトによってActiveSheetの値は異なります。 なので(1)の答えとしては複数のAcvtiveSheetは存在しえます。 (2)可能です。Debug.print などでActiveSheet.nameなどを出すなど方法はあります。 (3)上記(1)で説明したように、上位オブジェクトによってActiveSheetの値は変わるので 条件によっては複数ActiveSheetが存在し得ますが、同一オブジェクト内では ActiveSheetは1つなので、別のシートをアクティブにすれば前回のActiveSheetは アクティブでなくなります。ただし、別のオブジェクトには影響しません。 簡単に説明するならば・・・エクスプローラーを2つ開くとします(窓A、窓B)。 エクスプローラー上で開いているフォルダをアクティブフォルダと考えれば アクティブシートの関係と似たような関係になると思っておいてください。 アクティブフォルダは窓A、Bによってそれそれ存在する。・・・(1) 窓Aでフォルダを移動すれば前のアクティブフォルダはアクティブではなくなる。 しかし、窓Bのアクティブフォルダは変わらない・・・(3)
お礼
事実が明確に認識できたことに感謝します。ご回答どうもありがとうございました。