Какие действия Excel VBA возможны на скрытых листах или книгах? - PullRequest
8 голосов
/ 21 мая 2009

Скрытые рабочие листы / рабочие книги имеют некоторые ограничения в отношении того, что можно сделать в коде VBA, например, большинство операторов Select и Selection и что-либо из ActiveSheet, но я не могу найти какой-либо список того, что ограничения:

Google, встроенная документация в справочной системе и веб-сайт MSDN все меня подвели. Кто-нибудь может указать мне правильное направление?

Edit: Рабочая книга открывается с

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

и затем скрывается с помощью

WB_Master.Windows(1).Visible = False

Ответы [ 2 ]

14 голосов
/ 21 мая 2009

Из справки Visual Basic для приложений:

Когда объект скрыт, он удаляется с экрана, а его свойство Visible имеет значение False. Элементы управления скрытого объекта недоступны для пользователя, но они доступны программно для запущенного приложения, для других процессов, которые могут обмениваться данными с приложением через автоматизацию, а в Windows - для событий управления таймером.

Боюсь, там не так много помощи, и я не смог найти ничего другого через Google.

Как вы сами сказали, метод Select и свойство Selection не работают на скрытой рабочей таблице, они должны работать на скрытой рабочей книге. (Пожалуйста, исправьте меня, если я ошибаюсь.) В целом, однако, не всегда так эффективно выбирать диапазоны в рабочих листах, лучше работать со свойством Range (которое работает на скрытом рабочем листе).

EDIT:

Следующий код изменит цвет 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
10 голосов
/ 19 июля 2009

Вы можете обойти любые ограничения на скрытые листы, скрывая их, пока пользователь не осознает это, не делает все, что вам нужно, а затем скрывает их снова.

В этом примере предполагается, что 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

Еще один полезный трюк, если вы хотите, чтобы ваши листы были скрыты, - это установить для них значение xlVeryHidden, что предотвратит их перечисление пользователю, если они попытаются отобразить их через меню или ленту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...