-1

小さな C# アプリをヘルパー ツールとしてデータベースにリンクするために、VBA for MS Access を使用しています。ShellAndWait ユーティリティやそのページの別のユーティリティなど、stackoverflow 自体からいくつかの異なるアイデアを試しました。

フォームにボタンがあります。このボタンをクリックすると、現在保存している別のアプリケーションが実行されます%APPDATA%/program/

これは現在アクティブなコードです:

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 モジュールと別の同様のモジュールの両方で元のシェルを変更しました。アプリケーションが起動しないという点では、これらのオプションのどちらも同じように機能しません。

「ファイル」が正しいことを再確認しました( を指していますC:\Users\Me\AppData\Roaming\program\component_import.exe)。アプリが正しい場所にあることを再確認しました。

ファイルエクスプローラーからダブルクリックすると問題なく動作します。Run-time error '53': File not found.MS Access から実行しようとするたびに表示されます。

助言がありますか?

編集:余談ですが、パス自体にはスペースが含まれていません。

編集:いくつかの追加コードを追加しました。最初のペーストビンへのリンク: RunApplication pastebin 2 番目のペーストビンへのリンク: ShellAndWait pastebin

4

1 に答える 1

0

シェル コマンドを使用しているときに、スペースを含むフォルダー名がエラーをスローすることがあることがわかりました。

例: C:\My Folder\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
于 2014-02-21T02:43:39.123 に答える