运行时错误在Excel 2010中执行macros

我收到:

运行时错误“1004”:无法运行macrosMakros.xlm!MakroIni。 macros可能不在此工作簿中可用或所有macros可能被禁用。

…在Excel 2010的某些实例中运行macros时。在某些Excel 2010安装和Excel 2003中,它工作正常。

有2个工作簿参与:Macro.xlm和Username.xls。 这两个文件都存储在远程服务器上。

macros执行时崩溃:

Workbooks.Open Makro_Path & Makro_Nam, ReadOnly:=True Application.Run Makro_Nam & "!MakroIni", WbTyp 

第一行是正确执行的,所有的macros都是可见的。 Makro_Nam被定义为:

 Public Const Makro_Nam As String = "Makros.xlm" 

我能做什么?

其实原因是Excel 64位。

Makro.xlm工作表包含这个函数定义:

 Private Declare Function FindFirstFile Lib "kernel32.dll" Alias "FindFirstFileA" ( _ ByVal lpFileName As String, _ ByRef lpFindFileData As WIN32_FIND_DATA) As Long Private Declare Function FindNextFile Lib "kernel32.dll" Alias "FindNextFileA" ( _ ByVal hFindFile As Long, _ ByRef lpFindFileData As WIN32_FIND_DATA) As Long Private Declare Function FindClose Lib "kernel32.dll" ( _ ByVal hFindFile As Long) As Long Private Declare Function FileTimeToLocalFileTime Lib "kernel32.dll" ( _ ByRef lpFileTime As FILETIME, _ ByRef lpLocalFileTime As FILETIME) As Long Private Declare Function FileTimeToSystemTime Lib "kernel32.dll" ( _ ByRef lpFileTime As FILETIME, _ ByRef lpSystemTime As SYSTEMTIME) As Long 

我把它们改成了ptrsafe:

 Private Declare PtrSafe Function FindFirstFile Lib "kernel32.dll" Alias "FindFirstFileA" ( _ ByVal lpFileName As String, _ ByRef lpFindFileData As WIN32_FIND_DATA) As Long Private Declare PtrSafe Function FindNextFile Lib "kernel32.dll" Alias "FindNextFileA" ( _ ByVal hFindFile As Long, _ ByRef lpFindFileData As WIN32_FIND_DATA) As Long Private Declare PtrSafe Function FindClose Lib "kernel32.dll" ( _ ByVal hFindFile As Long) As Long Private Declare PtrSafe Function FileTimeToLocalFileTime Lib "kernel32.dll" ( _ ByRef lpFileTime As FILETIME, _ ByRef lpLocalFileTime As FILETIME) As Long Private Declare PtrSafe Function FileTimeToSystemTime Lib "kernel32.dll" ( _ ByRef lpFileTime As FILETIME, _ ByRef lpSystemTime As SYSTEMTIME) As Long 

现在看来工作。

根据你的macros做什么,显而易见的答案似乎是你需要设置

 ReadOnly:=True 

成为

 ReadOnly:=False 

这样你的macros可以对数据进行更改。