Разработка приложений



         

Разработка приложений с помощью Excel 97 и VBA - часть 7


ШАГ 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 — если она имеется), представляется не очень правильным, так как создает иллюзию однозначного соответствия между этими двумя компонентами.




Содержание  Назад  Вперед