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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.12.2011, 10:58   #1
budda999
Пользователь
 
Регистрация: 28.05.2009
Сообщений: 20
По умолчанию Settimer в winx64 не работает, рушит Excel?!

Нужно, отловить событие на изменение заливки ячейки.
В просторах инета нашёл решение, с помощью API.
В win86 работает, но на Win64 нет. А так как использоваться будет на машине winx64 и офисе 2010 х64, нужно что то делать.

Переменные объявляю так,

Код:
#If Win64 Then
    Private Declare PtrSafe Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal LpTimerFunc As LongPtr) As Long
    Private Declare PtrSafe Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
 #Else
    Private Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
    Private Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
#End If
При открытии файла не запускается, в ручную - офис завершает свою работу быстренько.

В чём причина?!

Заранее спасибо.
Вложения
Тип файла: rar api SetTimer.rar (11.6 Кб, 14 просмотров)
budda999 вне форума Ответить с цитированием
Старый 30.12.2011, 14:45   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

В Office 2010 встроен VBA 7 (в не VBA 6, как в более древних версиях)
А VBA 7 требует несколько другой способ объявления функций WinAPI
EducatedFool вне форума Ответить с цитированием
Старый 04.01.2012, 09:40   #3
budda999
Пользователь
 
Регистрация: 28.05.2009
Сообщений: 20
По умолчанию

Спасибо за ответ!
Но, есть непонятности.

объявляю так:
Код:
#If Win64 Then
    #If VBA7 Then    ' Windows x64, Office 2010
        Private Declare PtrSafe Function SetTimer Lib "user32" (ByVal HWnd As LongLong, ByVal nIDEvent As LongLong, ByVal uElapse As LongLong, ByVal lpTimerFunc As LongPtr) As Long
        Private Declare PtrSafe Function KillTimer Lib "user32" (ByVal HWnd As LongLong, ByVal nIDEvent As LongLong) As Long
    #Else    ' Windows x64,Office 2003-2007
        Private Declare PtrSafe Function SetTimer Lib "user32" (ByVal HWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As LongPtr) As Long
        Private Declare PtrSafe Function KillTimer Lib "user32" (ByVal HWnd As Long, ByVal nIDEvent As Long) As Long
    #End If
#Else
    #If VBA7 Then    ' Windows x86, Office 2010
        Private Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
        Private Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
    #Else    ' Windows x86, Office 2003-2007
        Private Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
        Private Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
    #End If
#End If
Работает только если книга .xlsm !?
Смысл универсальности кода?

Или есть ошибка где то?
budda999 вне форума Ответить с цитированием
Старый 04.01.2012, 14:10   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Работает только если книга .xlsm !?
И для xls работает, и для xlsb, и для xla

Нет никакой связи между расширением файла и работоспособностью макросов в нём...


Ну и, конечно, ошибки в коде надо исправить.
Навскидку, 3 ошибки в вашем примере (сравните с моим скриншотом):

Последний раз редактировалось EducatedFool; 04.01.2012 в 14:14.
EducatedFool вне форума Ответить с цитированием
Старый 04.01.2012, 16:31   #5
budda999
Пользователь
 
Регистрация: 28.05.2009
Сообщений: 20
По умолчанию

Вот и странно, что у меня код который написал выше работает, если только файл .xlsm
на .xls вырубается office.

Исправил по рекомендации, всё равно не работает .

У меня сейчас Win7 SP1, Office 2010 SP1 все они х64.
budda999 вне форума Ответить с цитированием
Старый 04.01.2012, 16:39   #6
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
на .xls вырубается office
Значит, у вас кривая версия Office (или при установке Office возникли проблемы)
Полагаю, проблема лечится только переустановкой Office (или поставьте отдельно (дополнительно) Excel 2007)

Проверьте сначала этот код в новом файле (только эта фукция, ничего больше),
потом - на другом компе, и, если везде всё будет работать, - то тогда переустанавливайте Office

Если на другом компе не заработает (программа вылетать будет) - тогда ищите проблему в другом месте.
EducatedFool вне форума Ответить с цитированием
Старый 05.01.2012, 12:57   #7
budda999
Пользователь
 
Регистрация: 28.05.2009
Сообщений: 20
По умолчанию

Перестановка офиса с очисткой системы с помощью утилиты от микросовта и в ручную не помогла.
Пришлось переставлять ОС.
Сейчас на пустой ос заработал файл .xls

EducatedFool, спасибо за помощь!
budda999 вне форума Ответить с цитированием
Старый 05.01.2012, 20:01   #8
budda999
Пользователь
 
Регистрация: 28.05.2009
Сообщений: 20
По умолчанию

После установки обновлений, как на ОС, так и на офис, файл опять рушит ексель.
Как отловить что за программа или какое обновление это делает?
budda999 вне форума Ответить с цитированием
Старый 05.01.2012, 21:33   #9
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
После установки обновлений, как на ОС, так и на офис, файл опять рушит ексель.
Моё мнение: обновления (которые скачиваются и устанавливаются автоматически) - ЗЛО.
Никогда не включаю обновления - и всё работает стабильно годами, без каких-либо сбоев.

PS: Не знаю, может, вы являетесь приверженцем легального ПО, и устанавливаете Office с лицензионного диска, и потом накатываете обновления.
В этом случае я ничем вам помочь не могу.

PPS: Если вы относитесь к большинству, и не боитесь пиратских сборок Windows и Office, - то поставьте Office сразу с последними обновлениями (отключив автообновление), и проблем не будет.
EducatedFool вне форума Ответить с цитированием
Старый 07.01.2012, 13:43   #10
budda999
Пользователь
 
Регистрация: 28.05.2009
Сообщений: 20
По умолчанию

Ещё раз спасибо EducatedFool!

Всегда про обновления думал что это - хорошо?!
В преть буду осторожен с автообновлениями.

PS: ПО у меня как и у большинства в РФ! И я не являюсь приверженцем, скорее наоборот.
budda999 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает в MS Excel 2007 Application.FileSearch Riser28 Microsoft Office Excel 17 08.09.2011 13:28
Delphi 7 ADOConnection Mysql ODBC 5.1.6 Winx64 Spot БД в Delphi 0 15.01.2010 04:52
SetTimer, KillTimer NeiL Win Api 5 05.03.2008 07:37
Не работает Excel глючит по страшному? boombox Microsoft Office Excel 2 22.11.2007 12:16