2012-05-03 3 views
1

작은 C# 응용 프로그램을 도우미 도구로 데이터베이스에 연결하기 위해 VBA를 사용하고 있습니다. ShellAndWait 유틸리티와 다른 페이지에서 stackoverflow 자체에서 몇 가지 다른 아이디어를 시도했다.VBA 셸 명령은 항상 "파일을 찾을 수 없음"을 반환합니다.

양식에 버튼이 있습니다. 나는 ShellAndWait 모듈 모두 원래의 쉘을 변경했다

Private Sub BtnImport_Click() 

Dim file As String 
Dim hProcess as Long 

file = Environ("APPDATA") & "\program\component_import.exe" 
'This is the standard version, which apparently does nothing at this time. 
hProcess = Shell(file, vbNormalFocus) 

'This is the RunApplication version I got from here earlier. It ends 
'with "Successfully returned -532462766 
import_funcs.RunApplication(file) 

'This is the ShellAndWait version, which gives me a "File not Found" error 
import_funcs.ShellAndWait(file, 0, vbNormalFocus, AbandonWait) 

End Sub 

:이 버튼을 클릭하면, 그것은 내가 현재

%APPDATA%/program/에 저장하고 다른 응용 프로그램을 실행해야 할 것은 현재 활성화 된 코드입니다 다른 비슷한 모듈. 이러한 옵션 중 어느 것도 내 응용 프로그램이 시작되지 않는다고해서 다르게 작동하지 않습니다.

"파일"이 올바른지 다시 확인했습니다 (이 점은 C:\Users\Me\AppData\Roaming\program\component_import.exe을 가리킴). 내 앱이 올바른 위치에 있는지 다시 확인했습니다.

파일 탐색기에서 두 번 클릭하면 정상적으로 실행됩니다. 내가 MS Access에서 실행하려고 할 때마다 Run-time error '53': File not found.라고 표시됩니다.

제안 사항?

편집 : 제쳐두고, 경로 자체에는 공백이 없습니다.

편집 : 일부 추가 코드가 추가되었습니다. 첫째 페이스트 빈에 링크 : 초 페이스트 빈에 RunApplication pastebin 링크 : 쉘 명령을 사용할 때 ShellAndWait pastebin

+2

똑같은 사본입니까? 귀하의 파일 이름은'''것으로 나타나고'''을 (를) 잃어 버렸습니다 . –

+0

Notepad.exe로 코드를 시도했는데 VBA를 통해 APPDATA에서 실행 파일을 시작할 수 없습니다 (파일 탐색기를 통해서도 안됨) - Win7 64bit를 전체 관리자로 - – Steve

+0

@Andrew Leach : 예, 필자가 테스트 한 내용에서 추가 주석이 있기 때문에 복사하지 않았습니다. 스티브 : 파일 탐색기에서 APPDATA를 실행하면 실제로 % APPDATA %로 실행해야합니다. 환경 변수입니다. –

답변

0

내가 공백 가끔 폴더 이름을 발견 오류가 발생합니다.

예 : C : \ 내 폴더 \의 appl.exe

가합니다 C : \ MyFolder에 \ 또한

유효한 경로를 확인할 수 있습니다

appl.exe을 : 은 다음 코드는 폴더를 확인 chrome.exe의이 거주하고 거기에서 인자로 URL을 전달하여 www.google.com을 호출 여기서

Public Sub Display_Google() 
    Dim chromePath As String 
    chromePath = "C:\Program Files\Google\Chrome\Application\chrome.exe" 

    If FileExists(chromePath) Then 
    Shell (chromePath & " -url" & " " & "www.google.com"), vbMaximizedFocus 
    Else 

    chromePath = "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" 
    Shell (chromePath & " -url" & " " & "www.google.com"), vbMaximizedFocus 
    End If 
End Sub 

Public Function FileExists(ByVal FileName As String) As Boolean 
    On Error Resume Next 
    FileExists = Not CBool(GetAttr(FileName) And (vbDirectory Or vbVolume)) 
    On Error GoTo 0 
End Function 
관련 문제