ошибка времени выполнения при выполнении макроса в Excel 2010

Я получаю:

Ошибка времени выполнения «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"

Что я могу сделать?


person TheJoeIaut    schedule 08.05.2012    source источник
comment
Глупое предположение, но: включены ли макросы в этом экземпляре Excel?   -  person assylias    schedule 08.05.2012
comment
Да, макросы включены во всех случаях. Макрос действительно работает до этой определенной точки.   -  person TheJoeIaut    schedule 08.05.2012
comment
Вы пробовали использовать полное имя (например, Application.Run "'" & Makro_Path & Makro_Nam & "'!MakroIni")?   -  person assylias    schedule 08.05.2012
comment
Я пробовал, но все равно без разницы.   -  person TheJoeIaut    schedule 08.05.2012
comment
Я только что заметил, что эта проблема возникает в 64-битных установках. При запуске других макросов из старой книги я получаю сообщение об ошибке, что я должен запустить их в безопасном режиме.   -  person TheJoeIaut    schedule 08.05.2012
comment
Можете ли вы показать полный код того, как вы объявляете переменные и, наконец, запускаете макрос.   -  person Siddharth Rout    schedule 08.05.2012


Ответы (2)


На самом деле причиной был 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

Теперь вроде работает.

person TheJoeIaut    schedule 09.05.2012

В зависимости от того, что делает ваш макрос, очевидным ответом будет то, что вам нужно установить

ReadOnly:=True

to be

ReadOnly:=False

Чтобы ваш макрос мог вносить изменения в данные.

person hireSwish    schedule 08.05.2012
comment
Да, кажется очевидным, но проблема не в этом. Рабочий лист Macro.xlm не содержит данных. Он содержит только код, который используется во всех рабочих листах пользователя. - person TheJoeIaut; 08.05.2012