2012-05-03 30 views
1

小さなC#アプリケーションをヘルパーツールとしてデータベースにリンクするには、VBAをMS Accessに使用しています。私はShellAndWaitユーティリティとそのページの別のものを含むstackoverflow自体からいくつかの異なるアイデアを試しました。VBA Shellコマンドは常に「ファイルが見つかりません」を返します

私はフォーム上にボタンを持っています。

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 

私はShellAndWaitモジュールの両方のために、オリジナルのシェルを変更した:あなたは、このボタンをクリックすると、それは%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 
関連する問題