プロが教えるわが家の防犯対策術!

VBAプログラムで詰まってしまったので質問します。

perlにて自作したexeファイルをexcelのボタンから開きたいのですが、
実行の途中で止まってしまうようなのです。

止まってしまうexeファイルは、自分でダブルクリックして起動すると正常動作する為、
原因がわかりません。

'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 nShowCmd As Long) As Long

'lRet = ShellExecute(0, "open", sPASS, vbNull, vbNull, SW_NORMAL)

'With CreateObject("Wscript.Shell")
' .Run "***********************", 5
'End With

'MsgBox "vbCrLf & CurDir & vbCrLf"


'Shell "**********************", 1


'With CreateObject("Wscript.Shell")
' .Run "..************", 5
'End With
'Dim ret As Long

'With CreateObject("Wscript.Shell")
' ret = .Run("*************", 7, True)
'End With

'If ret <> 0 Then MsgBox "失敗しました": Exit Sub

'Shell "*****************************"
'Dim WSH
'Set WSH = CreateObject("Wscript.Shell")
'WSH.Run "*************************", 3
'Set WSH = Nothing
'Dim file As Variant

'file = Application.GetOpenFilename
'file = "****************** " + file

'Shell (file)

'On Error GoTo errline

'ret = ShellExecute(0, "open", "***************", "", Path, 1)
'errline:
'Err = 0

'Dim ファイルのあるフォルダ As String
'Dim ファイルの名前 As String
'Dim プログラムのパス As String
'Dim 拡張子 As String

'ファイルのあるフォルダ = Worksheets("Sheet1").Cells(1, 1)
'ファイルの名前 = Worksheets("Sheet1").Cells(2, 1)
'プログラムのパス = Worksheets("Sheet1").Cells(3, 1)
'拡張子 = Worksheets("Sheet1").Cells(4, 1)

'Dim ファイルのパス As String
'ファイルのパス = ファイルのあるフォルダ & "\" & ファイルの名前 & "." & 拡張子


'Dim AppFp As String
'AppFp = プログラムのパス & " """ & ファイルのパス & """"

'前の""はスペース空ける
'「"」が特殊文字であるため、スキップするための文字(エスケープ文字)「"」を前につける

'Dim a As Integer
'a = Shell(AppFp, vbNormalFocus)

'上記プログラム全部×

Const vbHide = 0 'ウィンドウを非表示
Const vbNormalFocus = 1 '通常のウィンドウ、かつ最前面のウィンドウ
Const vbMinimizedFocus = 2 '最小化、かつ最前面のウィンドウ
Const vbMaximizedFocus = 3 '最大化、かつ最前面のウィンドウ
Const vbNormalNoFocus = 4 '通常のウィンドウ、ただし、最前面にはならない
Const vbMinimizedNoFocus = 6 '最小化、ただし、最前面にはならない


'Dim objWShell
'Set objWShell = CreateObject("WScript.Shell")
'できたが×途中で終了している模様
'フォルダ「C:\happy」を開きます
'objWShell.Run "rundll32.exe url.dll" & _
' ",**************", vbNormalFocus, False
'WScript.Echo "**********を実行しました!"
'Set objWShell = Nothing


どうにかVBAから起動したいのですが、方法は無いでしょうか??

A 回答 (3件)

「どの行で」「どんなエラーが表示される」を補足してください。



> 自分でダブルクリックして起動すると正常動作する

ShellExecuteの3番目の引数[sPASS]の値はいつ定まるの?
止まってしまうexeファイルは、環境変数PATHが通してあるフォルダにありますか?無いでしょ?

この回答への補足

返信ありがとうございます。

VBAのプログラムの方は全くエラーは出ません。
exeの方もエラーが出ません。

ダウンロードしたいデータが、ダウンロードできていないことが問題なのです。
一応exeは走っている(黒いdos画面ウィンドウが表示される)ようなのですが、エラーも出ず、終了します。

VBAにてexeを起動するとダウンロードできません。
自分でwindowsのexeをダブルクリックして起動すると正常動作します。

今からpathの方を調べてみます。

補足日時:2012/08/20 10:37
    • good
    • 0

perl は全くの門外漢ですけど


>自分でダブルクリックして起動すると正常動作する為、
なら、立ち上げるだけなら
shell("explorer.exe そのexeファイル?のフルパス") で出来そうな気がします。

この回答への補足

返信ありがとうございます。

exeが立ち上がることは立ち上がるのですが、正常動作しないことが問題なのです。
データをダウンロードするプログラムなのですが、excelVBA上のshellで動かすと、データがダウンロードできません。

ウィンドウズで普通にダブルクリックすると正常動作します。

補足日時:2012/08/20 11:25
    • good
    • 0

「自分でダブルクリックして起動すると正常動作する」ということから考えられるのは、カレントディレクトリの問題ではないでしょうか。


そのperlで作られたexeプログラムは同じフォルダにある何かを利用してはいませんか?

プログラム実行前にカレントディレクトリをそのexeがあるフォルダに変更してみましょう。

ChDrive exeのあるドライブ
ChDir exeのあるパス
'exe実行
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!