2014-01-21 2 views
6

Я запускаю программу на C++ через свой код VB, и мне не удается запустить мой код на общем диске и на локальном компьютере. Моя программа генерирует набор предположений, затем запускает эти предположения с помощью модели C++, затем берет вывод модели и подготавливает ее для просмотра в книге VB.Ошибка при запуске объекта/команд оболочки через Excel VBA

ниже код работает прекрасно, когда у меня есть книги, сохраненные в локальном каталоге на моем диске С, но когда я загрузить его на общий диск моей компании, я получаю следующее сообщение об ошибке:

«Ошибка выполнения '-2147024894 (80070002)': Метод 'Run' объекта 'IWshShell3' не удалось»

код:

'--------------------------------------------------------- 
' SECTION III - RUN THE MODEL AS C++ EXECUTABLE 
'--------------------------------------------------------- 
Dim ModelDirectoryPath As String 
Dim ModelExecutableName As String 
Dim ModelFullString As String 

' First build the command string 
Application.StatusBar = "Running C++ Model..." 

ModelDirectoryPath = Range("ModelFilePath").value 
ModelExecutableName = Range("ModelFileName").value 
ModelFullString = ModelDirectoryPath & ModelExecutableName 
ModelFullString = ModelFullString & " " & ScenarioCounter & " " & NumDeals _ 
        & " " & ModelRunTimeStamp & " " & Settle_YYMMDD 

' Run the program 
Dim wsh As Object 
Set wsh = VBA.CreateObject("WScript.Shell") 
Dim waitOnReturn As Boolean: waitOnReturn = True 
Dim windowStyle As Integer: windowStyle = 1 
Dim errorCode As Integer 

errorCode = wsh.Run(ModelFullString, windowStyle, waitOnReturn) 

If errorCode = 0 Then 
    ' MsgBox "C++ Model Completed without Errors." 
Else 
    MsgBox "Program exited with error code " & errorCode & "." 
End If 

Application.StatusBar = "C++ Model Complete" 

Любые мысли?

+0

Это дикая догадка, но ... Прокомментируйте эту строку: 'Set WSH = VBA.CreateObject ("WScript.Shell") '. Замените 'wsh.Run' только на' Shell'. Что происходит? – Manhattan

+0

Это работает - это на самом деле то, что я делаю в настоящее время как работа. Проблема в том, что мне нужна программа для обеспечения обратной связи, когда модель завершила работу (поэтому я могу знать, когда запускать код генерации вывода) ... – brentf

+0

Я заметил, что мой путь к каталогу в «общей» версии имеет пространство в одном из имен папок - может ли это отбросить вещи? – brentf

ответ

0

Я определил, что проблема возникает полностью из-за структуры каталогов, включая пробел. Кажется, что не существует какой-либо проблемы, связанной с локальным или общим каталогом.

Если кто-то знает легкое решение обойти каталог с пространством в нем, сообщите мне!

0

Я заметил, что проблема только возникает, когда к запущенной программе/сценарию передается более одного аргумента.

Если второй аргумент содержит путь к файлу с пробелом, даже если присутствуют необходимые "" "", возникает ошибка.

Не удается найти решение в этой точке ...

8

Ошибка делает приходят из каталога, имеющего место в нем:

C:\Users\myname\this is my folder\myexe.exe 

Простое решение делает трюк:

wsh.Run(Chr(34) & YourFullPathDirectoryWithSpaces & "\myexe.exe" & Chr(34)) 

Chr(34) - двойная кавычка.

Существует проблема с .Run, взяв двухстрочный объект.

Протестировано в Excel 2010/Win32.

+0

Мой формат стал странным, не должно быть подчеркивания до и после Chr (34). – sobersoup

1

была такая же проблема, альтернативное решение:

wsh.CurrentDirectory = exePath 
wsh.Run(exeName & " " & cmdArgs, windowStyle, waitOnReturn) 

Ключевой момент в том, чтобы установить CurrentDirectory свойство оболочки

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