Druzya.org
Возьмемся за руки, Друзья...
 
 
Наши Друзья

Александр Градский
Мемориальный сайт Дольфи. 
				  Светлой памяти детей,
				  погибших  1 июня 2001 года, 
				  а также всем жертвам теракта возле 
				 Тель-Авивского Дельфинариума посвящается...

 
liveinternet.ru: показано количество просмотров и посетителей

Библиотека :: Компьютеры и Программирование :: Разработка приложений - с помощью Excel 97 и VBA
<<-[Весь Текст]
Страница: из 7
 <<-
 
вызывается подпрограмма, которая строит сводную таблицу.
ШАГ 3. Процедура SetUpHeadings использует объект Selection активной в данный 
момент электронной таблицы, чтобы присвоить названия столбцов. Обратите 
внимание, что метод Offset применяется для смещения вправо при заполнении 
заголовков для второго и третьего столбцов, а также для выделения ячейки в 
первом столбце первого ряда, располагающегося под заголовками.
Довольно обычным контрдоводом против программирования “сверху-вниз” является 
суждение о том, что это мешает поэтапному проведению отладки — приложение можно 
запустить на выполнение только после написания всего кода. Однако такой тезис 
неверен: на самом деле поэтапная отладка легко реализуется с помощью 
использования разнообразных “заглушек” (пустых или реализованных в упрощенном 
варианте процедур).
Например, на данном этапе можно просто превратить в комментарии все операторы в 
CreateVBProjCrossRef, оставив только обращение к SetUpHeadings. Запустите 
программу на выполнение и убедитесь, что заголовки формируются правильно. 
Обратите внимание на то, что пока они записываются в текущую позицию курсора. 
Может быть, вы хотите сделать очистку таблицы и установку курсора в ее начало 
по умолчанию? Пару необходимых для этого строк вы можете написать 
самостоятельно в любой момент — сейчас или позднее.
Напомним также, что при работе в среде VBA при запуске приложения на выполнение 
(Run/F5) управление передается компоненте (в данном случае — процедуре), 
которая в данный момент находится в активном окне среды. Так что перед тем, как 
нажать F5, установите текстовый курсор в окне кода на процедуру 
CreateVBProjCrossRef.
ШАГ 4. Пишем процедуру LoadProjectFile, ключевую для всего проекта — 
формирование исходной таблицы компонентов. Она работает в цикле, обращаясь к 
стандартному диалоговому окну для определения имени существующего файла (рис. 
2). С этой целью используется метод GetOpenFilename объекта Application и 
расширения .MAK и .VBP для идентификации файлов проектов. Если пользователь 
вместо выбора файла (кнопка Open) нажимает Cancel, формирование таблицы 
заканчивается и функция возвращает в вызывающую программу значение True или 
False в зависимости от того, был ли выбран хотя бы один проект или нет.
Тип выбранного файла (MAK или VBP) можно определить по расширению его имени. Но 
мы здесь делаем по-другому: файл проекта открывается и проверяется наличие 
знака равенства в первой строке (см. листинги 1 и 2). Обратите внимание, что в 
случае MAK-файла необходимо установить указатель чтения/записи внутри файла в 
его начало, чтобы учесть первую строку при формировании списка компонентов.

Рис. 2
После этого вызывается соответствующая процедура — LoadMAK или LoadVBP, чтобы 
загрузить информацию из файла проекта в коллекцию Files, а затем поместить эту 
информацию из коллекции Files в электронную таблицу. Обратите внимание, что 
первый цикл For...Next просматривает коллекцию Files, а второй цикл For...Next 
— массив, содержащий детальную информацию для каждого файла.
ШАГ 5. Пишем код процедур LoadMAK, LoadVBP и FilesAdd. Разница между 
процедурами LoadMAK и LoadVBP заключается в том, как идентифицируется тип 
компонента в строках файла описания проекта. В первом случае это делается с 
помощью расширения имени файла, во втором – с помощью ключевого слова в начале 
строки. Обе процедуры используют вспомогательную подпрограмму FilesAdd, в 
которой производится выделение короткого имени файла и записи его описания в 
коллекцию Files.
ВАЖНОЕ ЗАМЕЧАНИЕ. Для выполнения некоторый операций при обработке строк 
символьных файлов MAK и VBP мы использовали созданные ранее процедуры 
ParseString и FileNameTest, которые применялись в различных наших 
VB-приложениях. Они записаны в модулях PARSESUB.BAS и INSTRREV.BAS, 
соответственно. Загрузить их в создаваемое нами приложение в среде Excel/VBA 
можно с помощью команды File|Import File, но при этом следует иметь в виду 
очень важное обстоятельство.
BAS-модуль, загруженный таким образом в Office/VBA (это относится и к Word, и к 
Excel), автоматически теряет логическую связь с соответствующим BAS-файлом, 
хранимым на диске, и становится сугубо внутренним компонентом данного 
приложения. Это одно из существенных отличий логики использования BAS-модулей в 
обычном VB и VBA. Во втором случае (с которым мы имеем дело сейчас, работая в 
Excel 97) изменения, сделанные в BAS-файле, никак не влияют на состояние 
загруженного BAS-модуля и наоборот.
Соответственно, если мы хотим в своих будущих приложениях использовать какие-то 
модули, сформированные в VBA, то мы должны записать их на диск с помощью 
специальной команды File|Export. Таким образом, замена названий команд 
чтения/записи модулей Add/Save на Import/Export на самом деле отражает отличия 
в механизме работы с модулями.
После загрузки модулей PARSESUB.BAS и INSTRREV.BAS мы увидим, что в Excel/VBA 
они получили тривиальные имена Module1 и Module2. Такая замена имен 
представляется правильным шагом, так как — повторим еще раз — это уже другие 
компоненты, не связанные с родительским файлами. В этом плане вариант, 
реализованный в Word 97, когда имени внутреннего модуля присваивается имя 
исходного файла (строго говоря даже не имя файла, а название в первой строке 
файла Attribute VB_Name — если она имеется), представляется не очень правильным,
 так как создает иллюзию однозначного соответствия между этими двумя 
компонентами.
ШАГ 6. Учитывая все это, после загрузки модулей PARSESUB.BAS и INSTRREV.BAS 
 
<<-[Весь Текст]
Страница: из 7
 <<-