** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Declarar function con PtrSafe
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoDeclarar function con PtrSafe

 Responder Responder
Autor
Mensaje
jmmiralles Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 29/Noviembre/2008
Localización: Albacete-España
Estado: Sin conexión
Puntos: 569
Enlace directo a este mensaje Tema: Declarar function con PtrSafe
    Enviado: 21/Diciembre/2015 a las 23:00
Buenas noches a todos,
¿cómo se puede hacer que el código de VBA 7 sea compatible con VBA?

Por ejemplo para VBA 7 en 64 bits es obligatorio, para 32 bits es opcional, declarar la funciones con la palabra clave PtrSafe.

Como podría hacer para declarar, por ejemplo la siguiente Function, y me pueda ser utilizada en office 2010 como office 2003 o inferiores versiones.

Private Declare PtrSafe Function DeleteMenu _
                Lib "user32" _
                (ByVal hMenu As Long, _
                ByVal nPosition As Long, _
                ByVal wFlags As Long) As Long



Os agradezco anticipadamente las respuestas.
Saludos desde un lugar de la Mancha

Visita Mi Web

http://jmmirallesortega.wix.com/accessyvba<
Arriba
mounir Ver desplegable
Colaborador
Colaborador


Unido: 09/Febrero/2009
Localización: Asturias-España
Estado: Sin conexión
Puntos: 5140
Enlace directo a este mensaje Enviado: 21/Diciembre/2015 a las 23:42
Hola!

Inténtalo así:

#if Win64 then
   Declare PtrSafe Function MyMathFunc Lib "User32" (ByVal N As LongLong) As LongLong
#else
   Declare Function MyMathFunc Lib "User32" (ByVal N As Long) As Long
#end if
#if VBA7 then
   Declare PtrSafe Sub MessageBeep Lib "User32" (ByVal N AS Long)
#else
   Declare Sub MessageBeep Lib "User32" (ByVal N AS Long)
#end if


Para más información:



https://msdn.microsoft.com/en-us/library/ee691831(office.14).aspx



Editado por mounir - 21/Diciembre/2015 a las 23:42
Un Saludo.
Arriba
jmmiralles Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 29/Noviembre/2008
Localización: Albacete-España
Estado: Sin conexión
Puntos: 569
Enlace directo a este mensaje Enviado: 21/Diciembre/2015 a las 23:48
Gracias mounir!!!
 voy a comprobar y os comento.Thumbs Up
Saludos desde un lugar de la Mancha

Visita Mi Web

http://jmmirallesortega.wix.com/accessyvba<
Arriba
jmmiralles Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 29/Noviembre/2008
Localización: Albacete-España
Estado: Sin conexión
Puntos: 569
Enlace directo a este mensaje Enviado: 22/Diciembre/2015 a las 00:09
Hola
 para access 2003 no me funciona, de hecho una vez leido el link indica que se aplica de Office 2007 para arriba.

Applies to:  Excel 2010 | Office 2007 | Office 
2010 | Open XML | PowerPoint 2010 | SharePoint Server 2010 | VBA | 
Visual Basic for Applications 7.0 (VBA 7.0) | Word 2010

Voy a seguir buscando por San google, no obstante ¡¡Muchas gracia Mounir!!.



Saludos desde un lugar de la Mancha

Visita Mi Web

http://jmmirallesortega.wix.com/accessyvba<
Arriba
emiliove Ver desplegable
Moderador
Moderador


Unido: 16/Junio/2009
Localización: Mexico
Estado: Sin conexión
Puntos: 4927
Enlace directo a este mensaje Enviado: 22/Diciembre/2015 a las 00:21
Pero existe access2003 de 64 bits.
 
Ya comentas, saludos.
Arriba
jmmiralles Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 29/Noviembre/2008
Localización: Albacete-España
Estado: Sin conexión
Puntos: 569
Enlace directo a este mensaje Enviado: 22/Diciembre/2015 a las 00:38
No Emilio, tienes razón,

pero te comento, en mi web hice unos ejemplos con access 2003 y quiero que esos ejemplos sean validos para versiones de office 2003 como para office 64 bits sin tener que hacer ejemplos independientes, es decir, ejemplos para 2002/2003 y otros para 2007 en adelante de 64 bits.

Por lo de los ejemplos es lo de menos, porque quitar la palabra clave PtrSafe y subir un ejemplo para cada versión es poco tiempo, es más la curiosidad si esto sería posible.


Abrazos.
Saludos desde un lugar de la Mancha

Visita Mi Web

http://jmmirallesortega.wix.com/accessyvba<
Arriba
mounir Ver desplegable
Colaborador
Colaborador


Unido: 09/Febrero/2009
Localización: Asturias-España
Estado: Sin conexión
Puntos: 5140
Enlace directo a este mensaje Enviado: 22/Diciembre/2015 a las 01:31
Un Saludo.
Arriba
jmmiralles Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 29/Noviembre/2008
Localización: Albacete-España
Estado: Sin conexión
Puntos: 569
Enlace directo a este mensaje Enviado: 22/Diciembre/2015 a las 09:28
Hola mounir,
lo he intentado con mi viejo y amigo access 2003 pero me da error, tiene que ser algo que yo no sepa hacer porque si han puesto el ejemplo por algo será.

De todas formas Muchas Gracias.


Saludos desde un lugar de la Mancha

Visita Mi Web

http://jmmirallesortega.wix.com/accessyvba<
Arriba
emiliove Ver desplegable
Moderador
Moderador


Unido: 16/Junio/2009
Localización: Mexico
Estado: Sin conexión
Puntos: 4927
Enlace directo a este mensaje Enviado: 22/Diciembre/2015 a las 15:34
Que lo marque en rojo no significa que te genera un error, pon una API que uses aunque sea la de Beep y pruébalo en 32 y 64 bits, y ya nos platicas.
 
Saludos.
Arriba
Emilio Ver desplegable
Administrador
Administrador

Santander

Unido: 08/Agosto/2004
Localización: España
Estado: Sin conexión
Puntos: 18807
Enlace directo a este mensaje Enviado: 22/Diciembre/2015 a las 21:35
Hola!

el uso de las almohadillas (#) es precisamente para realizar una compilación condicional ignorando aquello que no es asimilable por tu versión de Access, en este tu caso el ptrsafe, el que lo pinte de rojo no implica que luego no lo comile correctamente y se vaya a producir un fallo del proceso.
Saludos a todos desde Huelva

http://www.mvp-access.es/emilio/
Arriba
jmmiralles Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 29/Noviembre/2008
Localización: Albacete-España
Estado: Sin conexión
Puntos: 569
Enlace directo a este mensaje Enviado: 22/Diciembre/2015 a las 23:09
Muchas gracias a todos,
comentaros que en Access 2010 32 bits e 64 bits funciona perfectamente, pero en mi office 2003 me dá error.



Aunque no haya podido solucionar el tema de momento, me doy por satisfecho al haber aprendido algo nuevo de vosotros, por ejemplo lo de colorcito rojo o lo de las almuadhillas, la forma de declarar para 64 bits, a sido todo muy fructifero. Muchas gracias a todos.

Saludos desde un lugar de la Mancha

Visita Mi Web

http://jmmirallesortega.wix.com/accessyvba<
Arriba
Dany Solis Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 23/Octubre/2010
Localización: Cd. Juarez Méx
Estado: Sin conexión
Puntos: 810
Enlace directo a este mensaje Enviado: 30/Marzo/2016 a las 18:36
Hola jmmiralles.

Encontre esta liga en Ingles creo te puede servier echale un vistazo.

http://stackoverflow.com/questions/4251111/how-to-make-vba-code-compatible-for-office-2010-64-bit-version-and-older-offic

Saludos

DS
Donde hay educación, no hay distinction de clases. (Confusio)

Dany Solis
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable