Excel VBA를 통해 셸 개체 / 명령 실행 중 오류 발생
VB 코드를 통해 C++ 프로그램을 실행하고 있는데 로컬 컴퓨터와 비교하여 공유 드라이브에서 코드를 실행하는 데 문제가 있습니다.제 프로그램은 일련의 가정을 생성한 다음 C++ 모델을 통해 이러한 가정을 실행한 다음 모델 출력을 선택하여 VB 워크북에서 볼 수 있도록 준비합니다.
C 드라이브의 로컬 디렉토리에 워크북을 저장하면 아래 코드가 정상적으로 작동하지만 회사 공유 드라이브에 업로드하면 다음 오류가 발생합니다.
"Run-time error '-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"
무슨 생각 있어요?
오류는 공백이 있는 디렉토리에서 발생합니다.
C:\Users\myname\this is my folder\myexe.exe
간단한 해결 방법으로 효과를 얻을 수 있습니다.
wsh.Run(Chr(34) & YourFullPathDirectoryWithSpaces & "\myexe.exe" & Chr(34))
Chr(34)
두 개의 따옴표입니다.
에 문제가 있었습니다..Run
두 줄짜리 특성을 취했습니다.
Excel 2010/Win32에서 테스트했습니다.
동일한 문제, 대체 솔루션이 있는 경우:
wsh.CurrentDirectory = exePath
wsh.Run(exeName & " " & cmdArgs, windowStyle, waitOnReturn)
셸의 CurrentDirectory 속성을 설정하는 키포인트
전체적으로 공간을 포함한 디렉토리 구조 때문에 문제가 발생한다고 판단했습니다.로컬 대 공유 디렉토리와 관련된 문제는 없는 것 같습니다.
만약 누군가가 그 안에 공간이 있는 디렉토리를 쉽게 둘러볼 수 있는 해결책을 알고 있다면, 저에게 알려주세요!
실행 중인 프로그램/스크립트에 둘 이상의 인수가 전달될 때만 문제가 발생하는 것 같습니다.
두 번째 인수에 공백이 있는 파일 경로가 포함되어 있으면 필요한 """"이 있는 경우에도 오류가 발생합니다.
이 시점에서 해결책을 찾을 수 없습니다...
경로에 공백이 있을 때 세 개의 따옴표를 설명하는 이 훌륭한 참조를 찾았습니다.아래 부분은 아래로 내리거나 움직일 경우를 대비한 부분입니다.
만약 당신이 파일을 열고 싶었다면
c:\My Files\Text File.txt
그리고 당신의 껍질은 이것을 감싸도록 요구했습니다.""
, 그러면 당신은 이렇게 줄을 쓸 겁니다.
PID = Shell("notepad ""c:\My Files\Text File.txt""", vbNormalFocus)
실제 명령/스크립트 이름에 대해 지정해야 하는 경로도 마찬가지입니다.이 예제에서는 배치 파일(TextParser.bat)을 호출하여 텍스트 파일(TextFile.txt)을 처리합니다.
PID = Shell("""c:\My Scripts\Text Parser.bat"" ""c:\My Files\Text File.txt""", vbNormalFocus)
그 모든 것
"""
조금 이상해 보이지만 제가 설명을 해드릴게요.처음과 마지막"
호출할 프로그램을 지정하는 문자열의 시작과 끝을 표시합니다. 여기에는 사용할 매개 변수, 스위치 및 파일이 포함됩니다.
"""c:\My Scripts\Text Parser.bat"" ""c:\My Files\Text File.txt"""
면을 하면."
우리에게는 두 개의 개별 문자열로 구성된 프로그램 문자열 자체가 남게 되는데, 하나는 path\batch 파일을 위한 것이고, 다른 하나는 batch 파일이 사용할 path\file을 위한 것입니다.
""c:\My Scripts\Text Parser.bat"" ""c:\My Files\Text File.txt""
게배중가f중e 중 하나."
서로는은어은는서어s로tsdoen .
"c:\My Scripts\Text Parser.bat" "c:\My Files\Text File.txt"
일반적으로 구분되는 두 개의 문자열처럼 보입니다.
이 스레드는 오래되었지만 같은 문제를 우연히 발견하고 해결책을 생각해 냈습니다.
해당 명령을 C의 배치 파일에 넣을 코드를 작성합니다.\Temp...Shell or Wscript 그런 식으로.셸은 소화 가능한 "C:\Temp\thing.bat"을 인수로 사용합니다.
저한테 매력적으로 작용했습니다.:)
언급URL : https://stackoverflow.com/questions/21267283/error-running-shell-object-commands-through-excel-vba
'prosource' 카테고리의 다른 글
구글 크롬, 위지위그 자바스크립트 탈출 (0) | 2023.09.15 |
---|---|
'@-Keyframe' CSS 애니메이션을 동적으로 만드는 방법은? (0) | 2023.09.15 |
성능 테스트 sql 쿼리 (0) | 2023.09.10 |
로컬 파일에서 XSL 변환을 수행하도록 Chrome을 만들 수 있습니까? (0) | 2023.09.10 |
Pandas DataFrame의 구조(데이터가 아닌)만 복사할 수 있는 방법이 있습니까? (0) | 2023.09.10 |