• ベストアンサー

ShellExecuteについて質問です。

ShellExecuteについて質問です。 ShellExecuteで関連づけられている画像ビューワを起動させたいと考えています。 (自分のマシンの場合、画像とFAXビューワが立ち上がります。) 画像はネットワークディスク上にあります。 以下コードです。 sPASS = ”画像のフルパス" lRet = ShellExecute(0, "open", sPASS, vbNull, vbNull, SW_NORMAL) しかし、ネットワーク上の他のマシンに画像ビューワが起動しないものがあります。 動作環境はAccess2000で、VBAで構築しています。 調べた結果、C:\WINDOWS\system32\shell32.dllは入っていました。 テスト結果は3台中、1台が起動しません。 何が原因しているのでしょうか? アドバイスよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

以前、Shellについて回等したことがあります。 http://okwave.jp/qa/q5797216.html (1) Nullを""に変更したらどうなりますか。 上記の場合、このあと""を Null に 変更すると機能しなかったということ が後の質問でありました。 (2) 似た名前の他のファイルが同じディレクトリ に存在していませんか。abcというフォルダ とabc.jpegというファイルなどの存在。 (3) その他はshell dllのバージョン等ですが。 それ以外はネットワークの問題もあるかも しれません。権限等。

abuhiro
質問者

お礼

非常に参考になりました。 shell dllにバージョンがあるのですね。 (3)が一番怪しいと思います。 調査後にまた報告いたします。 ありがとうございました。

関連するQ&A

  • AccessVBA ShellExecuteAについて質問です。

    AccessVBA ShellExecuteAについて質問です。 下記コードでボタンをクリックすると、画像を入れ替える処理を与えています。 Private Sub View1_Click() With Me Dim ePASS As String sPASS = 画像のフルパス lRet = ShellExecute(0, "open", sPASS, vbNull, vbNull, SW_NORMAL) End With End Sub 'APIの定義 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 上記コードが自分のマシンでは起動するのですが、他のマシンでは起動しません。 Accessは両マシン共に、2000です。 ビューワはWindowsPicture and Fax ビューワです。 原因究明のアドバイスよろしくお願いします。 出来ればソースもあるとありがたいです。

  • VBでShell○なのにShellExecute×

    http://support.microsoft.com/kb/170918/ja 等を参考に、コンソールアプリからHTMLファイルを呼び出すだけのEXEをVB(Visual Basic 2008 Express Edition)で作ったところ、 Shell関数ではHTMLがIEで起動されるのに対し、ShellExecute関数ではダメでした。 HTMLへのファイルパスが正しいことはMsgBoxで確認しました。 また、ほぼ同じソースをbasにしてExcelから起動すると、ShellExecuteでも起動しました。 以下がソース(抜粋)になりますが、原因が分かる方がおられましたら、ヒントだけでも、ご教示いただけると幸いです。 よろしくお願いいたします。 - - - - - - - - - - - - - - - - - - - - - - Option Explicit On Module Module1 Private Declare Function ShellExecute Lib "shell32.dll" Alias _ "ShellExecuteA" (ByVal hwnd As Long, ByVal lpszOp As _ String, ByVal lpszFile As String, ByVal lpszParams As String, _ ByVal lpszDir As String, ByVal FsShowCmd As Long) As Long Private Declare Function GetDesktopWindow Lib "user32" () As Long 'エラーコード宣言略 Function StartDoc(ByVal DocName As String) As Long Dim Scr_hDC As Long Scr_hDC = GetDesktopWindow() 'こちらだと成功 StartDoc = Shell("explorer.exe" & " " & DocName, vbNormalFocus) StartDoc = ShellExecute(Scr_hDC, "Open", DocName, _ "", "C:\", SW_SHOWNORMAL) End Function Sub Main() Dim r As Long, msg As String r = StartDoc(CurDir() & "\target.html") 'エラーハンドリング省略 End Sub End Module

  • エクセルVBA:perlで作成したexeが失敗する

    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から起動したいのですが、方法は無いでしょうか??

  • 画像ファイルを開けない

    画像ファイル(.jpg、.zip)を開こうとすると、ビューワは起動するのですがファイルが読み込まれません。 Windows画像とFAXビューアやペイントやブラウザを関連付けると開けるのですが、他のビューワだとファイルが読み込まれません。 どうしたら改善できるでしょうか WinXPSP3

  • Excelで検索、その後

     過去に、Excelファイルから外部ファイルを検索するダイアログの呼出方法をこのサイトで教わった者です。 以下にそのソースを書きます。 Option Explicit Private 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 Private Const SW_SHOWNORMAL = 1 Private Const SW_SHOWMINIMIZED = 2 Private Const SW_SHOWMAXIMIZED = 3 Private Const SW_SHOW = 5 Private Const SW_MINIMIZE = 6 Private Const SW_SHOWMINNOACTIVE = 7 Private Const SW_SHOWNA = 8 Private Const SW_RESTORE = 9 Private Const SW_SHOWDEFAULT = 10 Sub 検索ダイアログを出す() ShellExecute 0, "find", "C:\", vbNullString, vbNullString, SW_SHOWNORMAL End Sub    このダイアログを呼び出すと同時に、検索結果を表示する事は可能でしょうか?  なんとか自分で解釈してこれを行いたかったのですが、 時間ばかりが進んで上手く行きません。  vbNullStringの部分にstring型のデータを代入すれば動くと信じていたのですが、ダイアログ出現寺に表示もされないので、更に突っ込んだ検索結果表示なんて夢のまた夢(^^;;;)。  宜しくお願いしますm(_ _)m。

  • マシンの再起動とWindowsの再起動の違いは?

    マシンの再起動とWindowsの再起動では、どういう違いがあるんでしょうか? お願いします http://tclock2ch.hp.infoseek.co.jp/storeroom.htm マシンの再起動-Reboot.vbs Set WSHShell = CreateObject("WScript.Shell") WSHShell.Run "C:\WINDOWS\RUNDLL32.EXE Shell32.dll,SHExitWindowsEx 2" -------------------------------------------------------------------------------- Windowsの再起動-Restart.vbs Set WSHShell = CreateObject("WScript.Shell") WSHShell.Run "C:\WINDOWS\RUNDLL.EXE USER.EXE,ExitWindowsExec"

  • 「テキストサービスと入力言語」の設定ができない

    Office2003でIMEの設定をしようとすると (言語バーを右クリックして「設定」を実行すると) 以下のエラーが出て設定できませんでした。 何が問題なのでしょうか shell32.dll,Control_RunDLL C:\WINDOWS\system32\input.dll の実行中に、例外が発生しました。 10台あるマシンのうち2台で起きました WindowsXP SP2です

  • vb6からのネットワーク接続について

    vb6.0について質問です。 Shellexecute関数を使って外部プログラムを起動してすぐに接続しているネットワークドライブをShell関数を使って切断しようとすると 以下のようなメッセージがDOS窓で表示されてしまいます。 「Z:との接続にオープン ファイルや未実行のディレクトリ検索があります。 切断を続行し、強制的に閉じますか?(Y/N)」 Nにすると反応なしになりフリーズしてしまい、Yにすると正常に切断されます。 Shell関数は、 Shell "net use z: /D" このDOS窓が表示されないようにしたいのですがどのような対策が考えられますか? 外部プログラムを起動して5秒ほど経ってからネットワークドライブを切断するとDOS窓が表示されないようですので閉じる前にSleepを使って 対応しています。レスポンスを早くしたいので他の対策をさがしています。 ネットワーク系に詳しい方お知恵をお貸しください。

  • エクセルで『DTPicker』が削除される。

    PC-1~PC-5でネットワークを構築しています。 5台共に全く同じスペックのPCです。 エクセル2010のVBAでマクロを書き『DTPicker』を配置したブックを、ネットワーク上で共有しています。 ある日突然、『PC-1』で開いたブックを他のPCで開いたところ 『このマシンでは利用できないため オブジェクトを読み込めませんでした』 と表示されました。『PC-1』以外のPCでVBAを起動してフォームを確認したところ『DTPicker』だけが消えていました。 再度、『DTPicker』を配置して『PC-2~PC-5』で確認したら問題無く起動しました。 再度、『PC-1』でブックを開きましたが問題ありませんでした。 その後に、『PC-2~PC-5』でブックを開くと 『このマシンでは利用できないため・・・』となります。 簡単に言うと、『PC-1』で上書きしたものはその他のPCでは起動出来ません。 共に、『Access』はインストールしていません。『Visual Basic 6.0 SP6 』はインストール済です。 ある日突然の『ある日』とは、ブックのユーザーフォームに『DTPicker』を書き加えた時です。 書き加えるまでは問題なく共有出来ていました。 解決策、又は、原因を教えて下さい。

  • WMeとW2Kでのネットワーク構築ができない。

     どなたか助けてください。WMeマシンとW2KマシンでLANを構築したいのですが(つい最近まで正常に機能していたのですが)、WMeマシン上でホームネットワークウィザードでネットワークを設定し再起動をかけると、起動直後に「ネットワークエラーが発生しました。いくつかのネットワークリソースにアクセスできなかった可能性があります。」のメッセージが表示されてしまいます。  W2Kマシンでマイネットワークを開くとWMeマシンの名前は表示されるのですがアクセスすると「ネットワークパスが見つかりません。」のメッセージが表示されてこれ以上どうにもなりません。  一度WMeマシンのOSを再インストールしてみたところ復帰したのですが、あるきっかけで(別の問題で)OSを再インストールしたところそれ以降上記症状の繰り返しです。2台のマシンそれぞれはインターネットに同時に接続できるのですが・・・。何が原因として考えられるでしょうか?ご教示お願いいたします。