sistemas - Código de VBA de Excel: error de compilación en la versión x64(se requiere atributo ''PtrSafe'')
declare ptrsafe 64 bits (2)
Estoy utilizando Win8 x64 + Office 2013 x64.
MI PROBLEMA:
Tengo un archivo de Excel, que tiene algunos módulos, y funciona perfectamente en Office (Excel) x86. Utiliza el archivo Swiss Ephemeris ( swedll32.dll ) para hacer muchos cálculos astronómicos.
Sin embargo, cuando intento ejecutarlo en mi final, que está en Excel x64, ASAP está abierto, el editor de VBA se activa y me da el siguiente error:
Compile error:
The code in this project must be updated for use on 64-bit systems.
Please review and update Declare statements and then mark them with the PtrSafe attribute.
Como dije anteriormente, solo funciona en la oficina de 32 bits (Excel) pero no funciona en mi x64 Excel. Sin embargo, parece que hay una solución alternativa, pero soy demasiado novato para conseguirlo.
No soy bueno en VBA, sin embargo, después de buscar en Internet, algunos sitios web propusieron que para la oficina de 64 bits (Excel), deberíamos modificar (para cada declaración) los códigos a algo así:
- Declaración original: Función de declaración privada
- Declaración modificada: Función privada de PtrSafe declarar
Desafortunadamente, después de agregar '' PtrSafe '' en todas partes, los errores de VBA se detuvieron, pero los valores no se muestran / calculan correctamente en las celdas.
De una publicación en 64 Bit en VBA de Microsoft, parece que también necesitamos modificar algunos de los tipos de datos, tales como:
- Largo → a → LargoPtr
- LongPtr → a → LongLong
- y se supone que algunos "largos" permanecen igual, dependiendo de lo que hagan.
Este sitio web (en "¿Qué largos deben convertirse en LongPtr?") Da una pista, sin embargo, en cuanto a cómo saber cuál modificar.
No entiendo nada de eso y no tengo idea de lo que se debe hacer para que esto funcione en Office (Excel) x64. Alguien que es muy bueno en esto, por favor ayúdame. Por favor.
Nota:
- Solo las declaraciones que aparecieron en rojo, que denotan que contienen errores, se han volcado aquí. La parte restante de los códigos no se pegó aquí porque parecen estar bien (de color verde).
- Para que el archivo Excel funcione correctamente en su computadora, asegúrese de que tanto ''swedll32.dll'' como ''JCalc Ver 0.2d.xls'' estén en la misma carpeta, después de haberlos extraído.
Problema en Nombre del Módulo: MainCalculations
''Swiss Ephemeris Release 1.60 9-jan-2000
''
'' Declarations for Visual Basic 5.0
'' The DLL file must exist in the same directory, or in a system
'' directory where it can be found at runtime
''
Private Declare Function swe_azalt Lib "swedll32.dll" _
Alias "_swe_azalt@40" ( _
ByVal tjd_ut As Double, _
ByVal calc_flag As Long, _
ByRef geopos As Double, _
ByVal atpress As Double, _
ByVal attemp As Double, _
ByRef xin As Double, _
ByRef xaz As Double _
) As Long ''geopos must be the first of three array elements
''xin must be the first of two array elements
''xaz must be the first of three array elements
Private Declare Function swe_azalt_rev Lib "swedll32.dll" _
Alias "_swe_azalt_rev@24" ( _
ByVal tjd_ut As Double, _
ByVal calc_flag As Long, _
ByRef geopos As Double, _
ByRef xin As Double, _
ByRef xout As Double _
) As Long ''geopos must be the first of three array elements
''xin must be the first of two array elements
''xout must be the first of three array elements
Private Declare Function swe_calc Lib "swedll32.dll" _
Alias "_swe_calc@24" ( _
ByVal tjd As Double, _
ByVal ipl As Long, _
ByVal iflag As Long, _
ByRef X As Double, _
ByVal serr As String _
) As Long '' x must be first of six array elements
'' serr must be able to hold 256 bytes
Private Declare Function swe_calc_d Lib "swedll32.dll" _
Alias "_swe_calc_d@20" ( _
ByRef tjd As Double, _
ByVal ipl As Long, _
ByVal iflag As Long, _
ByRef X As Double, _
ByVal serr As String _
) As Long '' x must be first of six array elements
'' serr must be able to hold 256 bytes
Private Declare Function swe_calc_ut Lib "swedll32.dll" _
Alias "_swe_calc_ut@24" ( _
ByVal tjd_ut As Double, _
ByVal ipl As Long, _
ByVal iflag As Long, _
ByRef X As Double, _
ByVal serr As String _
) As Long '' x must be first of six array elements
'' serr must be able to hold 256 bytes
Private Declare Function swe_calc_ut_d Lib "swedll32.dll" _
Alias "_swe_calc_ut_d@20" ( _
ByRef tjd_ut As Double, _
ByVal ipl As Long, _
ByVal iflag As Long, _
ByRef X As Double, _
ByVal serr As String _
) As Long '' x must be first of six array elements
'' serr must be able to hold 256 bytes
Private Declare Function swe_close Lib "swedll32.dll" _
Alias "_swe_close@0" ( _
) As Long
Private Declare Function swe_close_d Lib "swedll32.dll" _
Alias "_swe_close_d@4" ( _
ByVal ivoid As Long _
) As Long '' argument ivoid is ignored
Private Declare Sub swe_cotrans Lib "swedll32.dll" _
Alias "_swe_cotrans@16" ( _
ByRef xpo As Double, _
ByRef xpn As Double, _
ByVal eps As Double _
)
Private Declare Function swe_cotrans_d Lib "swedll32.dll" _
Alias "_swe_cotrans_d@12" ( _
ByRef xpo As Double, _
ByRef xpn As Double, _
ByRef eps As Double _
) As Long
Private Declare Sub swe_cotrans_sp Lib "swedll32.dll" _
Alias "_swe_cotrans_sp@16" ( _
ByRef xpo As Double, _
ByRef xpn As Double, _
ByVal eps As Double _
)
Private Declare Function swe_cotrans_sp_d Lib "swedll32.dll" _
Alias "_swe_cotrans_sp_d@12" ( _
ByRef xpo As Double, _
ByRef xpn As Double, _
ByRef eps As Double _
) As Long
Private Declare Sub swe_cs2degstr Lib "swedll32.dll" _
Alias "_swe_cs2degstr@8" ( _
ByVal t As Long, _
ByVal S As String _
)
Private Declare Function swe_cs2degstr_d Lib "swedll32.dll" _
Alias "_swe_cs2degstr_d@8" ( _
ByVal t As Long, _
ByVal S As String _
) As Long
Private Declare Sub swe_cs2lonlatstr Lib "swedll32.dll" _
Alias "_swe_cs2lonlatstr@16" ( _
ByVal t As Long, _
ByVal pchar As Byte, _
ByVal mchar As Byte, _
ByVal S As String _
)
Private Declare Function swe_cs2lonlatstr_d Lib "swedll32.dll" _
Alias "_swe_cs2lonlatstr_d@16" ( _
ByVal t As Long, _
ByRef pchar As Byte, _
ByRef mchar As Byte, _
ByVal S As String _
) As Long
Private Declare Sub swe_cs2timestr Lib "swedll32.dll" _
Alias "_swe_cs2timestr@16" ( _
ByVal t As Long, _
ByVal sep As Long, _
ByVal supzero As Long, _
ByVal S As String _
)
Private Declare Function swe_cs2timestr_d Lib "swedll32.dll" _
Alias "_swe_cs2timestr_d@16" ( _
ByVal t As Long, _
ByVal sep As Long, _
ByVal supzero As Long, _
ByVal S As String _
) As Long
Private Declare Function swe_csnorm Lib "swedll32.dll" _
Alias "_swe_csnorm@4" ( _
ByVal P As Long _
) As Long
Private Declare Function swe_csnorm_d Lib "swedll32.dll" _
Alias "_swe_csnorm_d@4" ( _
ByVal P As Long _
) As Long
Private Declare Function swe_csroundsec Lib "swedll32.dll" _
Alias "_swe_csroundsec@4" ( _
ByVal P As Long _
) As Long
Private Declare Function swe_csroundsec_d Lib "swedll32.dll" _
Alias "_swe_csroundsec_d@4" ( _
ByVal P As Long _
) As Long
Private Declare Function swe_d2l Lib "swedll32.dll" _
Alias "_swe_d2l@8" ( _
) As Long
Private Declare Function swe_d2l_d Lib "swedll32.dll" _
Alias "_swe_d2l_d@4" ( _
) As Long
Private Declare Function swe_date_conversion Lib "swedll32.dll" _
Alias "_swe_date_conversion@28" ( _
ByVal Year As Long, _
ByVal Month As Long, _
ByVal Day As Long, _
ByVal utime As Double, _
ByVal cal As Byte, _
ByRef tjd As Double _
) As Long
Private Declare Function swe_date_conversion_d Lib "swedll32.dll" _
Alias "_swe_date_conversion_d@24" ( _
ByVal Year As Long, _
ByVal Month As Long, _
ByVal Day As Long, _
ByRef utime As Double, _
ByRef cal As Byte, _
ByRef tjd As Double _
) As Long
Private Declare Function swe_day_of_week Lib "swedll32.dll" _
Alias "_swe_day_of_week@8" ( _
ByVal JD As Double _
) As Long
Private Declare Function swe_day_of_week_d Lib "swedll32.dll" _
Alias "_swe_day_of_week_d@4" ( _
ByRef JD As Double _
) As Long
Private Declare Function swe_degnorm Lib "swedll32.dll" _
Alias "_swe_degnorm@8" ( _
ByVal JD As Double _
) As Double
Private Declare Function swe_degnorm_d Lib "swedll32.dll" _
Alias "_swe_degnorm_d@4" ( _
ByRef JD As Double _
) As Long
Private Declare Function swe_deltat Lib "swedll32.dll" _
Alias "_swe_deltat@8" ( _
ByVal JD As Double _
) As Double
Private Declare Function swe_deltat_d Lib "swedll32.dll" _
Alias "_swe_deltat_d@8" ( _
ByRef JD As Double, _
ByRef deltat As Double _
) As Long
Private Declare Function swe_difcs2n Lib "swedll32.dll" _
Alias "_swe_difcs2n@8" ( _
ByVal p1 As Long, _
ByVal p2 As Long _
) As Long
Private Declare Function swe_difcs2n_d Lib "swedll32.dll" _
Alias "_swe_difcs2n_d@8" ( _
ByVal p1 As Long, _
ByVal p2 As Long _
) As Long
Private Declare Function swe_difcsn Lib "swedll32.dll" _
Alias "_swe_difcsn@8" ( _
ByVal p1 As Long, _
ByVal p2 As Long _
) As Long
Private Declare Function swe_difcsn_d Lib "swedll32.dll" _
Alias "_swe_difcsn_d@8" ( _
ByVal p1 As Long, _
ByVal p2 As Long _
) As Long
Private Declare Function swe_difdeg2n Lib "swedll32.dll" _
Alias "_swe_difdeg2n@16" ( _
ByVal p1 As Double, _
ByVal p2 As Double _
) As Double
Private Declare Function swe_difdeg2n_d Lib "swedll32.dll" _
Alias "_swe_difdeg2n_d@12" ( _
ByRef p1 As Double, _
ByRef p2 As Double, _
ByRef Diff As Double _
) As Long
Private Declare Function swe_difdegn Lib "swedll32.dll" _
Alias "_swe_difdegn@16" ( _
ByVal p1 As Double, _
ByVal p2 As Double _
) As Long
Private Declare Function swe_difdegn_d Lib "swedll32.dll" _
Alias "_swe_difdegn_d@12" ( _
ByRef p1 As Double, _
ByRef p2 As Double, _
ByRef Diff As Double _
) As Long
Private Declare Function swe_fixstar Lib "swedll32.dll" _
Alias "_swe_fixstar@24" ( _
ByVal star As String, _
ByVal tjd As Double, _
ByVal iflag As Long, _
ByRef X As Double, _
ByVal serr As String _
) As Long '' x must be first of six array elements
'' serr must be able to hold 256 bytes
'' star must be able to hold 40 bytes
Private Declare Function swe_fixstar_d Lib "swedll32.dll" _
Alias "_swe_fixstar_d@20" ( _
ByVal star As String, _
ByRef tjd As Double, _
ByVal iflag As Long, _
ByRef X As Double, _
ByVal serr As String _
) As Long '' x must be first of six array elements
'' serr must be able to hold 256 bytes
'' star must be able to hold 40 bytes
Private Declare Function swe_fixstar_ut Lib "swedll32.dll" _
Alias "_swe_fixstar_ut@24" ( _
ByVal star As String, _
ByVal tjd_ut As Double, _
ByVal iflag As Long, _
ByRef X As Double, _
ByVal serr As String _
) As Long '' x must be first of six array elements
'' serr must be able to hold 256 bytes
'' star must be able to hold 40 bytes
Private Declare Function swe_fixstar_ut_d Lib "swedll32.dll" _
Alias "_swe_fixstar_ut_d@20" ( _
ByVal star As String, _
ByRef tjd_ut As Double, _
ByVal iflag As Long, _
ByRef X As Double, _
ByVal serr As String _
) As Long '' x must be first of six array elements
'' serr must be able to hold 256 bytes
'' star must be able to hold 40 bytes
Private Declare Function swe_get_ayanamsa Lib "swedll32.dll" _
Alias "_swe_get_ayanamsa@8" ( _
ByVal tjd_et As Double _
) As Double
Private Declare Function swe_get_ayanamsa_d Lib "swedll32.dll" _
Alias "_swe_get_ayanamsa_d@8" ( _
ByRef tjd_et As Double, _
ByRef ayan As Double _
) As Long
Private Declare Function swe_get_ayanamsa_ut Lib "swedll32.dll" _
Alias "_swe_get_ayanamsa_ut@8" ( _
ByVal tjd_ut As Double _
) As Double
Private Declare Function swe_get_ayanamsa_ut_d Lib "swedll32.dll" _
Alias "_swe_get_ayanamsa_ut_d@8" ( _
ByRef tjd_ut As Double, _
ByRef ayan As Double _
) As Long
Private Declare Sub swe_get_planet_name Lib "swedll32.dll" _
Alias "_swe_get_planet_name@8" ( _
ByVal ipl As Long, _
ByVal pname As String _
)
Private Declare Function swe_get_planet_name_d Lib "swedll32.dll" _
Alias "_swe_get_planet_name_d@8" ( _
ByVal ipl As Long, _
ByVal pname As String _
) As Long
Private Declare Function swe_get_tid_acc Lib "swedll32.dll" _
Alias "_swe_get_tid_acc@0" ( _
) As Double
Private Declare Function swe_get_tid_acc_d Lib "swedll32.dll" _
Alias "_swe_get_tid_acc_d@4" ( _
ByRef X As Double _
) As Long
Private Declare Function swe_houses Lib "swedll32.dll" _
Alias "_swe_houses@36" ( _
ByVal tjd_ut As Double, _
ByVal geolat As Double, _
ByVal geolon As Double, _
ByVal ihsy As Long, _
ByRef hcusps As Double, _
ByRef ascmc As Double _
) As Long '' hcusps must be first of 13 array elements
'' ascmc must be first of 10 array elements
Private Declare Function swe_houses_d Lib "swedll32.dll" _
Alias "_swe_houses_d@24" ( _
ByRef tjd_ut As Double, _
ByRef geolat As Double, _
ByRef geolon As Double, _
ByVal ihsy As Long, _
ByRef hcusps As Double, _
ByRef ascmc As Double _
) As Long '' hcusps must be first of 13 array elements
'' ascmc must be first of 10 array elements
Private Declare Function swe_houses_ex Lib "swedll32.dll" _
Alias "_swe_houses_ex@40" ( _
ByVal tjd_ut As Double, _
ByVal iflag As Long, _
ByVal geolat As Double, _
ByVal geolon As Double, _
ByVal ihsy As Long, _
ByRef hcusps As Double, _
ByRef ascmc As Double _
) As Long '' hcusps must be first of 13 array elements
'' ascmc must be first of 10 array elements
Private Declare Function swe_houses_ex_d Lib "swedll32.dll" _
Alias "_swe_houses_ex_d@28" ( _
ByRef tjd_ut As Double, _
ByVal iflag As Long, _
ByRef geolat As Double, _
ByRef geolon As Double, _
ByVal ihsy As Long, _
ByRef hcusps As Double, _
ByRef ascmc As Double _
) As Long '' hcusps must be first of 13 array elements
'' ascmc must be first of 10 array elements
Private Declare Function swe_houses_armc Lib "swedll32.dll" _
Alias "_swe_houses_armc@36" ( _
ByVal armc As Double, _
ByVal geolat As Double, _
ByVal eps As Double, _
ByVal ihsy As Long, _
ByRef hcusps As Double, _
ByRef ascmc As Double _
) As Long '' hcusps must be first of 13 array elements
'' ascmc must be first of 10 array elements
Private Declare Function swe_houses_armc_d Lib "swedll32.dll" _
Alias "_swe_houses_armc_d@24" ( _
ByRef armc As Double, _
ByRef geolat As Double, _
ByRef eps As Double, _
ByVal ihsy As Long, _
ByRef hcusps As Double, _
ByRef ascmc As Double _
) As Long '' hcusps must be first of 13 array elements
'' ascmc must be first of 10 array elements
Private Declare Function swe_house_pos Lib "swedll32.dll" _
Alias "_swe_house_pos@36" ( _
ByVal armc As Double, _
ByVal geolat As Double, _
ByVal eps As Double, _
ByVal ihsy As Long, _
ByRef xpin As Double, _
ByVal serr As String _
) As Double
'' xpin must be first of 2 array elements
Private Declare Function swe_house_pos_d Lib "swedll32.dll" _
Alias "_swe_house_pos_d@28" ( _
ByRef armc As Double, _
ByRef geolat As Double, _
ByRef eps As Double, _
ByVal ihsy As Long, _
ByRef xpin As Double, _
ByRef hpos As Double, _
ByVal serr As String _
) As Long
'' xpin must be first of 2 array elements
Private Declare Function swe_julday Lib "swedll32.dll" _
Alias "_swe_julday@24" ( _
ByVal Year As Long, _
ByVal Month As Long, _
ByVal Day As Long, _
ByVal hour As Double, _
ByVal gregflg As Long _
) As Double
Private Declare Function swe_julday_d Lib "swedll32.dll" _
Alias "_swe_julday_d@24" ( _
ByVal Year As Long, _
ByVal Month As Long, _
ByVal Day As Long, _
ByRef hour As Double, _
ByVal gregflg As Long, _
ByRef tjd As Double _
) As Long
Private Declare Function swe_lun_eclipse_how Lib "swedll32.dll" _
Alias "_swe_lun_eclipse_how@24" ( _
ByVal tjd_ut As Double, _
ByVal ifl As Long, _
ByRef geopos As Double, _
ByRef attr As Double, _
ByVal serr As String _
) As Long
Private Declare Function swe_lun_eclipse_how_d Lib "swedll32.dll" _
Alias "_swe_lun_eclipse_how_d@20" ( _
ByRef tjd_ut As Double, _
ByVal ifl As Long, _
ByRef geopos As Double, _
ByRef attr As Double, _
ByVal serr As String _
) As Long
Private Declare Function swe_lun_eclipse_when Lib "swedll32.dll" _
Alias "_swe_lun_eclipse_when@28" ( _
ByVal tjd_start As Double, _
ByVal ifl As Long, _
ByVal ifltype As Long, _
ByRef tret As Double, _
ByVal backward As Long, _
ByVal serr As String _
) As Long
Private Declare Function swe_lun_eclipse_when_d Lib "swedll32.dll" _
Alias "_swe_lun_eclipse_when_d@24" ( _
ByRef tjd_start As Double, _
ByVal ifl As Long, _
ByVal ifltype As Long, _
ByRef tret As Double, _
ByVal backward As Long, _
ByVal serr As String _
) As Long
Private Declare Function swe_nod_aps Lib "swedll32.dll" _
Alias "_swe_nod_aps@40" ( _
ByVal tjd_et As Double, _
ByVal ipl As Long, _
ByVal iflag As Long, _
ByVal method As Long, _
ByRef xnasc As Double, _
ByRef xndsc As Double, _
ByRef xperi As Double, _
ByRef xaphe As Double, _
ByVal serr As String _
) As Long
Private Declare Function swe_nod_aps_ut Lib "swedll32.dll" _
Alias "_swe_nod_aps_ut@40" ( _
ByVal tjd_ut As Double, _
ByVal ipl As Long, _
ByVal iflag As Long, _
ByVal method As Long, _
ByRef xnasc As Double, _
ByRef xndsc As Double, _
ByRef xperi As Double, _
ByRef xaphe As Double, _
ByVal serr As String _
) As Long
Private Declare Function swe_pheno Lib "swedll32.dll" _
Alias "_swe_pheno@24" ( _
ByVal tjd As Double, _
ByVal ipl As Long, _
ByVal iflag As Long, _
ByRef attr As Double, _
ByVal serr As String _
) As Long
Private Declare Function swe_pheno_ut Lib "swedll32.dll" _
Alias "_swe_pheno_ut@24" ( _
ByVal tjd As Double, _
ByVal ipl As Long, _
ByVal iflag As Long, _
ByRef attr As Double, _
ByVal serr As String _
) As Long
Private Declare Function swe_pheno_d Lib "swedll32.dll" _
Alias "_swe_pheno_d@20" ( _
ByRef tjd As Double, _
ByVal ipl As Long, _
ByVal iflag As Long, _
ByRef attr As Double, _
ByVal serr As String _
) As Long
Private Declare Function swe_pheno_ut_d Lib "swedll32.dll" _
Alias "_swe_pheno_ut_d@20" ( _
ByRef tjd As Double, _
ByVal ipl As Long, _
ByVal iflag As Long, _
ByRef attr As Double, _
ByVal serr As String _
) As Long
Private Declare Function swe_refrac Lib "swedll32.dll" _
Alias "_swe_refrac@28" ( _
ByVal inalt As Double, _
ByVal atpress As Double, _
ByVal attemp As Double, _
ByVal calc_flag As Long _
) As Double
Private Declare Sub swe_revjul Lib "swedll32.dll" _
Alias "_swe_revjul@28" ( _
ByVal tjd As Double, _
ByVal gregflg As Long, _
ByRef Year As Long, _
ByRef Month As Long, _
ByRef Day As Long, _
ByRef hour As Double _
)
Private Declare Function swe_revjul_d Lib "swedll32.dll" _
Alias "_swe_revjul_d@24" ( _
ByRef tjd As Double, _
ByVal gregflg As Long, _
ByRef Year As Long, _
ByRef Month As Long, _
ByRef Day As Long, _
ByRef hour As Double _
) As Long
Private Declare Function swe_rise_trans Lib "swedll32.dll" _
Alias "_swe_rise_trans@52" ( _
ByVal tjd_ut As Double, _
ByVal ipl As Long, _
ByVal starname As String, _
ByVal epheflag As Long, _
ByVal rsmi As Long, _
ByRef geopos As Double, _
ByVal atpress As Double, _
ByVal attemp As Double, _
ByRef tret As Double, _
ByVal serr As String _
) As Long
Private Declare Sub swe_set_ephe_path Lib "swedll32.dll" _
Alias "_swe_set_ephe_path@4" ( _
ByVal path As String _
)
Private Declare Function swe_set_ephe_path_d Lib "swedll32.dll" _
Alias "_swe_set_ephe_path_d@4" ( _
ByVal path As String _
) As Long
Private Declare Sub swe_set_jpl_file Lib "swedll32.dll" _
Alias "_swe_set_jpl_file@4" ( _
ByVal file As String _
)
Private Declare Function swe_set_jpl_file_d Lib "swedll32.dll" _
Alias "_swe_set_jpl_file_d@4" ( _
ByVal file As String _
) As Long
Private Declare Function swe_set_sid_mode Lib "swedll32.dll" _
Alias "_swe_set_sid_mode@20" ( _
ByVal sid_mode As Long, _
ByVal t0 As Double, _
ByVal ayan_t0 As Double _
) As Long
Private Declare Function swe_set_sid_mode_d Lib "swedll32.dll" _
Alias "_swe_sid_mode_d@12" ( _
ByVal sid_mode As Long, _
ByRef t0 As Double, _
ByRef ayan_t0 As Double _
) As Long
Private Declare Function swe_set_topo Lib "swedll32.dll" _
Alias "_swe_set_topo@24" ( _
ByVal geolon As Double, _
ByVal geolat As Double, _
ByVal altitude As Double _
)
Private Declare Function swe_set_topo_d Lib "swedll32.dll" _
Alias "_swe_set_topo_d@12" ( _
ByRef geolon As Double, _
ByRef geolat As Double, _
ByRef altitude As Double _
)
Private Declare Sub swe_set_tid_acc Lib "swedll32.dll" _
Alias "_swe_set_tid_acc@8" ( _
ByVal X As Double _
)
Private Declare Function swe_set_tid_acc_d Lib "swedll32.dll" _
Alias "_swe_set_tid_acc_d@4" ( _
ByRef X As Double _
) As Long
Private Declare Function swe_sidtime0 Lib "swedll32.dll" _
Alias "_swe_sidtime0@24" ( _
ByVal tjd_ut As Double, _
ByVal ecl As Double, _
ByVal nut As Double _
) As Double
Private Declare Function swe_sidtime0_d Lib "swedll32.dll" _
Alias "_swe_sidtime0_d@16" ( _
ByRef tjd_ut As Double, _
ByRef ecl As Double, _
ByRef nut As Double, _
ByRef sidt As Double _
) As Long
Private Declare Function swe_sidtime Lib "swedll32.dll" _
Alias "_swe_sidtime@8" ( _
ByVal tjd_ut As Double _
) As Double
Private Declare Function swe_sidtime_d Lib "swedll32.dll" _
Alias "_swe_sidtime_d@8" ( _
ByRef tjd_ut As Double, _
ByRef sidt As Double _
) As Long
Private Declare Function swe_sol_eclipse_how Lib "swedll32.dll" _
Alias "_swe_sol_eclipse_how@24" ( _
ByVal tjd_ut As Double, _
ByVal ifl As Long, _
ByRef geopos As Double, _
ByRef attr As Double, _
ByVal serr As String _
) As Long
Private Declare Function swe_sol_eclipse_how_d Lib "swedll32.dll" _
Alias "_swe_sol_eclipse_how_d@20" ( _
ByRef tjd_ut As Double, _
ByVal ifl As Long, _
ByRef geopos As Double, _
ByRef attr As Double, _
ByVal serr As String _
) As Long
Private Declare Function swe_sol_eclipse_when_glob Lib "swedll32.dll" _
Alias "_swe_sol_eclipse_when_glob@28" ( _
ByVal tjd_start As Double, _
ByVal ifl As Long, _
ByVal ifltype As Long, _
ByRef tret As Double, _
ByVal backward As Long, _
ByVal serr As String _
) As Long
Private Declare Function swe_sol_eclipse_when_glob_d Lib "swedll32.dll" _
Alias "_swe_sol_eclipse_when_glob_d@24" ( _
ByRef tjd_start As Double, _
ByVal ifl As Long, _
ByVal ifltype As Long, _
ByRef tret As Double, _
ByVal backward As Long, _
ByVal serr As String _
) As Long
Private Declare Function swe_sol_eclipse_when_loc Lib "swedll32.dll" _
Alias "_swe_sol_eclipse_when_loc@32" ( _
ByVal tjd_start As Double, _
ByVal ifl As Long, _
ByRef tret As Double, _
ByRef attr As Double, _
ByVal backward As Long, _
ByVal serr As String _
) As Long
Private Declare Function swe_sol_eclipse_when_loc_d Lib "swedll32.dll" _
Alias "_swe_sol_eclipse_when_loc_d@28" ( _
ByRef tjd_start As Double, _
ByVal ifl As Long, _
ByRef tret As Double, _
ByRef attr As Double, _
ByVal backward As Long, _
ByVal serr As String _
) As Long
Private Declare Function swe_sol_eclipse_where Lib "swedll32.dll" _
Alias "_swe_sol_eclipse_where@24" ( _
ByVal tjd_ut As Double, _
ByVal ifl As Long, _
ByRef geopos As Double, _
ByRef attr As Double, _
ByVal serr As String _
) As Long
Private Declare Function swe_sol_eclipse_where_d Lib "swedll32.dll" _
Alias "_swe_sol_eclipse_where_d@20" ( _
ByRef tjd_ut As Double, _
ByVal ifl As Long, _
ByRef geopos As Double, _
ByRef attr As Double, _
ByVal serr As String _
) As Long
Private Declare Function swe_time_equ Lib "swedll32.dll" _
Alias "_swe_time_equ@16" ( _
ByVal tjd_ut As Double, _
ByRef E As Double, _
ByRef serr As String _
) As Long
Creo que todo lo que necesita hacer para su función es simplemente agregar PtrSafe: es decir, la primera línea de su primera función debería tener este aspecto:
Private Declare PtrSafe Function swe_azalt Lib "swedll32.dll" ......
Estoy bastante seguro de que no conseguirá que esta DLL de 32 bits funcione en Office 64Bit. El autor debe actualizar la DLL para que sea compatible con las versiones de Office de 64 bits.
Los cambios de código que ha encontrado y proporcionado en la pregunta se utilizan para convertir las llamadas a API que ya se han reescrito para Office 64Bit. (La mayoría de las API de Windows se han actualizado).
De: http://technet.microsoft.com/en-us/library/ee681792.aspx :
"Los controles ActiveX y las DLL de complemento (COM) (bibliotecas de enlace dinámico) que se escribieron para Office de 32 bits no funcionarán en un proceso de 64 bits".
Edición: Además de su comentario, he probado la versión DLL de 64 bits en Win 8 64 bits con Office 2010 64 bits. Debido a que está utilizando las Funciones definidas por el usuario llamadas desde la hoja de cálculo de Excel, no puede ver el error generado por Excel y acaba con el #VALUE
devuelto.
Si creamos un procedimiento personalizado dentro de VBA y probamos una de las funciones de DLL, vemos el error exacto lanzado. swe_day_of_week
una función simple de swe_day_of_week
que solo tiene un tiempo como entrada y me swe_day_of_week
el error Error Run-time error ''48'' File not found: swedll32.dll
.
Ahora tengo la DLL de 64 bits que ha suministrado en las ubicaciones correctas, por lo que debería encontrarse, lo que sugiere que tiene dependencias que no se pueden ubicar según https://.com/a/8607250/1733206
Tengo todos los marcos .NET instalados, lo que sería mi primera suposición, por lo que sin más información del autor podría ser difícil encontrar el problema.
Edit2: Y después de investigar un poco más, aparece que la versión de 64 bits que ha suministrado es en realidad una versión de 32 bits. De ahí el mensaje de error en la Oficina de 64 bits. Puede verificar esto intentando acceder a la versión ''64Bit'' en Office 32Bit.