Раннее и позднее связывание

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

Имена переменных и объектов должны быть осмысленными и такими, чтобы они быстрее находились в выпадающем по Ctrl+J списке доступных объектов. Рекомендуется следующий подход: все имена должны быть составлены из латинских букв и цифр, причем первый символ – буква, имена элементов управления и других ActiveX объектов должны начинаться с оставшихся заглавных букв типа (то есть вид объекта), затем знака подчеркивания «_», затем – осмысленное название.

Описывая переменную и указывая ее тип, вы, во-первых, ограждаете себя от ошибок, т.к. никогда не получится так, что разным сущностям вы нечаянно дали одинаковые имена. Во-вторых, вы, вообще говоря, экономите память, т.к. не типизированные переменные автоматически приобретают тип Variant, занимая при этом больше места, чем необходимо. Наконец, в-третьих, подсказчик доступных объектов может помогать вам, подсказывая только объекты тех типов, которые могут использоваться в текущем месте. Правда, в среде VBA нет такого ограничения.

Работая с объектами на VBA можно воспользоваться одним из двух возможных способов: механизмом раннего связывания и механизмом позднего связывания. При раннем связывании Вы при описании сразу указываете тип объектной переменной. Результат раннего связывания состоит в том, что далее редактор VBA (если Вы нажмете Ctrl+J) подсказывает Вам свойства и методы этого объекта.

При позднем связывании в описании переменной вы указываете тип Object. При этом вы сообщаете транслятору (компилятору), что это объектная переменная, но ничего конкретного о структуре объекта не сообщаете. Очевидно, что после такого описания редактор не в состоянии подсказать вам свойства и методы этого объекта. Только при выполнении программы Вы можете решить, на какой именно объект будет ссылаться эта объектная переменная, присвоив объектной переменной некоторый объект.

Преимущество позднего связывания состоит в том, что с помощью одной и той же объектной переменной Вы можете обрабатывать объекты разных типов. Впрочем, вам все равно в программе придется разобраться с тем, что это за объект. Несколько более реальный пример преимущества следующий: если вы в программе формируете экземпляр при помощи функции GreateObject, то, вероятно, вы не знаете, объект какого типа вы получите. В этом случае можно сначала описать переменную типа Object, а затем в отладчике выполнить оператор с GreateObject и посмотреть в окне Watch получившийся тип переменной. Затем следует прервать выполнение программы и указать верный тип вместо Object.

Если речь идет о внешних объектах, то для того чтобы редактор «узнал» эти объекты, следует сообщить ему, в какой библиотеке лежит описание и код объекта. То есть необходимо подключить в пункте Tools – References требуемые библиотеки .dll, .ocx и т.п. В частности, если в скрипте к Word-документу вы хотите обратиться к Excel-документу, необходимо в появившемся списке библиотек найти Microsoft Excel 12.0 Object Library. Версия библиотеки у вас может быть другая!

Необходимо заметить, что не существует хорошего способа определить, в какой библиотеке находится нужный объект. Ориентироваться можно только на осмысленность названия. Хотя это не всегда помогает. Например, трудно догадаться, что объект FileSystemObject находится в библиотеке Microsoft Scripting Runtime.

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

Сначала Dim ob as Object, wb as Object Set ob=CreateObject(“Excel.Application”) Set wb=ob.Workbooks.Open(“ras.xsl”) Позже Dim ob as Excel.Application, wb as Excel.Workbook Set ob=CreateObject(“Excel.Application”) Set wb=ob.Workbooks.Open(“ras.xsl”)

Дополнительные элементы управления (ActiveX –объекты)

На форме Вы можете расположить не только базовые элементы управления, но и дополнительные ActiveX объекты. Для этого перейдите в редакторе VBA в форму, после чего в меню Tools Вы обнаружите пункт Additional Controls. Выберите интересующий Вас элемент управления, и он появится на панели инструментов. Как работать с этим элементом управления можно узнать из справочника, обычно поставляемого вместе с включающей его библиотекой. Достаточно много сведений вы можете найти в справочнике MSDN.