
2 семестр / vba_2002
.pdfОкончаниетабл.26.1
Версии Excel |
Константы |
Значения |
|
|
|
|
|
Excel в формате HTML |
xlHtml |
44 |
|
Надстройка Excel |
xlAddln |
18 |
|
Excel 97/2000/2002 |
xlWorkbookNormal |
-4143 |
|
|
|
|
|
Избегайте использования новых возможностей
Если приложение должно работать в нескольких версиях Excel (Excel 2002 и более ранних), то следует избегать использования новых возможностей, добавленных после выхода самой ранней версии Excel, которую необходимо поддерживать. Еще одной альтернативой является выборочное использование новых возможностей. Другими словами, приложение должно определить, какая версия Excel применяется, и на основании этого принимать решение об использовании нового средства.
Разрабатывая приложения с помощью VBA, не следует использовать объекты, методы и свойства, которые не доступны в более ранних версиях. Самым безопасным подходом является разработка приложения на основе "наибольшего общего знаменателя". Чтобы обеспечить совместимость с Excel 2000, Excel 97 и Excel 95 необходимо для разработки приложения использовать Excel 95, после чего продукт должен быть всесторонне протестирован в остальных средах.
Если приложение будет использоваться в Excel 95, то диалоговые окна UserForm в него добавлять нельзя. Пользовательские диалоговые окна появились только в Excel 97. Вместо них вам придется работать с диалоговыми листами.
Определение версии Excel
Свойство version объекта Application определяет номер версии Excel. Возвращаемое I значение является строкой, поэтому часто требуется преобразовать его в число. Функция VBA val как нельзя лучше подходит для выполнения этой задачи. Следующая функция возвращает значение True, если пользователь запускает приложение в Excel 2002 или более
поздней версии {Excel 2002 соответствует версии 10).
Function XLlOOrLater{)
XLlOOrLater = Val(Application.Version) >= 10 End Function
Приложения, которые используют функции Windows API
Excel 95 и более поздние версии программы имеют 32-битную архитектуру. Excel 5 является 16-биткой программой. Количество бит определяет операционную систему, под управлением которой может работать данная версия Excel. 16-битная версия Excel работает как под управлением 16-битной системы Windows 3.x, так и под управлением 32-битных версий Windows. 32-битные версии Excel могут работать только под управлением 32битных версий Windows.
Данный факт довольно важен, когда код VBA вызывает функции Windows API, потому что 32-битные функции Windows API объявляются не так, как 16-битные. В результате приложение
Часть Ш Другие темы |
649 |
для Excel 5, которое использует 16-битные функции API, не будет работать под управлением Excel 95 или более поздних версий. Точно так приложение для Excel 95 и более поздних версий, которое использует 32-битные функции Windows API, не будет работать с Excel 5.
Для совместимости Excel 5 с более поздними версиями программы необходимо в модуле объявлять как 16-битные, так и 32-бнтные версии функций API. Далее в коде необходимо определить версию Excel, под управлением которой работает приложение, чтобы вызвать правильные версии функций.
Ниже приведен пример процедуры, которая использует функции API. Эта процедура работает и под управлением Excel 5, и под управлением более поздних версий. Оператор D e c l a r e в этом примере используется следующим образом:
Объявление 32-битной функции API
Declare Function GetSystemMetrics32 Lib "user32" _ Alias "GetSystemMetrics" (ByVal nlndex As Long) As Long
Объявление 1б-битной функции API
Declare Function GetSystemMeCricsl6 Lib "user" _
Alias "GetSystemMetrics" {ByVal nlndex As Integer) _
As Integer
В данном случае объявлены 32-битная и 16-битная версии функций API. Обратите внимание на использование ключевого слова A l i a s . Оно предваряет фактическое имя функции, которое используется в Windows API (в обоих случаях одинаковое). Эти функции объявлены с разными названиями, чтобы облегчить их дальнейшее использование.
Процедура D i s p l a y V i d e o I n f o , которая приведена ниже, отображает информацию о разрешении экрана монитора пользователя.
Sub DisplayVideoInfо{) Const SM_CXSCREEN = О Const SM_CYSCREEN = 1
If Val(Application.Version) > 5 Then
'32-битная Excel
vidWidth = GetSystemMetrics32iSM_CXSCREEN) vidHeight = GetSystemMetrics32(SM_CYSCREEN)
Else
'16-битная Excel
vidWidth = GetSystemMetric:sl6(SM_CXSCREEN) vidHeight = GetSystemMetricsl6(SM^CYSCREEN)
End If
Msg = "The current video mode i s : "
Msg = Msg & vidWidth & " X " i< vidHeight
MsgBox Msg
End Sub
В данном случае для определения битности версии Excel используется выражение Val (Application. Versioi}) > 5.
Поддержка платформы Mac
Чаще всего проблемы совместимости касаются компьютеров Macintosh. По причине того, что Excel для Macintosh составляет небольшую часть рынка Excel, многие разработчики просто игнорируют эту платформу. Microsoft обеспечила совместимость файлов Excel между
650 |
Глава 26. Вопросы совместимости |
двумя платформами. Однако в разных платформах поддерживается неодинаковый набор возможностей, а совместимость макросов VBA далека от идеальной.
Можно создать код VBA, который будет определять, на какой платформе работает приложение. Следующая функция получает доступ к свойству OperatingSystem объеета Application и возвращает значение True, если используется одна нз версий Windows (т.е. если возвращаемая строка содержит значение "Win").
Function WindowsOS() As Boolean
If Application.OperatingSystem like "*win*u Then WindowsOS = True
Else
WindowsOS = False End If
End Function
Между Windows-версией и Mac-версией Excel существует ряд различий. Некоторые из них можно считать "косметическими" (например, по умолчанию используются разные системные шрифты). Но существуют и более серьезные проблемы. Например, в состав Excel для Macintosh не входят компоненты ActiveX. Кроме того. Excel для Macintosh использует систему дат "1904", поэтому рабочие книги, в которых применяется система дат по умолчанию, могут опережать время на 4 года. Excel для Windows по умолчанию использует систему дат "1900". Это означает, что в Macintosh дата 1 будет означать 1 января 1904 года. В то же время в Windows такая дата будет означать I января 1900 года.
Еще одно ограничение касается вызовов функций Windows API. В Excel для Macintosh они просто не работают. Если приложение полностью зависит от таких функций, то вам придется разрабатывать дополнительные способы выполнения заданий, возложенных на приложение.
Если код работает с именами файлов, значит, необходимо указать путь с использованием подходящего разделителя (двоеточие в Macintosh и обратная косая черта для Windows). Наиболее правильно динамически определить подходящий разделитель в пути с помощью кода VBA. Представленный ниже оператор назначает символ разделителя пуги переменной PathSep.
PathSep = A p p l i c a t i o n . P a t h S e p a r a t o r
После выполнения этого оператора код может использовать переменную PathSep для замещения строго определенного разделителя.
Вместо того, чтобы создавать один файл, совместимый с обеими платформами, многие разработчики принимают решение о сохранении двух версий приложения для каждой из платформ. Сначала создается приложение для одной из платформ (обычно это Excel для Windows), после чего оно модифицируется для работы на другой платформе. Другими словами, вам придется отлаживать две различные версии приложения.
Существует только один способ обеспечения совместимости приложения с Excel для Macintosh: приложение должно быть всесторонне протестировано на этой платформе. Будьте готовы к разработке обходных путей, которые заменят отсутствующие или неработающие возможности.
Создание интернациональных приложений
Последний вопрос совместимости касается языковых и интернациональных настроек. Excel поставляется в различных языковых версиях. Следующий оператор выводит значение кода страны текущей версии Excel:
MsgBox Application.International(xlCountryCode)
Версия United States/English имеет код 1. Остальные коды стран перечислены в табл. 26.2.
Часть VII. Другие темы |
6S1 |
: Таблица 26.2. Коды стран Excel
Язык |
. |
|
Код страны |
|
|
|
|
Английский |
|
1 |
|
Русский |
|
7 |
|
Греческий |
|
30 |
|
Голландский |
|
31 |
|
Французский |
|
33 |
|
Испанский |
|
34 |
|
Венгерский |
|
36 |
|
Итальянский |
|
39 |
|
Чешский |
|
42 |
|
Датский |
|
45 |
|
Шведский |
|
46 |
|
Норвежский |
|
47 |
|
Польский |
|
48 |
|
Немецкий |
|
49 |
|
Португальский |
(Бразилия) |
55 |
|
Тайский |
|
68 |
|
Японский |
|
81 |
|
Корейский |
|
82 |
|
Вьетнамский |
|
84 |
|
Упрощенный китайский |
86 |
|
|
Турецкий |
|
90 |
|
Индийский |
|
91 |
|
УРДУ |
|
92 |
|
Португальский |
|
351 |
|
Финский |
|
358 |
|
Традиционный |
китайский |
866 |
|
Арабский |
|
966 |
|
Иврит |
|
972 |
|
Фарси |
|
982 |
|
Еслн вы знаете, на каком языке общаются люди, которые будут использовать приложение, удостоверьтесь, что в диалоговых окнах используются сообщения на соответствующем языке. Кроме того, необходимо определить правильные разделители десятичных дробей и тысячных разрядов, применяемых в стране пользователя. В Соединенных Штатах для этого практически всегда используются точка и запятая. Но пользователи других стран могут обращаться к другим разделителям. Помните также о различиях в форматах представления даты и времени. Соединенные Штаты входят в число стран, которые используют формат даты месяц/число/год.
652 |
Глава 26. Вопросы совместимости |

Если разрабатывается приложение, которое будет применяться только пользователями одной компании, то о вопросах интернациональной совместимости можно не задумываться. Но если компания имеет офисы по всему миру или планируется распространение приложения за пределы страны, то стоит обратить внимание на ряд вопросов, что позволит обеспечить правильную работу приложения. Эти вопросы рассматриваются в данном разделе.
Многоязыковые приложения
Весьма очевидным моментом является язык общения с пользователем, который будет использоваться в приложении, Например, если приложение отображает одно или несколько диалоговых окон, то может возникнуть необходимость в отображении текста на языке пользователя. К счастью, это несложно (если, конечно, вы владеете соответствующим языком).
На Web-узле издательства содержится мастер диалоговых окон, который поддерживает три языка: английский, испанский и немецкий. Этот мастер основан на примере диалогового окна, который рассматривался в главе 14.
Первый этап работы мастера заключается в отображении элемента управления OptionButton, позволяющего пользователю указать язык общения. Текст на трех языках хранится на рабочем листе.
На рис. 26.1-26.3 показаны диалоговые окна UserForm, которые отображают текст на трех языках.
Puc. 26. i. Демонстрация работы мает |
Рис. 26.2. Демонстрация работы масте- |
ра на английском языке |
ра на испанском языке |
Рис. 26.3. Демонстрация работы .мастера нанемецкомязыке
Часть VII. Другие темы |
653 |
Язык в VBA
Как правило, задумываться о языке при создании кода VBA не стоит. Excel использует две библиотеки объектов: Excel Object library и VBA Object library. При установке Excel регистрируется соответствующая версия этих библиотек. Данные версии применяются по умолчанию Сони не зависят от языковой версии Excel).
Использование "локальных" свойств
Если код будет отображать информацию рабочего листа, например, диапазон адресов, то, скорее всего, необходимо использовать язык общения с пользователем. Например, следующий оператор отображает адрес выделенного диапазона:
MsgBox S e l e c t i o n . A d d r e s s
Для интернациональных приложении наиболее удачным подходом будет использование
свойства |
A d d r e s s L o c a l вместо свойства Address: |
MsgBox |
S e l e c t i o n . A d d r e s s L o c a l |
Рекомендуется обеспечить соответствие стилей ссылок и стиля, выбранного пользователем (А1 или R1C1). Этого можно достичь с помощью следующего оператора.
MsgBox Selection.AddressLocal _ (ReferenceStyle:=Application.ReferenceStyle)
"Локальные" версии свойств предоставляют еще несколько возможностей. Эти свойства показаны в табл. 26.3 (дополнительна информацию можно получить, обратившись к справочному руководству).
Таблица 26.3. "Локальные" версии свойств |
|
|
Свойство |
"Локальная" версия |
Что возвращает |
Address |
AddressLocal |
Адрес |
Category |
CategoryLocal |
Категорию функции |
Formula |
FormulaLocal |
Формулу |
Name |
NameLocal |
Имя |
NumberFormat |
NumberFormatLocal |
Формат ЧИСЛЭ |
Refer эТа |
RefersToLocal |
Ссылку |
Идентификация настроек системы
Очень редко случается так, что система конечного пользователя настроена так же, как н система, в которой происходила разработка приложения. Для интернациональных приложений необходимо получить информацию о следующих параметрах настройки системы.
•Разделитель десятичных знаков — символ, который используется для отделения десятичной части значения.
•Разделитель тысяч — символ, который используется для разделения триад цифр.
•Разделитель списка — символ, который используется для разделения элементов списка.
654 |
Глава 26. Вопросы совместимости |
Текущее значение параметра настройки можно получить с помощью свойства Interna - tiona l объекта Application. Например, следующий оператор отображает разделитель десятичных знаков, который не всегда является запятой:
MsgBox Application,International(xlDecimalSeparatorl
Существует 45 интернациональных параметров настройки, доступ к которым можно получить с помощью свойства International . Эти параметры перечислены в табл. 26-4.
• Таблица24.6. Константы свойстваInternational
Константа |
Что определяет |
xlCountryCode |
Языковую версию Microsoft Excel |
xlCountrySetting |
Текущие установки страны в папке Панель управления |
xlDecimalSeparator |
Разделитель десятичной части |
xlThousandsSeparator |
Разделитель нулей или триад цифр |
xlListSeparator |
Разделитель списка |
xlUpperCaseRowLetter |
Символ сроки в верхнем регистре (для ссылок в стиле R I C I J |
xlUpperCaseColumnLetter |
Символ столбца в верхнем регистре |
xlLowerCaseRowLetter |
Символ строки в нижнем регистре |
xlLowerCaseColvamLetter |
Символ столбца в нижнем регистре |
xlLeftBracket |
Символ, который используется вместо открывающей квадратной |
|
скобки ([) в относительных ссылках стиля R l c i |
xlRightBracKet |
Символ, который используется вместо закрывающей квадратной |
|
скобки {}) в относительных ссылках стиля R1C1 |
xl LeftBrace |
Символ, который используется вместо открывающей фигурной |
|
скобки ({) в массивах символов |
xlRightBrace |
Символ, который используется вместо закрывающей фигурной |
|
скобки {}) в массивах символов |
xlColumnSeparator |
Символ, который используется для разделения столбцов в массивах |
|
символов |
xlRowSeparator |
Символ, который используется для разделения строк в массивах |
|
символов |
xlAlternaceArraySeparator Символ, который используется в качестве альтернативного разделителя массивов, если текущий разделитель применен в качестве разделителя десятичной части
xlDateSeparator |
Разделитель даты {/] |
xlт imeSepar ator |
Разделитель времени (:) |
xlYearcode |
Символ года в формате числа (у) |
xlMonthCode |
Символ месяца (т) |
xlDayCode |
Символ числа (d) |
xlHourCode |
Символ часа (л) |
xlMinuteCode |
Символ минуты (т) |
xlSecondCode |
Символ секунды (s) |
xlCurrencyCode |
Символ валюты |
Часть W/. Другие темы |
651 |
что перекладывает бремя форматирования данных на плечи Excel (при этом использован краткий формат даты).
Следующая процедура использует функцию D a t e S e r i a l для присвоения даты переменной S t a r t D a t e . Дата заносится в ячейку А1 в локальном кратком формате.
Sub WriteDateO
Dim StartDate As Date
StartDate = DateSerial(2001, 2, 15) Range("Al") = StartDate
End Sub
Если необходимо дополнительно изменить формат даты, то можно создать код, который будет выполнять эту задачу после записи даты в ячейку. Ехсе! предоставляет несколько именованных форматов даты и времени, а также несколько именованных форматов представления чисел. Все они рассматриваются в справочном руководстве.
Резюме
Вэтой главе были изложены общие вопросы, на которые необходимо обратить внимание, если приложение будет работать в более ранних версиях Excel, в Excel для Macintosh, а также
вдругих языковых версиях Excel.
Вследующей главе рассмотрены отдельные методы, позволяющие считывать и записывать текстовые файлы с помощью функций VBA.
Часть W/. Другие темы |
657 |

Управление файлами с помощью VBA
Некоторые приложения Excel работают с несколькими файлами. Например, у вас может возникнуть необходимость в получении списка файлов, которые находятся в определенной папке, может понадобиться удалить или переименовать файлы и т.д. Конечно, Excel импортирует и экспортирует файлы в нескольких текстовых форматах, но часто требуется выполнить такие действия, с которыми встроенные инструменты Excel справиться не могут. Например, у вас возникает необходимость в импортировании более 256 столбцов данных. Или файл содержит другой разделитель данных, например, обратную косую черту. В настоящей главе описываются средства VBA, предназначенные для выполнения распространенных операций над любыми файлами, а также для
непосредственного управления текстовыми файлами.
Часто выполняемые операции
Excel предоставляет ряд возможностей по выполнению распространенных операций над файлами.
•Можно использовать "традиционные" операторы и функции VBA. Этот метод работает во всех версиях Excel.
•Можно применить объект F i l e S e a r c h , с которым работать намного проще, Он предоставляет несколько дополнительных возможностей. Этот метод используется в Excel 97 и более поздних версиях программы.
• Можно |
обратиться |
к помощи |
объекта F i l e S y s t e m - |
O b j e c t , |
который |
задействует |
библиотеку сценариев |
Microsoft. Этот метод поддерживается в Excel 2000 и более поздних версиях программы.
В следующем разделе рассматриваются все три метода и приводятся примеры использования каждого из них.
•