Страницы: 1
RSS
Declare Function GetAsyncKeyState Lib "user32.dll" для 64 разрядных машин, сохранить работоспособность при переходе на 64 разряда
 
Declare Function GetAsyncKeyState Lib "user32.dll"  
функция работает на виндос 7 64 разряд офис 2003 2007
:( не работает на виндос 7 64 разряд офис 2010 64 разряда
и проверить неначем
поиск в интернете предложил ложить длл в другие папки
может есть другой путь
 
может кто нибудь проверить если так задекларировать
Declare  Function GetAsyncKeyState Lib  "C: \ Windows \ SysWOW64 \ User32.dll"
 
Это?,  Еще
Изменено: Sanja - 31.03.2016 12:08:55
Согласие есть продукт при полном непротивлении сторон
 
Помогите с правописанием как такое задекларировать
Код
#If VBA7 Then    '  Office 2010
    Declare PtrSafe Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
#Else    '  Office 2003-2007
    Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
#End If

офис 2003
такая конструкция дает ошибку
Код
#If VBA7 Then Declare PtrSafe Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Изменено: йцукен55 - 01.04.2016 10:33:25
 
йцукен55, имя отображаемое измените. Сейчас оно с нарушением правил.
И коды оформите соответствующим тегом, пожалуйста. Выделили код, нажали <...>.
Спасибо.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
По первой ссылке вроде же все понятно
Код
#If Win64 Then
    #If VBA7 Then    ' Windows x64, Office 2010
        Declare PtrSafe Function GetAsyncKeyState Lib "user32" (ByVal kState As LongLong) As LongLong
    #Else    ' Windows x64,Office 2003-2007
        Declare Function GetAsyncKeyState Lib "user32" (ByVal kState As LongLong) As LongLong
    #End If
#Else
    #If VBA7 Then    ' Windows x86, Office 2010
        Declare PtrSafe Function GetAsyncKeyState Lib "user32" (ByVal kState As Long) As Long
    #Else    ' Windows x86, Office 2003-2007
        Declare Function GetAsyncKeyState Lib "user32" (ByVal kState As Long) As Long
    #End If
#End If
Согласие есть продукт при полном непротивлении сторон
 
такие запись выдают ошибку при декларировании функций
If VBA7 Then Declare PtrSafe Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
#If VBA7 Then Declare PtrSafe Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
 
Код
#If VBA7 Then 'Office 2010 - 64 и 32
        Declare PtrSafe Function GetAsyncKeyState Lib "user32" (ByVal kState As LongPtr) As LongPtr
#Else   'до 2010 офиса не было поддержки 64 бит, поэтому только Long
        Declare Function GetAsyncKeyState Lib "user32" (ByVal kState As Long) As Long
#End If
В вашем коде Вы PtrSafe добавили, а Long на LongPtr не заменили.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
так все нормально
Private Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal kState As Long) As Integer
а так ошибка
If VBA7 Then Private Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal kState As Long) As Integer
Я пишу это в excel 2003
Изменено: звездочка яркая - 31.03.2016 14:23:06
 
Все же освойте оформление тегами сообщений. Не читабельно.
Обратите внимание на решетки перед IF и пр. Они не просто так - они тоже нужны.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
так задекларировать немогу выдает ошибку в правописании
Код
#If Win64 Then Declare PtrSafe Function MyMathFunc Lib "User32" (ByVal N As LongLong) As LongLong
Изменено: звездочка яркая - 31.03.2016 15:01:47
 
PtrSafe и LongLong не вяжутся. Я же написал, раз уж PtrSafe, то должно быть LongPtr
и вынесенные декларации принято не в одну строку писать, в принципе. В одну не допускается. Пишите так, как Вам показали:
Код
#If Win64 Then
Declare PtrSafe Function MyMathFunc Lib "User32" (ByVal N As LongPtr) As LongPtr
#End If
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
я скопировала код
Код
#If VBA7 Then 'Office 2010 - 64 и 32
        Declare PtrSafe Function GetAsyncKeyState Lib "user32" (ByVal kState As LongPtr) As LongPtr
#Else   'до 2010 офиса не было поддержки 64 бит, поэтому только Long
        Declare Function GetAsyncKeyState Lib "user32" (ByVal kState As Long) As Long
#End If
 
Так Вы должны эти коды расположить в стандартном модуле. Или объявляйте как Private
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
кажется поняла
это только в модуле так декларировать можно
а я в Workbook_Open пыталась
 
Спасибо!
ушла пробовать на 64 разрядах
Страницы: 1
Читают тему
Наверх