
いつもお世話になります
今、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)
-
エクセルVBAのフォームを最前面にする方法を教えてください。
Visual Basic(VBA)
-
-
4
(Excel+VBA)ユーザーフォームのみ表示で完結させたい。
Excel(エクセル)
-
5
ExcelVBAでフォーム内でブックを開くとフォームが隠れてしまう
Visual Basic(VBA)
-
6
メッセージボックスを前面に表示させるには?
Visual Basic(VBA)
-
7
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
8
VBA、UserFormを前面に出力してから処理後にももう一度前面に出したい
Visual Basic(VBA)
-
9
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C# 他のアプリケーションを優先...
-
アウトルックが起動しているか...
-
VBAでOutlookを終了させたい Ex...
-
Internet ExplorerをC言語プロ...
-
VBSで起動したアプリが前面表示...
-
HTMLタグの中にDLLを埋め込む事...
-
VB6.0からエクセルを起動
-
EclipseとTomcat使用時、すぐに...
-
Eclipseでjavascriptが動かない
-
VBAでSeleniumからChromeを起動...
-
64bitで作ったEXEを32bitで起動...
-
コマンドボタンをクリックする...
-
EXCEL VBAから他アプリケーショ...
-
フォームの最前面が効かない
-
windowsの連続起動時間取得
-
VC++にて_spawnlpでプロセス起動
-
意味不明の実行時エラーで困っ...
-
Designer.vbは直接コードをいじ...
-
VB6(SP5)+OO4OでCreateObjectが...
-
Visual Studio 「AnyCpu」について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでOutlookを終了させたい Ex...
-
VBSで起動したアプリが前面表示...
-
VBSから別のVBS起動するとき変...
-
アウトルックが起動しているか...
-
Process.Startで起動したアプリ...
-
Windows上のプログラム。「予め...
-
VBで実行中のEXEファイルの情報...
-
exeファイルを実行するとすぐに...
-
ACCESS VBAで別のACCESS(mdb)を...
-
WinSCPで画像のように puttyを...
-
VBAでSeleniumからChromeを起動...
-
フォームの最前面が効かない
-
VB6で呼び出し元の情報を取得す...
-
同じIEのウィンドウで、リンク...
-
gccプログラムで複数の実行ファ...
-
アプリからVB(Form)
-
VBSでExcelのUserFormをエクス...
-
VBからExcelに書き込む方法
-
Notepad起動のイベントでEXC...
-
C# 他のアプリケーションを優先...
おすすめ情報