1

我收到:

运行时错误“1004”:无法运行宏 Makros.xlm!MakroIni。该工作簿中的宏可能不可用,或者所有宏都可能被禁用。

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

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

宏在执行时崩溃:

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

第一行正确执行,所有宏都可见。Makro_Nam 定义为:

Public Const Makro_Nam As String = "Makros.xlm"

我能做些什么?

4

2 回答 2

1

实际上原因是 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

现在它似乎工作了。

于 2012-05-09T08:07:44.337 回答
0

根据您的宏的作用,显而易见的答案似乎是您需要设置

ReadOnly:=True

成为

ReadOnly:=False

这样您的宏就可以对数据进行更改。

于 2012-05-08T10:54:44.250 回答