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で質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Vba Userformを前面に出すについて 3 2022/04/15 12:29
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Visual Basic(VBA) Vbaで数式をポーランド記法に変換するコードを作って実行しようとするとフリーズします。 1 2022/05/24 17:53
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
html上で、バッチやexeファイル...
-
Access VBAよりシート名を取得...
-
エラー この変数は宣言されて...
-
EXE間で同期をとりながらデータ...
-
jspのエラーが修正できません。
-
LabVIEWでEXCELファイルを操作...
-
VBA Application visibleの...
-
エクスプローラで選択したファ...
-
複数のパソコン間のDir関数につ...
-
Session_OnStartを見てくれなか...
-
シェルスクリプト間で排他をと...
-
Eclipseで、プロジェクト名のと...
-
正しいURL指定しているにもかか...
-
JSPのクラスをコンパイルできな...
-
split関数で区切り文字がない場合
-
.jarファイルの中身って書き換...
-
「ワークスペースをビルド中」...
-
javaが文字コードの影響でコン...
-
Javascriptの値をJava(JSP)へ渡...
-
Eclipse・プロジェクトで、フォ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
html上で、バッチやexeファイル...
-
VBA Application visibleの...
-
HTMLファイルからexeファイルを...
-
*.asp の拡張子名がついたht...
-
RPA(PowerAutomate)の実装について
-
jspのエラーが修正できません。
-
別のAccessファイルのフォーム...
-
system.mdwを見つけることが出...
-
量子化学計算ソフト GAMESS の...
-
VBAで作成したマクロをデスクト...
-
Access VBAよりシート名を取得...
-
AccessのMDBファイルを自動で最...
-
LabVIEWでEXCELファイルを操作...
-
EXCELアドイン自動起動マクロ
-
VB5が起動しない
-
エラー この変数は宣言されて...
-
VBでShell○なのにShellExecute×
-
vbsかバッチファイルでmp3を再...
-
64ビットでのビジュアルスタイ...
-
exeファイルが実行中かどうか、...
おすすめ情報