Мир объектов Excel 2000

Элемент-невидимка


Вместо того чтобы удалять элементы управления из электронной формы, сделаем их невидимыми. Тогда они становятся недоступными для пользователя и одновременно не отображаются при печати. С другой стороны, в нужный момент их всегда можно включить. Так что одним щелчком форма из интерактивной преобразуется в бумажную и наоборот. Многие элементы интерфейса обладают прекрасным булевым свойством Visible. Чтобы сделать такой элемент невидимым, нужно просто выключить свойство Visible. Заметьте, что сами элементы управления - объекты класса CommandButton, Image или ComboBox таким свойством не обладают. Но при их добавлении в рабочий лист, они становятся элементами коллекции OLEObjects, каждый из элементов которой обладает этим свойством, что неоднократно использовалось в ранее приведенных макросах. Заметьте, что не только элементы коллекции, но и вся коллекция в целом обладает этим свойством. Это позволяет делать видимой или невидимой всю коллекцию одним оператором.

Помимо элементов управления я размещал на документе и некоторые объекты WordArt - линии, рамки, позволяющие улучшить оформление листа. При их добавлении в рабочий лист эти объекты становятся элементами коллекции Shapes. Коллекция Shapes не обладает свойством Visible, но ее элементы таким свойством обладают. Я решил при печати избавиться от всяческого "украшательства", и потому выключил видимость и этих элементов.

Операция выключения видимости объектов, очевидно, обратима. Поэтому на созданной панели инструментальных кнопок расположены две кнопки, позволяющие включать и выключать видимость объектов. Соответственно написаны и два макроса, запускаемые при нажатии этих кнопок. Вот текст макросов OlePlus и OleMinus, включающих и выключающих видимость OLE-объектов и Shape-объектов:

Public Sub OlePlus() 'Эта процедура делает видимой коллекцию OLE - объектов 'Видимой делается и коллекция Shapes

Dim Ob As OLEObjects Set Ob = ThisWorkbook.Worksheets(1).OLEObjects If Ob.Count > 0 Then Ob.Visible = True For Each Shp In ThisWorkbook.Worksheets(1).Shapes Shp.Visible = msoTrue Next Shp End Sub

Public Sub OleMinus() 'Эта процедура делает невидимой коллекцию OLE - объектов 'Невидимой делается и коллекция Shapes Dim Ob As OLEObjects Set Ob = ThisWorkbook.Worksheets(1).OLEObjects If Ob.Count > 0 Then Ob.Visible = False Dim Shp As Shape For Each Shp In ThisWorkbook.Worksheets(1).Shapes Shp.Visible = msoFalse Next Shp End Sub

Макросы OlePlus и OleMinus связываются с соответствующими инструментальными кнопками созданной панели инструментов.



Содержание раздела