web-dev-qa-db-ja.com

非表示のワークシートまたはブックで可能なExcelVBAアクションは何ですか?

非表示のワークシート/ワークブックには、ほとんどのSelectステートメントやSelectionステートメント、ActiveSheetからのステートメントなど、VBAコードで実行できる操作にいくつかの制限がありますが、私にはわかりません。制限が何であるかのリストを見つけるために。

Google、ヘルプシステムに組み込まれているドキュメント、MSDNのWebサイトはすべて失敗しました。誰かが私を正しい方向に向けることができますか?

編集:ワークブックはで開かれます

Set WB_Master = Workbooks.Open(Filename:=PATH_Master, ReadOnly:=False)

そして隠された

WB_Master.Windows(1).Visible = False
8

Visual Basic for Applicationsのヘルプから:

オブジェクトが非表示になると、そのオブジェクトは画面から削除され、そのVisibleプロパティはFalseに設定されます。非表示のオブジェクトのコントロールにはユーザーはアクセスできませんが、実行中のアプリケーション、オートメーションを介してアプリケーションと通信している可能性のある他のプロセス、およびWindowsではタイマーコントロールイベントにプログラムでアクセスできます。

私は恐れていますが、そこにはあまり助けがなく、Googleを通して他に多くを見つけることができませんでした。

あなた自身が言ったように、SelectメソッドとSelectionプロパティは非表示のワークシートでは機能しませんが、非表示のワークブックでは機能するはずです。 (間違っている場合は訂正してください。)ただし、一般に、ワークシートで範囲を選択するのが必ずしも効率的であるとは限りません。Rangeプロパティ(非表示のワークシートで機能します)を使用することをお勧めします。

編集:

次のコードは、ワークシートが表示されていない場合でも、A1:A8の色をシアンに変更します。

Dim book2 As Workbook
Set book2 = Workbooks.Open("C:\Book2.xls")

book2.Worksheets("Sheet1").Visible = False
book2.Windows(1).Visible = False

With book2.Worksheets("Sheet1").Range("A1:E8").Interior
    .ColorIndex = 8
    .Pattern = xlSolid
    .PatternColorIndex = xlAutomatic
End With

book2.Windows(1).Visible = True
book2.Worksheets("Sheet1").Visible = True
14

非表示のシートの制限は、ユーザーが気付かないうちに非表示を解除し、必要な操作を行ってから、再度非表示にすることで回避できます。

この例では、Sheet2が非表示になっていることを前提としています。

Sub DoStuffToAHiddenSheetWithoutTheUserKnowingIt()
    'turns off screen repainting so the user can't see what you're doing
    'incidentally, this dramatically speeds up processing of your code
    Application.ScreenUpdating = False
    'note that if you're stepping through your code, screenupdating will be true anyway

    'unhide the sheet you want to work with
    Sheets("sheet2").Visible = True
        'do whatever you want here, including selecting cells if you want
        'Scagnelli is right though, only select cells if you have to

    'when you're finished, hide the sheet again
    Sheets("sheet2").Visible = False

    'make sure you turn screenupdating back on, or Excel will be useless
    Application.ScreenUpdating = True
End Sub

シートを非表示にする場合のもう1つの便利なトリックは、シートをxlVeryHiddenに設定することです。これにより、ユーザーがメニューまたはリボンからシートを再表示しようとした場合に、シートが表示されなくなります。

10
Jon Crowell