Excel VBA代码:x64版本编译错误(需要'PtrSafe'属性)

我正在使用Win8 x64 + Office 2013 x64。

我的问题:

我有一个Excel文件,其中有一些模块,并在Office(Excel)x86中完美地工作。 它使用瑞士的Ephemeris文件( swedll32.dll )做了很多天文计算。

但是,当我尝试在Excel x64上运行它时,尽快打开它,VBA编辑器启动并出现以下错误:

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. 

正如我上面所说,它只适用于32位办公室(Excel),但它不会在我的x64 Excel工作。但是,似乎有一个解决办法,但我太新手得到它。

然而,在VBA中,我不是很好,有几个网站提出,对于64位的办公室(Excel),我们应该修改(对于每个声明)代码类似的东西:

  • 原始语句:私有声明函数
  • 修改后的声明:私人声明PtrSafe函数

不幸的是,在每个地方添加“ PtrSafe ”之后,尽pipeVBA错误已经停止,但是这些值在单元格中没有正确显示/计算。

从微软的VBA的64位上看来,我们似乎也需要修改一些数据types,例如:

  • 长→到→LongPtr
  • LongPtr→至→LongLong
  • 和一些“长”应该保持不变,取决于他们做什么。

这个网站(在“哪些Longs应该成为LongPtr?”)下给出了一条线索,关于如何知道哪一个要修改。

我不明白这件事情,也不知道在Office(Excel)x64中应该做些什么才能做到这一点。 有人很擅长这个,请帮助我。 请。

注意:

  • 只有以红色出现的声明表明它们包含错误的声明已经倾倒在这里。 代码的其余部分没有粘贴在这里,因为它们看起来很好(绿色)。 如果你想看看这个文件,可以在这里下载这个文件: http : //bit.ly/Z8Kqm9
  • 为使Excel文件在您的计算机上正常工作,请确保“swedll32.dll”和“JCalc Ver 0.2d.xls”在解压缩之后位于相同的文件夹中。

模块名称中的问题: 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 

我想所有你需要做的function只是添加PtrSafe:即你的第一个函数的第一行应该是这样的:

 私人声明PtrSafe函数swe_azalt Lib“swedll32.dll”...... 

我很确定你不会得到这个32Bit DLL在Office 64Bit中的工作。 作者需要更新DLL以与Office的64位版本兼容。

您在问题中find并提供的代码更改用于将调用转换为已为Office 64Bit重写的API。 (大多数Windows API已被更新。)

来自: http : //technet.microsoft.com/en-us/library/ee681792.aspx :

“为32位Office编写的ActiveX控件和加载项(COM)DLL(dynamic链接库)在64位过程中不起作用。

编辑:进一步您的评论,我已经尝试了与Office 2010 64位的Win 8 64位的64位DLL版本。 由于您正在使用Excel工作表中调用的用户定义函数,因此无法看到Excel引发的错误,最后返回#VALUE

如果我们在VBA中创build一个自定义过程并尝试DLL函数之一,我们会看到引发的确切错误。 我尝试了一个简单的函数swe_day_of_week ,只是有一个时间作为input,我得到错误Run-time error '48' File not found: swedll32.dll

现在我有在正确的位置提供的64位DLL,所以应该find它表明它有依赖不能根据https://stackoverflow.com/a/8607250/1733206

我已经安装了所有的.NET框架,这将是我的第一个猜测,所以没有作者的进一步信息,可能很难find问题。

编辑2:经过多一点调查,它出现了你提供的64位版本实际上是一个32位版本。 因此64Bit Office上的错误信息。 您可以通过尝试访问Office 32Bit中的“64位”版本来检查此问题。