Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсовая / Источники / excel_2010_professionalnoe_programmirovanie_na_vba_RuLit_Me_412629.pdf
Скачиваний:
4
Добавлен:
27.09.2025
Размер:
22.97 Mб
Скачать

774 Часть VII. Дополнительные темы

И еще один пример. В Excel 2010 и Excel 2007 применяется идентичный файловый фор­ мат. Но если ваше приложение использует свойства, которые появились в Excel 2010, вы не вправе ожидать, что пользователи Excel 2007 магическим образом получат доступ к этим новым свойствам.

Итак, Excel постоянно изменяется, совершенствуется и обновляется, поэтому не су­ ществует способа обеспечить полную совместимость создаваемых приложений. К сожа­ лению, автоматически обеспечить совместимость приложения с различными версиями невозможно. В большинстве случаев необходимо выполнить достаточно большой объем дополнительной работы, чтобы достигнуть приемлемого уровня совместимости.

Проблемы совместимости

Следует помнить о нескольких типах проблем совместимости.

Несовместимость форматов файлов. Рабочие книги могут сохраняться в различ­ ных файловых форматах Excel. Более ранние версии Excel не могут открывать рабо­ чие книги, сохраненные с применением более позднего файлового формата. Допол­ нительные сведения о работе с файлами Excel 2010 (и Excel 2007) в более ранних версиях Excel можно найти во врезке “Microsoft Office Compatibility Pack”.

Несовместимость новых средств. Очевидно, что новые возможности, которые появились в поздних версиях Excel, не могут использоваться в старых версиях этой программы.

Проблемы, связанные с компанией Microsoft. Компания Microsoft иногда сама вызывает проблемы несовместимости. Например, как отмечалось в главе 23, но­ мера индексов для контекстных меню несовместимы в различных версиях Excel.

Совместимость Windows и Macintosh. Если приложение должно работать под управлением обеих платформ, то придется потратить намного больше времени для решения всех проблем совместимости.

Проблемы, связанные с разрядностью. Программа Excel 2010— это первая версия Excel, которая доступна в виде 32- и 64-разрядной версий. Если код VBA использует API-функции, следует знать о некоторых потенциальных проблемах, возникающих в случае выполнения кода в 32- и 64-разрядной версии Excel либо одновременно в двух версиях Excel.

• Вопросы языковой совместимости. Если приложение будет использоваться в иноязычных версиях Excel, то обратите внимание на целый ряд дополнительных вопросов языковой совместимости.

После изучения этой главы вам должно стать ясно, что существует один гарантиро­ ванный способ достижения совместимости: приложение необходимо протестировать на всех целевых платформах, а также во всех интересующих версиях Excel. Зачастую это просто невозможно. Однако существуют некоторые способы, которые помогают разра­ ботчику частично гарантировать работу приложения в различных версиях Excel.

П р и м еч ан и е

В этой главе вы не найдете списка всех проблем несовместимости различ­ ных версий Excel — подобного списка просто не существует, а создать его практически невозможно.

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

775

С о в е т

Хорошим источником информации о потенциальных проблемах совмести­ мости является интерактивная база знаний Microsoft, которая находится по адресу h ttp ://s u p p o r t . m ic r o s o ft.c o m . Эта база позволит идентифици­ ровать проблему, которая возникает в определенной версии Excel.

Избегайте использования новых возможностей

Если приложение должно работать в нескольких версиях Excel (Excel 2010 и более ранних), то следует избегать использования новых возможностей, добавленных после выхода самой ранней версии Excel, которую необходимо поддерживать. Еще одной аль­ тернативой является выборочное использование новых возможностей. Другими словами, приложение должно определить, какая версия Excel применяется, и на основании этого принимать решение об использовании нового средства.

Разрабатывая приложения с помощью VBA, не следует использовать объекты, мето­ ды и свойства, которые не доступны в более ранних версиях. Самым безопасным подхо­ дом является разработка приложения на основе “наибольшего общего знаменателя”. Чтобы обеспечить совместимость с Excel 2000 и более поздними версиями, необходимо для разработки приложения использовать Excel 2000, после чего продукт должен быть всесторонне протестирован в остальных средах.

M icrosoft O ffice Com patibility P ack

Если вы планируете разрабатывать приложения в среде Excel 2010, используя также более ранние версии этой программы, можете поступить двояко:

сохранить файлы в старом файловом формате XLS;

передать всем пользователям, просматривающим ваши файлы, пакет Microsoft Office Compatibility Pack.

Программу Microsoft Office Compatibility Pack можно загрузить с веб-сайта Microsoft по адресу w w w .m icro so ft.co m . После установки этой программы пользователи паке­ тов Office ХР и Office 2003 могут открывать, редактировать и сохранять документы, ра­ бочие книги и презентации в новых файловых форматах для Word, Excel и PowerPoint.

Обратите внимание: пакет Microsoft Office Compatibility Pack не добавляет в прежние версии Excel новые свойства, присущие Excel 2007 либо Excel 2010. Она просто позво­ ляет открывать и сохранять файлы в новом формате.

Еще в версии Excel 2007 появилось новое средство проверки совместимости, которое получило дальнейшее развитие в версии Excel 2010 (рис. 26.1). Для запуска этой про­ граммы выберите команду Файл «^Сведения^ Поиск проблем^Проверка совмести­ мости (File^Info^Check For Issues^Check Compatibility). Благодаря этой программе идентифицируются все возможные проблемы совместимости, возникающие при откры­ тии файла в более ранних версиях Excel.

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

777

П ри м ечан и е

 

Далее предполагается, что вы используете устаревшие версии Excel для

Macintosh, которые поддерживают VBA.

 

Можно создать код VBA, который будет определять, на какой платформе работает приложение. Следующая функция получает доступ к свойству O p eratin g S y stem объ­

екта A p p lic a tio n

и возвращает значение True, если используется одна из версий

Windows (т.е. если возвращаемая строка содержит значение “Win”).

F u n c tio n W indowsOSO As B o o le a n

I f

A p p lic a t io n . O p e ra tin g S y s te m l i k e "* W in *" Then

 

WindowsOS

= T ru e

E ls e

 

 

WindowsOS

= F a ls e

End

I f

 

End F u n c tio n

 

Между Windows- и Мас-версией Excel существует ряд отличий. Некоторые из них можно считать “косметическими” (например, по умолчанию используются разные сис­ темные шрифты). Но существуют и более серьезные проблемы. Например, в состав Excel для Macintosh не входят компоненты ActiveX. Кроме того, Excel для Macintosh использу­ ет систему дат “1904”, поэтому рабочие книги, в которых применяется система дат по умолчанию, могут опережать время на 4 года. Excel для Windows по умолчанию исполь­ зует систему дат “1900”. Это означает, что в Macintosh дата 1 будет означать 1 января 1904 года. В то же время в Windows такая дата будет означать 1 января 1900 года.

Еще одно ограничение касается вызова функций Windows API — в Excel для Macintosh они не работают. Если приложение полностью зависит от таких функций, то вам придется разрабатывать дополнительные способы выполнения заданий, возложенных на приложение.

Если код работает с именами файлов, значит, необходимо указать путь с использо­ ванием подходящего разделителя (двоеточие в Macintosh и обратная косая черта в Windows). Правильнее всего динамически определить подходящий разделитель в пути с помощью кода VBA. Представленный ниже оператор назначает символ разделителя пути переменной PathSep.

PathSep = A p p lic a t io n . P a th S e p a ra to r

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

Вместо того чтобы создавать один файл, совместимый с обеими платформами, мно­ гие разработчики принимают решение о сохранении двух версий приложения для каж­ дой платформы. Сначала создается приложение для одной платформы (обычно это Excel для Windows), после чего оно модифицируется для работы на другой платформе. Други­ ми словами, вам придется отлаживать две различные версии приложения.

Существует только один способ обеспечения совместимости приложения с Excel для Macintosh: приложение должно быть всесторонне протестировано на этой платформе. Будьте готовы к разработке обходных путей, которые заменят отсутствующие или нера­ ботающие возможности.

Использование 64-разрядной версии Excel

При установке Excel 2010 можно выбрать 32либо 64-разрядную версию приложе­ ния. Последняя версия может устанавливаться и работать только на 64-разрядной версии

778

Часть VII. Дополнительные темы

Windows. В 64-разрядной версии Excel могут обрабатываться огромные рабочие книги, поскольку в этом случае задействуется потенциал пространства адресов 64-разрядной версии Windows.

Большинство пользователей не нуждаются в 64-разрядной версии Excel, поскольку они не нуждаются в обработке больших объемов данных в рабочих книгах. К тому же 64-разрядная версия Excel не обеспечивает прироста производительности. Более того, некоторые операции в 64-рязрядной версии Excel выполняются даже медленнее, чем в 32-разрядной версии.

Как правило, рабочие книги, созданные в 32-разрядной версии Excel, могут откры­ ваться и обрабатываться в 64-разрядной версии Excel. Единственная проблема может возникать в тех случаях, если рабочая книга включает код VBA, использующий функции Windows API. Причина возникновения этой проблемы заключается в том, что объявле­ ния 32-разрядных API-функций не могут компилироваться в 64-разрядной версии Excel.

Например, следующее объявление хорошо работает в 32-разрядных версиях Excel, но в случае его выполнения в 64-разрядной версии Excel 2010 возникает ошибка компиляции.

D e c la re F u n c tio n G e tW in d o w s D ire c to ry A L ib

" k e rn e l3

2 "

_

(B yV al lp B u f f e r As S t r in g , B yV al n S iz e

As Long)

As

Long

Следующее объявление может использоваться в Excel 2010 (как в 32-, так и в 64-разрядной), но в случае использования в предыдущих версиях Excel приводит к появ­ лению ошибки компиляции.

D e c la re P trS a fe F u n c tio n G e tW in d o w s D ire c to ry A

L ib

" k e rn e l3 2 " _

(B yV al lp B u f f e r As S t r in g , B yV al n S iz e As

Long)

As Long

Для использования этой API-функции в 32- и 64-разрядной версиях Excel следует объявить две ее версии с помощью следующих условных директив компилятора.

• Директива VBA7 возвращает значение T ru e , если код использует VBA версии 7 (эта версия включена в состав Office 2010).

Директива Win64 возвращает значение T ru e , если код выполняется под управле­ нием 64-разрядной версии Excel.

П р и м еч ан и е

В операционной системе можно установить одну версию VBA. Поэтому, ес­ ли наравне с устаревшими версиями Excel устанавливается Excel 2010, а за­ тем активизировать приложение VB Editor в одной из устаревших версий Excel и выполнить команду Help^About Microsoft Visual Basic (Справкам О программе Microsoft Visual Basic), появится диалоговое окно с сообщени­ ем об отсутствии поддержки VBA 7.

Ниже приводится пример использования этих директив для объявления API-функций, совместимых с 32- и 64-разрядной версиями Excel.

# I f VBA7 And Win64

Then

 

 

 

 

 

 

D e c la re

P trS a fe

F u n c tio n G e tW in d o w s D ire c to ry A

L ib

Mk e rn e l3 2 "

_

(B yV al lp B u f f e r As S t r in g , B yV al n S iz e

As

Long)

As

Long

 

# E lse

 

 

 

 

 

 

 

 

D e c la re

F u n c tio n

G e tW in d o w s D ire c to ry A

L ib

" k e rn e l3

2 "

_

^

(B yV al

lp B u f f e r

As S t r in g , B yV al n S iz e

As

Long) As

Long

 

#End I f

 

 

 

 

 

 

 

 

Первый оператор D e c la re применяется только в том случае, если обе директивы (VBA7 и W ind64) возвращают значение T r u e — это наблюдается только в случае ис­