
いつもお世話になります
今、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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
VBSで起動したアプリが前面表示しない
Visual Basic(VBA)
-
Vba UserFormを前面に出す方法を教えてください
Visual Basic(VBA)
-
(Excel+VBA)ユーザーフォームのみ表示で完結させたい。
Excel(エクセル)
-
-
4
エクセルVBAのフォームを最前面にする方法を教えてください。
Visual Basic(VBA)
-
5
[VBA] UserForm を Excel の Window の前面に表示させない方法
その他(プログラミング・Web制作)
-
6
Excel VBA 定数にオブジェクトを指定したい
Visual Basic(VBA)
-
7
ExcelVBAでフォーム内でブックを開くとフォームが隠れてしまう
Visual Basic(VBA)
-
8
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フォームの最前面が効かない
-
二重起動禁止にする理由とは
-
VC#2005でエクスプローラを起動...
-
exeファイルを実行するとすぐに...
-
EXCEL VBAから他アプリケーショ...
-
Designer.vbは直接コードをいじ...
-
印刷要求順番と印刷出力順番が...
-
C#ソースをCSCファイルにてコン...
-
VBAで印刷スプール終了の判定を...
-
ManagementClassが見つからない。
-
クリレポのプリンタ設定について
-
意味不明の実行時エラーで困っ...
-
VB6をWindows10にインストール...
-
VB.NET+ActiveReports で印刷...
-
VB6上から印刷ダイアログを表示...
-
VB2008→VB2010でエラーが出てま...
-
vbaでPDFファイルが印刷されない
-
VBAでArrayListを使う為の「msc...
-
vba 時間の引き算 例えば 15:00...
-
Keydownイベントについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでOutlookを終了させたい Ex...
-
アウトルックが起動しているか...
-
Windows上のプログラム。「予め...
-
フォームの最前面が効かない
-
VBAでIEが起動しているか...
-
VBSから別のVBS起動するとき変...
-
exeファイルを実行するとすぐに...
-
VBSでExcelのUserFormをエクス...
-
VB6からエクセルの印刷機能...
-
VBSで起動したアプリが前面表示...
-
VBAでSeleniumからChromeを起動...
-
ウィンドウを終了させたい・・・
-
C# 他のアプリケーションを優先...
-
ACCESS VBAで別のACCESS(mdb)を...
-
別のクラスからのタイマの起動方法
-
htmlからcgiを自動的に起動させ...
-
VBで実行中のEXEファイルの情報...
-
【プログラミング】HTAが想定通...
-
gccプログラムで複数の実行ファ...
-
mscomm32.ocxの登録方法
おすすめ情報