Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SrrazOffpril_Vecher.rtf
Скачиваний:
9
Добавлен:
18.09.2019
Размер:
1.9 Mб
Скачать

5.3. Работа с элементами управления в документе, листе или на слайде

Элементы управления на базе ActiveX можно добавить не только в нестандартные диалоговые окна, но и в документ, рабочий лист или на слайд. Например, вставив в документ поля, списки, переключатели и другие элементы, документ приобретает вид интерактивной формы. Можно также включать в рабочий лист кнопки для запуска часто используемых макросов и т.д. Основные отличия при работе с элементами управления в документе, листе или на слайде от операций с этими элементами в нестандартных диалоговых окнах заключаются в следующем:

- элементы управления добавляются в документ, рабочий лист или на слайд с помощью панели инструментов Control Toolbox (Элементы управления) меню View (Вид) команды Toolbars (Панели инструментов), а не Toolbox (Панель элементов);

- в случае нестандартного диалогового окна переключение в режим конструктора, в котором работают с элементами управления и в котором они реагируют на события, требует закрытия этого окна и возврата в редактор Visual Basic. При работе с элементами управления в документе или рабочей книге необходимо переключиться в режим выполнения, активизировав кнопку Exit Design Mode (Выход из режима конструктора) на панели инструментов Visual Basic. В PowerPoint переход в режим выполнения осуществляется запуском демонстрации слайдов, а любая операция редактирования вызывает возврат в режим конструктора;

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

Тема 6. Оптимизация кода

Visual Basic – чрезвычайно гибкий язык программирования: одну и ту же задачу в нем можно решить несколькими способами.

6.1. Основные принципы оптимизации кода

Каждое обращение к свойству или методу Visual Basic требует одного или нескольких вызовов через OLE-интерфейс IDispatch. Эти вызовы занимают много времени. Поэтому лучший способ повысить быстродействие макроса – свести к минимуму число обращений к этим методам и свойствам. Поскольку для разделения компонентов в операторах Visual Basic используется точка, то отследить число обращений к методам и свойствам проще всего, просчитав количество точек.

Если необходимо неоднократно получать ссылку на один и тот же объект, то можно присвоить ссылку на него объектной переменной и в дальнейшем использовать именно ее. Тогда нет необходимости в регулярном обращении к аксессору объекта, достаточно вызвать его один раз – при установке переменной. Пример, в котором методы Workbooks и Sheets вызываются каждый по два раза:

Workbooks(1).Sheets(1).Range(“c5”).Value = 10

Workbooks(1).Sheets(1).Range(“d10”).Value = 12

Этот код можно оптимизировать, определив объектную переменную, и тогда методы Workbooks и Sheets будут вызваны только по разу:

Set sheet = Workbooks(1).Sheets(1)

sheet.Range(“c5”).Value = 10

sheet.Range(“d10”).Value = 12

Оператор With позволяет исключить повторные ссылки на объекты без определения явных объектных переменных. Применение With устраняет необходимость в промежуточной переменной, определенной в примере из предыдущего раздела, а в остальном эти фрагменты эквивалентны:

With Workbooks(1).Sheets(1)

.Range(“c5”).Value = 10

.Range(“d10”).Value = 12

End With

Перебор элементов набора в цикле For Each … Next осуществляется быстрее, чем в цикле с индексацией. Данный цикл уменьшает размеры макросов, облегчает чтение и отладку кода; кроме того, во многих случаях он просто удобнее.

Значение переменных считываются быстрее, чем значения свойств. Поэтому, если внутри цикла нужно значение какого-то свойства, следует присвоить это значение переменной до входа в цикл, а в самом цикле использовать уже переменную, а не свойство. Если в цикле используются аксессоры (свойства или методы, обеспечивающие доступ к объекту), желательно вынести их за пределы цикла.

Большинство аксессоров позволяет указать конкретный объект в наборе по имени или по индексу. Доступ к объекту обычно быстрее при использовании индекса. Однако доступ к объектам в наборах по именам имеет свои преимущества. Одно из них в том, что использование имен объектов упрощает код для чтения и отладки. Кроме того, ссылка на объект по имени безопаснее ссылки по индексу, так как числовое значение индекса конкретного объекта может измениться при выполнении программы.

Visual Basic тратит на обработку значений, хранимых в переменных типа Variant, больше времени, чем на обработку значений в переменных с явным типом данных. Любые математические операции, не связанные с дробными числами, выполняются значительно быстрее при использовании вместо Variant переменных типа Integer или Long. Эти же переменные предпочтительны и в качестве счетчиков в циклах For … Next.

Разрешение ссылок на объекты, их методы и свойства происходит на этапе компиляции макроса или в период его выполнения. Ссылки, разрешенные при компиляции, действуют быстрее, чем ссылки, разрешаемые при выполнении макроса. При объявлении переменных и аргументов, следует указывать конкретные объектные типы, в этом случае Visual Basic разрешает ссылки на свойства и методы соответствующих объектов еще при компиляции макроса. Кроме того, необходимо полностью квалифицировать ссылки на объекты. Это устраняет неопределенность и гарантирует, что переменная получит ожидаемый тип. Полная ссылка на объект включает имя его библиотеки. Если переменные и аргументы объявляются общим типом Object, Visual Basic откладывает разрешение ссылок на свойства и методы до того момента, когда встретит их вызов при выполнении макроса. В итоге производительность значительно падает.

Применение констант в программе увеличивает скорость ее работы. Константы вычисляются лишь раз и сохраняются в программе при компиляции кода. Переменные же могут изменяться, поэтому Visual Basic должен получать текущее значение переменной при каждом выполнении макроса. Помимо всего прочего, константы упрощают чтение и модификацию кода.

Макрос, модифицирующий внешний вид документа, работает быстрее при отключенном обновлении экрана. Обновление экрана можно оставить включенным на время отладки макроса. Чтобы отключить обновление экрана, необходимо установить свойство ScreenUpdating как False:

Application.ScreenUpdating = False

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]