![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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
No.2ベストアンサー
- 回答日時:
Declare宣言の WinAPIで使っている Long型引数が問題なのです
VB6のころは 32bit長の整数はLong型でしたが
VB.NET系は Integerが32bit長の整数になります
これの違いで スタックに積んだデータがShellExecuteへうまく渡らないため実行されないのだろうと思います
ご指摘を参考に、以下の修正を行なったところ、期待通り実行されました。ありがとうございました。
<変更前>
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 ShellExecute Lib "shell32.dll" Alias _
"ShellExecuteA" (ByVal hwnd As Integer, ByVal lpszOp As _
String, ByVal lpszFile As String, ByVal lpszParams As String, _
ByVal lpszDir As String, ByVal FsShowCmd As Integer) As Integer
No.1
- 回答日時:
VBAやVBScriptは多少業務で触ったことがあるのですが、VBは初心者&初日なもので、ExpressEditionはVB6なのかなと思っておりました。
初歩的な質問に対してのコメント、ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
html上で、バッチやexeファイル...
-
「暁の護衛」をDLしたのですが...
-
HTMLファイルからexeファイルを...
-
Access VBAよりシート名を取得...
-
*.asp の拡張子名がついたht...
-
量子化学計算ソフト GAMESS の...
-
Symantec Ghost リストアDVDに...
-
VBA Application visibleの...
-
system.mdwを見つけることが出...
-
exeファイルを起動してCD-R(デ...
-
エクセルのマクロのボタンで他...
-
VBAで作成したマクロをデスクト...
-
vb.netでフォルダをcab圧縮する...
-
MS onedriveの中にあるaccessプ...
-
vbs autoOpenを有効でWordを起動時
-
Eclipseで、プロジェクト名のと...
-
split関数で区切り文字がない場合
-
EclipseでJSPファイルを開こう...
-
eclipseでスタックサイズを変更...
-
Eclipseのアンインストールの仕方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
html上で、バッチやexeファイル...
-
HTMLファイルからexeファイルを...
-
VBA Application visibleの...
-
jspのエラーが修正できません。
-
別のAccessファイルのフォーム...
-
Access VBAよりシート名を取得...
-
VBAで作成したマクロをデスクト...
-
エラー この変数は宣言されて...
-
system.mdwを見つけることが出...
-
*.asp の拡張子名がついたht...
-
「暁の護衛」をDLしたのですが...
-
量子化学計算ソフト GAMESS の...
-
Symantec Ghost リストアDVDに...
-
このファイルを開く方法で困っ...
-
vb.netでフォルダをcab圧縮する...
-
RPA(PowerAutomate)の実装について
-
VistaのIISで動作するASPのExce...
-
VBAでExcelのOLE Objectの取得方法
-
GUIアプリをコマンドラインで使...
-
MS onedriveの中にあるaccessプ...
おすすめ情報