web-dev-qa-db-ja.com

VBA:MS Accessから別のアプリケーションを実行する方法

私はこの問題を理解しようと試みてきましたが、どこにも問題の解決策が見つからないようです。最初の部分は次のとおりです。 VBAシェルコマンドは常に "ファイルが見つかりません"を返します その質問では、なんらかの理由で、おそらくセキュリティ設定で%APPDATA%フォルダーにアプリケーションが見つかりませんでした。

その後、インポートツールを、データベースが格納されているのと同じディレクトリに移動しました。正しく動作することを期待しています。

私の目的は、MS Accessのボタンをクリックして、インポートツールを直接実行することです。現在、ツールを保持するフォルダーを開いています。これは、管理者権限を持つ開発マシンで機能しますが、管理者特権がない他のマシンでは機能しません。現在、コードは次のようになっています。

Dim hProcess as Long
Dim myPath as String
Dim ex as String

ex = "C:\WINDOWS\Explorer.exe "
myPath = Environ("ProgramFiles(x86)") & "\mytool\"

hProcess = Shell(ex & myPath, vbNormalFocus)

これにより、ファイルを保持するフォルダを開くことができますが、完全な管理者権限を持つマシンアカウントでのみ可能です。完全な権限よりも少ない権限を持つマシンアカウントでこれを実行すると、何も実行されません。

私は以下も試しました:

Dim hProcess As Long
Dim myPath as String

myPath = Environ("ProgramFiles(x86)") & "\mytool\mytool.exe"
hProcess = Shell(myPath, vbNormalFocus)

このセクションは、プロセスマネージャーを見るとアプリケーション「mytool.exe」をロードするという点で機能しているようです。ただし、数秒後(たぶん20)に、アプリケーション「mytool.exe」が動作を停止したことを示すダイアログが表示されます。

ここで注意すべき点の1つは、開発マシンに対する管理者権限を持っていますが、ホームマシンに対するすべての権限を持っているということです。私のホームマシンでは、この2番目のコードはまったく問題なく動作します。私の開発マシンではクラッシュしますが、ユーザーが制限されたマシンでは何もしません。

管理者権限よりも少ない権限を使用しながら、MS Accessからこのアプリケーションを開く方法について何か提案はありますか?アプリケーションを直接実行するか、少なくともアプリケーションが存在するフォルダを開くかのいずれかです。

ありがとう!

追伸私は、stackoverflowにあるShellAndWaitとRunApplicationコードの両方を試しましたが、どちらもこのインスタンスでは機能しません。

12
Jim P

VBAで何かを実行する必要があるときは、常にWindows APIのShellExecuteを使用します。
私の知る限り、完全な権限のないマシンでも動作します。

例:

Declare Function ShellExecute Lib "Shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, _
    ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, _
    ByVal lpDirectory As String, ByVal lpnShowCmd As Long) As Long


Public Sub ShellEx(ByVal Path As String, Optional ByVal Parameters As String, Optional ByVal HideWindow As Boolean)

    If Dir(Path) > "" Then
        ShellExecute 0, "open", Path, Parameters, "", IIf(HideWindow, 0, 1)
    End If

End Sub

これで、ShellExを呼び出してほとんどすべてを実行できます。

'run executable
ShellEx "c:\mytool.exe"

'open file with default app
ShellEx "c:\someimage.jpg"

'open Explorer window
ShellEx "c:\"

ShellExにも2つのオプションのパラメーターがあることに注意してください。
上記の例ではこれを示していませんが、次のことができます。

  • 実行可能ファイルにパラメーターを渡す
  • 呼び出された実行ファイルのウィンドウを隠す
4

このリンクをたどる

MS Access:Access 2003/XP/2000/97からアプリケーションを起動

これは、MS Accessでアプリケーションを実行する例です

Private Sub Command1_Click()
Dim myPath As String
myPath = "C:\Program Files\mytool\mytool.exe"
Call Shell(myPath , 1)
End Sub

それがあなたの役に立てば幸いです

2
ajokar

http://www.mombu.com/Microsoft/scripting-wsh/t-Vista-uac-problem-with-wscriptshell-run-method-1508617.html をいじるだけです。私はこれをWindows 7の家庭用PCで試しました。

Set objShell = CreateObject("Shell.Application")
myPath = Environ("ProgramFiles(x86)") & "\mytool"
Set objFolder = objShell.Namespace(myPath)
Set objFolderItem = objFolder.ParseName("mytool.exe")
objFolderItem.InvokeVerb "runas"

それはあなたにいくつかのアイデアを与えるかもしれません。

1
Fionnuala

小切手

Shell szFileName, vbNormalFocus

他のいくつかの実行可能ファイルと。ツールに問題がある可能性があります。

0
MaxD