2013-09-27 4 views
5

После обновления с Excel 2010 до Excel 2013 я переместил пользовательскую надстройку (.xlam) в новый каталог Application.LibraryPath (C: \ Program Files \ Microsoft Office 15 \ корень \ office15 \ Library \ BTRTools). Существует немного кода, который запускает исполняемый файл (exe) (находится в подкаталоге надстройки). Однако, поскольку обновления/двигаться, я не получаю сообщение об ошибке:Ошибка Excel VBA с использованием WScript.Shell.Run

PrettyPrintXml.exe - Application Error

The application was unable to start correctly (0xc000007b). Click OK to close the application.

Я, очевидно, довольно уверен, что права доступа к файлам. Я явно добавил себе разрешения с полными правами на папку \ Library (и все подмножества). Заметьте, что я должен был сделать это даже с Excel 2010 (папка в C: \ Program Files (x86) \ Microsoft Office \ Office14 \ Library), чтобы все работало.

Однако, после всего этого, я все еще застреваю и не могу запустить exe-файл. Любые идеи/предложения о том, как сделать эту работу?

код является довольно стандартным:

Public Sub RunShellExecute(sFile As String, Optional params As String = "", Optional wait As Boolean = False) 

Dim wsh As Object: Set wsh = VBA.CreateObject("WScript.Shell") 
Dim waitOnReturn As Boolean: waitOnReturn = wait 
Dim windowStyle As Integer: windowStyle = 1 
Dim exe As String: exe = IIf(Left(sFile, 1) <> """", """" & sFile & """", sFile) 
Dim exeParams As String: exeParams = IIf(params <> "", " " & params, "") 
Dim errorCode As Integer: errorCode = wsh.Run(exe & exeParams, windowStyle, waitOnReturn) 

If errorCode = 0 Then 
    '// MsgBox "Done! No error to report." 
Else 
    MsgBox "Program exited with error code " & errorCode & "." 
End If 

End Sub 
+0

'0xc000007b' является' STATUS_INVALID_IMAGE_FORMAT' ошибкой. Это может быть проблема с 32-битной 64-разрядной dll, а не проблема с разрешениями. –

+0

@NateHekman Не уверен в этом 100%. Если я переведу весь каталог надстройки в прежнее место (..Office14 \ Library), все будет работать. Проблема с этим заключается в том, что «автоматическое обновление ссылок» не работает. B/c Excel ищет только надстройки в каталогах LibraryPath и UserLibraryPath. Вы думаете, что это может быть потому, что хотя моя установка Excel 32-разрядная, она сделала свой каталог LibraryPath c: \ Program Files \ вместо c: \ Program Files (x86)? Я почти уверен, что попробовал UserLibraryPath и получил тот же результат, но сегодня я проверю это. – Terry

ответ

2

Я знаю, что ваш вопрос: «Почему это не работает», но я думал, что вы могли бы быть заинтересованы в альтернативном решении: There is a native VBA PrettyPrintXML. Вам нужно добавить ссылку на библиотеку MSXML в проекте VBA, нажав «Инструменты» ---> «Ссылки ...», а затем установите флажок рядом с Microsoft XML, v6.0 (или любая версия включена в вашу версию Office/Windows).

0

Вы должны использовать путь без пробелов в нем, что-то простое, как «C: \ BTRTools». Тогда это должно сработать.

+0

Как я уже говорил выше, мне нужно добавить админ в «библиотеку» Excel, поэтому я не могу изменить его на ваш предложенный путь. – Terry

1

Пожалуйста, измените название вопроса, потому что Excel VBA является, способным использовать WScript.Shell.Run, иначе вы не получите свою ошибку.

Что касается актуальной проблемы, это выглядит как 32-разрядная/64-разрядная проблема. Изучите, подходит ли ваша программа для вашей системы и пытается ли она загрузить нужные DLL.

Проблема не в правах доступа к файлам, тогда вы получите другой код состояния.

+0

Я смущен тем, что вы подразумеваете под «32-разрядной/64-разрядной проблемой» ... как я упоминал ранее, если я поместил всю папку (с моими * .xlam и зависимыми файлами) по другому пути, все будет работать. Однако это невозможно из-за других последствий с Excel, особенно если ваш * .xlam не находится в папке «Библиотека», Excel будет разорвать ссылку на вашу надстройку каждый раз, когда вы откроете файл на другой машина. Если все пользователи надстройки устанавливают его под/Library, даже если пути не совпадают между пользователями, использующими файл, ссылка остается нетронутой. Какую 32/64 бит вещь вы предлагаете мне проверить/подтвердить? – Terry

Смежные вопросы