いつもお世話になります
今、VBScriptでExcelファイルからUserFormを立ち上げてプログラムの実行を考えていますが
エクプローラからダブルクリックでVBSを実行するとUserFormがエクスプローラに隠れてしまいます
UserFormには常に前面に表示するように指示してありますがうまく行きません
前面に出す方法、またはエクプローラをタスクバーに入れる方法等何か良い方法が有りましたら教えてください
... Excel起動
Dim oXlsApp
Dim fso
Dim XlsmName
set fso = createObject("Scripting.FileSystemObject")
XlsmName = fso.getParentFolderName(WScript.ScriptFullName) & "\Arare.xlsm"
'MsgBox XlsmName
'
Set oXlsApp = CreateObject("Excel.Application")
If oXlsApp Is Nothing Then
'... Excel起動失敗
MsgBox "Excel起動失敗"
Else
'... Excel起動成功
' -- Excel表示(Falseにすると非表示に出来る)
oXlsApp.Application.Visible = False
oXlsApp.Application.Workbooks.Open(XlsmName)
'... Excel終了
oXlsApp.Quit
'... Excelオブジェクトクリア
Set oXlsApp = Nothing
End If
以上、よろしくお願い申し上げます
No.1ベストアンサー
- 回答日時:
こんにちは。
この問題を数日ずっと考えていました。
一体、どのような目的で行っているのかは分かりませんが、Excelだけの問題なら、Excel はVBを搭載しているので、難なくできますが、VBScript からだと、どうしても制限されます。
調べてみると、Process ID からでないとうまく行かないとか書かれているサイトがあり、具体的には、ClassName を、GetClassName 関数で取れない、(理由は固定長変数が作れないから-何かの間違いかもとは思うのですが、)、事実取れませんでした。そうすると、恒常的な最前面化は不可能になってしまいます。
だから、開いた時だけのことになってしまいますが、こういうことでしたら、可能です。
'//....
Set oXlsApp = CreateObject("Excel.Application")
If oXlsApp Is Nothing Then
'... Excel起動失敗
MsgBox "Excel起動失敗"
WScript.Quit
Else
'... Excel起動成功
' -- Excel表示(Falseにすると非表示に出来る)
oXlsApp.Visible = True '現行ではTrue で行って、XLのMacroで、
oXlsApp.Workbooks.Open(XlsmName)
WScript.Sleep 500
'------------------ この部分で最前面化
With oXlsApp
h = .ExecuteExcel4Macro("CALL(""user32"", ""FindWindowA"", ""JCJ"", ""ThunderDFrame"", 0)")
If h <>0 Then
.ExecuteExcel4Macro("CALL(""user32"",""SetForegroundWindow"",""J""," & CStr(h) &")")
End If
End With
End If
'----------------------
WScript.Sleep 2000 '待ち時間(こちらは、特に意味はない)
'... Excel終了
oXlsApp.Quit
'... Excelオブジェクトクリア
Set oXlsApp = Nothing
'//
なお、待ち時間に関しては、あえて付けたまでで、最初のWscript.Sleep 500は、ただ、なんとなく不安だからという理由にすぎません。Excel側は、ThisWorkbookモジュール側のWorkbook_Open に、UserForm1.Show False があるという前提になっています。UserForm1.Initialize の中で、 Application.Visible = False しています。
いつもお世話になります
貴重なお時間をありがとうございます
実行してみましたがうまく行きませんでした
Dim oXlsApp
Dim oXlWorkbook
Dim fso
Dim XlsmNam
set fso = createObject("Scripting.FileSystemObject")
XlsmName = fso.getParentFolderName(WScript.ScriptFullName) & "\Arare.xlsm"
Set oXlsApp = CreateObject("Excel.Application")
If oXlsApp Is Nothing Then
MsgBox "Excel起動失敗"
Else
oXlsApp.Application.Visible = False
Set oXlWorkbook = oXlsApp.Application.Workbooks.Open(XlsmName)
'-この部分で最前面化
With oXlsApp
h = .ExecuteExcel4Macro("CALL(""user32"", ""FindWindowA"", ""JCJ"", ""ThunderDFrame"", 0)")
If h <>0 Then
.ExecuteExcel4Macro("CALL(""user32"",""SetForegroundWindow"",""J""," & CStr(h) &")")
End If
End With
'-
oXlWorkbook.Close
oXlsApp.Quit
Set oXlsApp = Nothing
End If
Excel側
Private Sub Workbook_Open()
UserForm1.Show
End Sub
Private Sub UserForm_Initialize()
Application.Visible = False
UserForm1.Top = 100
UserForm1.Left = 300
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) Vba UserFormを前面に出す方法を教えてください 1 2023/08/17 11:08
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- その他(プログラミング・Web制作) VBSでExcelファイル起動時、重複しても開くのを止めたい 1 2022/10/01 23:20
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Visual Basic(VBA) VBAでファイルを開くプログラムがエラーです 2 2023/02/21 16:56
- Visual Basic(VBA) Excel VBAについて、 フォルダ内のファイルを全て開きたい場合、 FSOを使えば、Dirは使わ 1 2023/01/27 13:18
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/06/04 09:39
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
Vba Userformを前面に出すについて
Access(アクセス)
-
VBSで起動したアプリが前面表示しない
Visual Basic(VBA)
-
エクセルVBAのフォームを最前面にする方法を教えてください。
Visual Basic(VBA)
-
-
4
Excel VBAでユーザーフォームだけ表示したい
Visual Basic(VBA)
-
5
(Excel+VBA)ユーザーフォームのみ表示で完結させたい。
Excel(エクセル)
-
6
VBA+VBSによる別インスタンスBookOpen時のVBSエラーに関して
Excel(エクセル)
-
7
VBA、UserFormを前面に出力してから処理後にももう一度前面に出したい
Visual Basic(VBA)
-
8
メッセージボックスを前面に表示させるには?
Visual Basic(VBA)
-
9
エクセルVBAでUserFormを起動した時
Excel(エクセル)
-
10
vbscriptで、ファイル選択ダイアログを前面に出したい。
その他(プログラミング・Web制作)
-
11
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
12
vbscriptを用いて他のVBSファイルを実行
その他(プログラミング・Web制作)
-
13
ExcelのVBAでフォームが表示されない
Excel(エクセル)
-
14
[VBA] UserForm を Excel の Window の前面に表示させない方法
その他(プログラミング・Web制作)
-
15
VBSで変数の宣言はできないのですか?
Visual Basic(VBA)
-
16
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
17
VBScriptによるExecuteExcel4Macroの使い方について
Visual Basic(VBA)
-
18
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
19
Excel VBA ListViewサブアイテムの文字色
その他(プログラミング・Web制作)
-
20
フォームでPDFを表示させたいときは
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アウトルックが起動しているか...
-
Windows上のプログラム。「予め...
-
VBSから別のVBS起動するとき変...
-
ASPでPMT関数が使いたい...
-
VBで実行中のEXEファイルの情報...
-
WinSCPで画像のように puttyを...
-
リムーバブルディスクのフォー...
-
MSDOS(バッチファイル)でプロセ...
-
ウィンドウを終了させたい・・・
-
別アプリの起動、終了について
-
VB6で呼び出し元の情報を取得す...
-
VBで別のプログラムを起動し他...
-
エクセル起動時別プロセスで開く
-
VBSで起動したアプリが前面表示...
-
VBAでSeleniumからChromeを起動...
-
「FindWindow」、ウィンドウハ...
-
HTMLタグの中にDLLを埋め込む事...
-
mscomm32.ocxの登録方法
-
フォームの最前面が効かない
-
ACCESS VBAで別のACCESS(mdb)を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
アウトルックが起動しているか...
-
VBAでOutlookを終了させたい Ex...
-
VBSから別のVBS起動するとき変...
-
Windows上のプログラム。「予め...
-
VBSで起動したアプリが前面表示...
-
VBで実行中のEXEファイルの情報...
-
キー操作 (WSH:コピー&ペー...
-
EXCEL VBAから他アプリケーショ...
-
Process.Startで起動したアプリ...
-
VBAでSeleniumからChromeを起動...
-
64bitで作ったEXEを32bitで起動...
-
ACCESS VBAで別のACCESS(mdb)を...
-
「FindWindow」、ウィンドウハ...
-
VBAでIEが起動しているか...
-
Shellで起動したプログラムのウ...
-
VBSでExcelのUserFormをエクス...
-
Vba アプリケーションが立ち上...
-
exeファイルを実行するとすぐに...
-
フォームの最前面が効かない
-
別アプリの起動、終了について
おすすめ情報