Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.07.2011, 00:26   #1
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию VBA и Win64

Обратился ко мне клиент с жалобой, что у него вдруг перестал работать мой старый макрос.
Расследование показало что клиент переехал на 64 битный Office под Win 7 64... .
А декларации API вызовов в макросе 5 летней давности естественно были только под Win32.
Так что, делая отчуждаемый макрос, не забываем писать что-нибудь вроде:
Код:
#If VBA7 And Win64 Then
    ' 64 битный Excel
    Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongLong)
#Else
    ' 32 битный Excel
    Public Declare Sub Sleep Lib "kernel32" ( ByVal dwMilliseconds As Long)
#End If

Последний раз редактировалось Aent; 21.07.2011 в 00:28.
Aent вне форума Ответить с цитированием
Старый 05.01.2012, 16:22   #2
riniks17
Форумчанин
 
Регистрация: 15.12.2011
Сообщений: 355
Радость

Цитата:
Сообщение от Aent Посмотреть сообщение
Обратился ко мне клиент с жалобой, что у него вдруг перестал работать мой старый макрос.
Расследование показало что клиент переехал на 64 битный Office под Win 7 64... .
А декларации API вызовов в макросе 5 летней давности естественно были только под Win32.
Так что, делая отчуждаемый макрос, не забываем писать что-нибудь вроде:
Код:
#If VBA7 And Win64 Then
    ' 64 битный Excel
    Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongLong)
#Else
    ' 32 битный Excel
    Public Declare Sub Sleep Lib "kernel32" ( ByVal dwMilliseconds As Long)
#End If
Сорри. У меня та же проблема. Например не ставится календарь. А в реестрах ничего поправить нельзя? Что бы один раз и навсегда. Или библиотеку скачать какую нить.
riniks17 вне форума Ответить с цитированием
Старый 05.01.2012, 17:17   #3
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

Цитата:
Подробные сведения о 64-разрядной версии Office

Возможности 32-разрядной версии Office, отсутствующие в 64-разрядной версии

- Библиотека элементов ActiveX, ComCtl. Эта библиотека содержит элементы ActiveX, используемые для создания решений. Чаще всего она используется в программах Access, Excel и Word.
- Элемент управления «список» SharePoint. Компонент списка, используемый в технологии SharePoint, недоступен пользователям 64-разрядной версии пакета Office.
- Объемные представления сводных диаграмм в Excel. Трехмерные (объемные) представления сводных диаграмм в Excel недоступны в 64-разрядной версии пакета Office. Двумерные (плоские) диаграммы доступны.




Совместимость с существующими файлами и решениями Office
Примечание. 64-разрядная версия Office 2010 несовместима с другими 32-разрядными приложениями Office. Таким образом, перед установкой 64-разрядной версии Office 2010 нужно удалить 32-разрядные приложения Office. Диск с Office 2010 содержит как 32-, так и 64-разрядную версию Office 2010. Чтобы установить 64-разрядную версию Office 2010, нужно запустить программу Setup.exe из папки x64. Дополнительные сведения см. в разделе Установка 64-разрядной версии Office.


- Библиотека элементов ActiveX, ComCtl. Любые решения, в которых используются эти элементы, не работают. Для некоторых из этих компонентов не существует подходящей замены.
- Элементы ActiveX и надстройки независимых производителей. Все такие компоненты не работают в 64-разрядной версии Office.
Примечание. Не существует 64-разрядной версии Visual Basic 6. Это означает, что многие соответствующие объекты необходимо перенести и переписать.
- Visual Basic для приложений. Единственный способ заставить работать код Microsoft Visual Basic для приложений (VBA), содержащий конструкцию Declare, в 64-разрядной версии пакета Office — это вручную внести изменения в него.
- Скомпилированные базы данных Access. MDE- и ACCDE-файлы, используемые разработчиками приложений Access для распространения решений и защиты интеллектуальной собственности, не работают в 64-разрядной версии Office. При необходимости обратитесь к поставщику с просьбой повторно скомпилировать, проверить и распространить 64-разрядную версию решения.
- Вызовы MAPI. После установки 64-разрядной версии Office теряется интеграция с приложением Microsoft Office Communicator, поскольку оно не является 64-разрядным, а трансляция вызовов MAPI между 32- и 64-разрядными программами невозможна. Это же относится и к приложениям, интегрируемым с Microsoft Outlook.
http://forum.ru-board.com/topic.cgi?...&limit=1&m=1#1
Aent вне форума Ответить с цитированием
Старый 05.01.2012, 19:32   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
У меня та же проблема. Например не ставится календарь.
Вот потому я никогда в своих макросах не использую элемент управления "Календарь", а применяю "сборку" календаря из стандартных элементов управления
(как, например, в этой программе - можете взять код из прикреплённого к статье файла)

По обеспечению работы макросов в Office 2010 и Windows x64 - посмотрите универсальный код вызова функций WinAPI у меня на сайте
EducatedFool вне форума Ответить с цитированием
Старый 22.11.2014, 11:30   #5
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Здравствуйте. Такой вопрос.
Вот есть официальная страница организации "Microsoft":
http://msdn.microsoft.com/ru-ru/libr...ffice.14).aspx

Примерно в середине страницы есть такой код:
Declare PtrSafe Function RegOpenKeyA Lib "advapire32.dll" (ByVal hKey as LongPtr, ByVal lpSubKey As String, phkResult As LongPtr) As Long

Почему на конце указан просто Long?
Вообще, на этой странице пишется, что тип данных нужно изменять у указателей и дескрипторов. Но в этой теме, в сообщении #1 у API-функции Sleep параметр "dwMilliseconds" не является ни указателем, ни дескриптором, а нужно указать LongLong.
Скрипт вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
VBA Word,VBA Excel решить 2 задачи fafolo4ka Фриланс 6 05.03.2012 01:15
От Win32 к Win64 shuaal Visual C++ 0 25.10.2010 13:30
Lazarus компилит приложения для Win64? Marsel737 Lazarus, Free Pascal, CodeTyphon 3 18.10.2010 02:30
VBA Dementeva_Viktoria Фриланс 3 19.06.2010 22:07
Windows 7 win64 и SQL Dux SQL, базы данных 0 17.03.2010 23:52