Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2 семестр / vba_2002

.pdf
Скачиваний:
97
Добавлен:
09.04.2015
Размер:
9.9 Mб
Скачать

Окончаниетабл.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

 

Окончаниетабл.24.6

Константа

Что определяет

xlGeneralFormatName

Название основного формата числа

xlCurrencyDigits

Количество десятичных цифр, которые отображаются в формате ва-

 

люты

xlCurrencyNegative

xlNoncurrencyDigits xlMonthNameChars

xlWeekdayNameChar s

Значение, которое отображает формат валюты для отрицательных значений

Число десятичных цифр, которое используется в обычных числах

Всегда возвращает три символа для обеспечения обратной совместимости. Аббревиатуры месяцев предоставляются Windows и могут быть любой длины

Всегда возвращает три символа для обеспечения обратной совместимости. Аббревиатуры дней недели предоставляются Windows и могут быль любой длины

xlDateOrder

Целое число, которое отображает порядок элементов в формате даты

xl24HourClock

T r u e , если в системе используется 24-часовая система. F a l s e ,

 

если в системе используется 12-часовая система

xlNonEnglishFunctions

T r u e , если система не отображает функции на английском языке

xlMetric

T r u e , если используется метрическая система. F a l s e , если ис-

 

пользуется английская система измерения

xlCurrencySpaceBefore

T r u e , если перед символом валюты добавляется пробел

xlCurrencyEefore

T r u e , если символ валюты указывается до значения. F a l s e - в

 

противном случае

xlCurrencyMinusSign

T r u e , если для представления отрицательного денежного значения

 

используется знак минус. F a l s e , если для этого используются

 

скобки

xlCurrencyTrailingZeros

T r u e , если в нулевых денежных значениях используются нули, до-

 

бавленные sконце

xlCurrencyLeadingZeros

T r u e , если в нулевых денежных значениях используются нули, до-

 

бавленные вначале

xlMonthLeadingZero

T r u e , если при выводе месяца отображается дополняющий ноль

xlDayLeadingZero

T r u e , если при выводе дня отображается дополняющий ноль

xl4DigitYears

T r u e , если в системе используются четырехзначные годы,

 

F a l s e — и противном случае (двузначные годы)

xlMDY

T r u e , если для отображения даты используется формат месяц-

 

день-год, r a i s e , если ислользуегся формат день-месяц-год

xlTimeLeadingZero

T r u e , если при отображении времени используются дополняющие

 

нули

Параметры настройки даты и времени

Если приложение отображает отформатированные даты, которые будут использоваться в других странах, то необходимо удостовериться, что формат даты знаком пользователю. Наиболее удачным подходом считается указание даты с помощью функции VBA D a t e S e r i a l ,

556

Глава 26. вопросы совместимости

что перекладывает бремя форматирования данных на плечи 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 и более поздних версиях программы.

В следующем разделе рассматриваются все три метода и приводятся примеры использования каждого из них.

Соседние файлы в папке 2 семестр