vbscriptで、ファイル選択ダイアログを表示する方法を確認してます。
あるボタンを押すと、ダイアログを表示するようにしようとしてますが、
以下の場合、元の画面(ボタンを押す画面)の後方にダイアログが表示されます。
ダイアログを前面に表示する事は可能でしょうか。
ーーーーーーーーーーーーー
Dim iptObj
Dim ret
With CreateObject("InternetExplorer.Application")
.Visible = False
.FullScreen = True
.Navigate "about:blank"
'表示待ち
While .Busy Or .readyState <> 4
WScript.Sleep 100
Wend
Set iptObj = .document.createElement("input")
iptObj.setAttribute "type", "file"
.document.body.appendChild iptObj
iptObj.Click
If Trim(Len(iptObj.Value)) > 0 Then
iptObj.Focus
.ExecWB 17, 0 'OLECMDID_SELECTALL
.ExecWB 12, 0 'OLECMDID_COPY
ret = CreateObject("htmlfile").parentWindow.clipboardData.GetData("text")
End If
Set iptObj = Nothing
.Quit
End With
GetFilePathIE2 = ret
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
こんにちは。
WScript をわざわざ使う方にとって、私が紹介する方法は、あまり良い案とは言えませんが、Excel等の環境がない人にとっては、一案だと思います。
それは、DynamicWrapperを使う方法です。後は、前面にだすのがうまくいくかは、Win32API のコードの問題ですから、うまくいかなければ、方法を変えるだけです。
入手先
http://glsft.free.fr/index.php?option=content&ta …
使用準備
https://www.recfor.net/jeans/index.php?itemid=23
regsvr32 で、DynaWrap.dll を登録してあげます。
//
With CreateObject("InternetExplorer.Application")
.Visible = False
.FullScreen = True
.Navigate "about:blank"
'表示待ち
While .Busy Or .readyState <> 4
WScript.Sleep 100
Wend
'//ここから
Dim objDynaWrap
Dim hWnd
Dim CC
Set objDynaWrap = CreateObject("DynamicWrapper")
objDynaWrap.Register "USER32.DLL", "FindWindow", "i=sl", "f=s", "r=h"
objDynaWrap.Register "USER32.DLL", "SetForegroundWindow","i=l"
hWnd = objDynaWrap.FindWindow("#32770", 0)
If hWnd =0 Then
MsgBox "Failure!"
WScript.Quit
End If
Call objDynaWrap.SetForegroundWindow(hWnd)
'//ここまで。後は既存の通り
No.1
- 回答日時:
こんにちは
VBSは触ったことがないので、まったくわからないのですが…
事象だけから推測すると、IEのウィンドウをアクティブ(最前面)にしておけば良さそうに思えます。
https://netwiz.jp/?p=513
ダイアログを出す方法を検索してみると、他にも
・BrowseForFolder を利用する方法
・CommonDialog を利用する方法
などがあるようですが、アプリケーション経由で行う方法としてはIE利用の例が多いみたいですね。
愚考してみるに、IE利用だとReady待ちや要素生成などの余分な処理が多い気がしましたので、Exelなどを利用した方が簡単なのではないかと、少し試してみました。
以下を単独で実行してみる限りでは、私の環境ではダイアログは最前面に表示されますが、ご提示の内容を IE → Excel にほぼ置き換えただけなので、質問者様の環境では後ろに表示されるのかも知れません。
試してはいませんが、最前面に表示する処理を追加してあげれば、前面に表示されるようにならないでしょうか?
Dim fName
With CreateObject("Excel.Application")
.Visible = False
fName = .GetOpenFilename("All Files (*.*),*.*")
.Quit
End With
MsgBox fName
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/06 17:46
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) VBAでファイルを開くプログラムがエラーです 2 2023/02/21 16:56
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
このQ&Aを見た人はこんなQ&Aも見ています
-
賃貸で可能な古民家風レトロな部屋作りのコツ!改めて知る畳の高い機能性と魅力も紹介
畳の部屋を雰囲気のよい部屋に仕上げたい!賃貸住宅でもできる古民家風のレトロな部屋作りのコツを伺った。
-
VBSで起動したアプリが前面表示しない
Visual Basic(VBA)
-
vbsで選択ダイアログを表示したいのですがやり方が分かりません。教えて
その他(プログラミング・Web制作)
-
メッセージボックスを前面に表示させるには?
Visual Basic(VBA)
-
-
4
VBSでのSendKeysでの画面の最小化
その他(プログラミング・Web制作)
-
5
VBScriptでのフォルダ指定ダイアログについて
Visual Basic(VBA)
-
6
VBAにてメッセージボックスを最前面に表示させる
その他(プログラミング・Web制作)
-
7
vbsからのExcelマクロ呼び出しの際に保存ダイアログが表示されてしまう
その他(プログラミング・Web制作)
-
8
ファイル保存先のダイアログが背面に表示されてしまう
Java
-
9
名前を付けて保存のウィンドウが表に出ない
Visual Basic(VBA)
-
10
指定したフォルダーを最前面表示にする方法
Visual Basic(VBA)
-
11
VBSでExcelのオープン確認
Visual Basic(VBA)
-
12
フォントの大きさ
Visual Basic(VBA)
-
13
Vbscriptで自分自身のウィンドウを最大化するには?
Microsoft ASP
-
14
vbscriptを用いて他のVBSファイルを実行
その他(プログラミング・Web制作)
-
15
VBSでExcelのUserFormをエクスプローラの前面に出したい
Visual Basic(VBA)
-
16
Vba Userformを前面に出すについて
Access(アクセス)
-
17
VBSの「MsgBox」について
Visual Basic(VBA)
-
18
VBscriptが起動しない?
Microsoft ASP
-
19
VBscriptでのエクセルの起動について
Visual Basic(VBA)
-
20
エクセルVBAのフォームを最前面にする方法を教えてください。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フォーム上のリストボックスに...
-
メッセージボックスのボタン文...
-
vbscriptで、ファイル選択ダイ...
-
ダイアログの上のテキストボッ...
-
ダイアログボックスで指定した...
-
ボタンの表示の色、フォントを...
-
ダイアログの表示位置の保存
-
Visual C++のダイアログ編集画...
-
マウスポインタの画像を変更したい
-
ツールチップの表示
-
MFCダイアログボックスを最前面...
-
メッセージボックスを大きくす...
-
【VC++2005(CLR)】ダイアログ右...
-
confirmダイアログの表示文字に...
-
アイコンをボタンに貼り付け
-
vc++で電卓
-
【VC++2005】ダイアログサイズ...
-
C# ボタンコントロール内で文字...
-
MFC ポップアップメニューのチ...
-
エディットボックスの処理で画...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
メッセージボックスを大きくす...
-
ボタンの表示の色、フォントを...
-
コンボボックスのドロップダウ...
-
'int' から 'LPCSTR' に変換で...
-
ダイアログボックスで指定した...
-
フォーム上のリストボックスに...
-
confirmダイアログの表示文字に...
-
ダイアログの上のテキストボッ...
-
ボタンの配置を変更したい
-
VC(Ver6.0)でダイアログサイズ...
-
VC++ MFC エラーコード C2248 ...
-
メッセージボックスのボタン文...
-
リソースファイルとは・・・
-
MFCダイアログボックスを最前面...
-
ダイアログの表示位置の保存
-
ホームページビルダー21で作成...
-
vbscriptで、ファイル選択ダイ...
-
エクセル VBA 「Sub Auto_Open(...
-
C# ボタンコントロール内で文字...
-
アイコンをボタンに貼り付け
おすすめ情報
どうもありがとうございます。
Excelの方式も行いましたが、
やはり後ろに表示されてしまいます。
環境の問題でしょうか。
前面にするのがやはりうまくいってません。