Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Версия MS office RUS или ENG, узнать через VBA 
:(
    Опции темы
LeRatO
Дата 15.10.2007, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 13.8.2007

Репутация: нет
Всего: нет



Подскажите, пожалуйста, можно ли узнать не версию MS Office, а язык пакета - RUS или ENG.

Это жизненно важно, потому как делаю перенос данных в MS Excel, очень активно испольузю формулы, но название excel'евских отличается в RUS и ENG версиях. Если знать язык пакета, можно еще как-то покрутиться... 

Кто нибудь решал такую проблему? 
PM MAIL   Вверх
Akina
Дата 15.10.2007, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



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


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
LeRatO
Дата 15.10.2007, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 13.8.2007

Репутация: нет
Всего: нет



Цитата(Akina @  15.10.2007,  21:29 Найти цитируемый пост)
В формуле хранится не имя использованной функции, а ее номер. Перенос файлов между разноязыкими версиями абсолютно прозрачен. 


Если я Вас правильно поняла, то надо чем-то заменять присвоения типа:
Код

xlBook.ActiveSheet.cells(1, 1).formulalocal = "=сумм(1;1)"


Чем??? И как пользователю задавать формулу - кодами не удобно, ненаглядно...  Напоминаю, формиуется excel-таблица целиком из Access'а, формулы задает сам пользоватиель программы. 

И еще... язык офиса-таки важен, потому что из-за него возникает проблема с программной установкой ширины граф списка!
Например, а ENG-офисе код
Код

Me.lst_position.ColumnWidths = "0см;0см;0см;20см"

также вызывает ошибку.

Проблема в том, что вариант сетевой, а Access установлен локально, то есть... программа должна опозновать язык и проавильно срабатывать - меняя единицы для ширины и формулы.

PM MAIL   Вверх
Akina
Дата 15.10.2007, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Так бы сразу и сказала, что программа на VBA... а то "формулы"...

ДЛя начала - косвенным признаком того что офис (вернее Эксель) русский, служит присутствие файла %Program Files%\Microsoft Office\OFFICE11\1049\FUNCS.XLS". Кстати,Ю оттуда можно взять соответствие имен функций. 
Затем - можно попробовать посмотреть на текущую локаль, вернее на наличие в системе русской локали. Но это тоже косвенно.
Можно посмотреть HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Excel\Options\LastUILang - это, правда, язык интерфейса, но зато для текущего пользователя.
Можно посмотреть HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\11.0\Registration\{90110419-6000-11D3-8CFE-0150048383C9}\ProductName и там же ProductNameBrand, и вообще не убежден что англицкий Офис будет иметь ЭТОТ ЖЕ CLSID.

Наиболее надежно - взять оттуда же или из HKLM\S\M\W\CV\Uninstall\Office CLSID Product ID - но кто же его расшифрует-то...

Добавлено @ 23:29
Цитата(LeRatO @  15.10.2007,  23:21 Найти цитируемый пост)
Например, а ENG-офисе код
[skipped]
также вызывает ошибку.

А аглицкая версия в русском офисе - тоже?

Добавлено @ 23:34
О! не все так плохо...

Цитата(http://office.microsoft.com/en-us/orkXP/HA011364611033.aspx)

Checking for an Office XP product

The registry key HKLM\Software\Microsoft\Office\10.0\Common\InstallRoot is written to the Windows registry by Setup for Office XP family products. This key will indicate whether an Office XP product or specific Office XP application is installed, but it will not identify the product or application. For example, this method returns the same result whether Office XP Professional or stand-alone Word 2002 is installed.

The following Visual Basic code will display the path where any Office XP family products are installed:

Sub CheckOfficeXPInstalled()
   InstallRoot = System.PrivateProfileString("", _
 "HKEY_LOCAL_MACHINE\Software\Microsoft\Office\10.0\Common\InstallRoot", _
 "Path")
   If InstallRoot <> "" Then
     MsgBox "An Office XP Family Product is installed at " & InstallRoot
   End If
End Sub


If you want to determine the specific Office XP product that is installed, you can check the product ID. All Office XP products have unique product IDs (GUIDs) that are stored by Windows Installer in the Windows registry. You can access these GUIDs by calling the Windows Installer API function MSIEnumProducts().

Windows Installer product IDs for Office family products are identical in the lower 24 hexadecimal digits and have a specific structure in the top eight hex digits. These upper digits define the product release type (for example, Beta, RTM, SR-1), SKU (for example, Office Professional), and language ID (for example, English = 1033).

The Office family product ID follows this format:

WXYYZZZZ-6000-11D3-8CFE-0050048383C9

To determine if Office XP is installed, call MsiEnumProducts() successively, checking the last 24 hex digits of the returned GUIDs for the value 6000-11D3-8CFE-0050048383C9.

If you find it, you can check the upper eight digits of the GUID for specific product information. The upper eight hex digits are defined as follows:

W = type of release

0 = Any release before Beta 1

1 = Beta 1

2 = Beta 2

3 = RC0 (preliminary release candidate)

4 = RC1/OEM Preview Release

5-8 = Reserved

9 = RTM (first shipped version)

A = SR1 (unused if the product code is not changed after RTM)

B = SR2 (unused if the product code is not changed after RTM)

C = SR3 (unused if the product code is not changed after RTM)

D-F = Reserved

X = type of SKU

0 = Enterprise

1 = Retail/OEM

2 = Trial

YY = specific SKU

10 = Microsoft Office XP Premium

11 = Microsoft Office XP Professional

12 = Microsoft Office XP Standard

13 = Microsoft Office XP Small Business

14 = Microsoft Office XP Web Server

15 = Microsoft Access 2002

16 = Microsoft Excel 2002

17 = Microsoft FrontPage® 2002

18 = Microsoft PowerPoint® 2002

19 = Microsoft Publisher 2002

1A = Microsoft Outlook 2002

1B = Microsoft Word 2002

1C = Microsoft Access 2002 Runtime

1D = Microsoft FrontPage Server Extensions 2002

1E = Microsoft Office Multilingual User Interface Pack

1F = Microsoft Office Proofing Tools Kit

20 = System Files Update

22 = Microsoft PhotoDraw® 2002

23 = Microsoft Office Multilingual User Interface Pack Wizard

24 = Microsoft Office XP Resource Kit

25 = Microsoft Office XP Resource Kit Tools

26 = Microsoft Office Web Components

27 = Microsoft Project 2002

28 = Microsoft Office XP Professional with FrontPage

29 = Microsoft Office XP Professional Annuity

2A = Microsoft Office XP Small Business Edition Annuity

2B = Microsoft Publisher 2002 Deluxe Edition

2F = Standalone IME (JPN Only)

30 = Microsoft Office XP Media Content

31 = Microsoft Project 2002 Web Client

32 = Microsoft Project 2002 Web Server

33 = Microsoft Office XP PIPC1 (Pre Installed PC) (JPN Only)

34 = Microsoft Office XP PIPC2 (Pre Installed PC) (JPN Only)

35 = Microsoft Office XP Media Content Deluxe

ZZZZ = locale ID (LCID) encoded in hexadecimal; for example, the LCID for English is 1033 decimal which is equivalent to 0409 hex


Добавлено @ 23:37
Так что аглицкий Офис имеет CLSID, который начинается на ХХХХХ409, а русский - на ХХХХХ419.
Есть правда одна маленькая деталь - при удалении (особенно не сильно корректном) не все ветви реестра чистятся. Т.е. придется чекать не только наличие CLSID, но и его валидность.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
LeRatO
Дата 16.10.2007, 08:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 13.8.2007

Репутация: нет
Всего: нет



Цитата(Akina @  15.10.2007,  23:25 Найти цитируемый пост)
Цитата(LeRatO @  15.10.2007,  23:21 )
Например, а ENG-офисе код
[skipped]
также вызывает ошибку.


А аглицкая версия в русском офисе - тоже?


Да-да, тоже ошибку... Из-за единиц изменения ширины (английская не понимает "см", русская - англицкого аналога). 

Лишний раз убеждаюсь, что стремление переводить все в интерфейсе вплоть до имен функций только проблемы создает.



Цитата(Akina @  15.10.2007,  23:25 Найти цитируемый пост)
Так что аглицкий Офис имеет CLSID, который начинается на ХХХХХ409, а русский - на ХХХХХ419.
Есть правда одна маленькая деталь - при удалении (особенно не сильно корректном) не все ветви реестра чистятся. Т.е. придется чекать не только наличие CLSID, но и его валидность. 



В реестре откопала ключик (HKEY_LOCAL_MACHINE\Software\Microsoft\Office\11.0\Common\SKULanguage) в котором сидит уже чистый год, а не сам CLSID.

PM MAIL   Вверх
Akina
Дата 16.10.2007, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Хорошо... правда, сработает только при условии, что версия Офиса - не ниже 2002 (ХР).


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
LeRatO
Дата 17.11.2007, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 13.8.2007

Репутация: нет
Всего: нет



Нашла более простой способ...

Из access создается excel-объект, соотвественно открывается новый файл, книга Excel, с несколькими листами... Чтобы установить язык, нужно понять как называются листы... Вся хитрость в том, что в русской версии личты называются "Лист№", в английской - "Sheet№".  smile 

А вариант с ID не проходит, например, если на англискую версию установлен либо патч русификации, либо на компе используется MUI... 
PM MAIL   Вверх
Akina
Дата 18.11.2007, 00:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата(LeRatO @  18.11.2007,  00:55 Найти цитируемый пост)
Нашла более простой способ...

Я могу привести минимум 3 разных ситуации, когда это не сработает. Но мне просто лень - по причине вполне очевидной.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS Access"
Akina
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] и [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS Access | Следующая тема »


 




[ Время генерации скрипта: 0.0530 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.