[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『vbsでユーザーフォームのみを表示させたとき最前面にならない』(zawa)
vbsでExcelを非表示で起動し、ユーザーフォームのみを表示させたいのですが 他のwindowが開いていた場合に最前面になりません。 どのように対処したらいいのでしょうか? 'vbs With CreateObject("Excel.Application") .Workbooks.Open "D:\Users\xxx\デスクトップ\Book1.xls" End With
'Book1.xlsのThisWorkbookモジュール Private Sub Workbook_Open() UserForm1.Show End Sub
Excel2007、Windows Vista
ここで書いた事をやってないし。 [[20110302150502]]『vbsでExcelを起動すると最前面にならない』(zawa)
VBS側で制御するような事ではないから、エクセル側の問題ですね。 あ、2007だとうまくいかないようなことも聞いたことがあるような? (Jaka)
>ここで書いた事をやってないし。 前スレはExcel表示なので上手くいきました。 今回は試してみて、Excel2007&Windows Vistaや Excel2010、Windows 7 の環境ではうまくいかないので質問しました。
Excelを非表示で起動し、ユーザーフォームのみを表示させたいのですが 他のwindowが開いていた場合に最前面になりません。 (zawa)
環境がないので私のほうで確認はできませんが・・・。
Userform1のモジュールに
Option Explicit Private Declare Function FindWindow Lib "USER32" _ Alias "FindWindowA" (ByVal lpClassName As String _ , ByVal lpWindowName As String) As Long Private Declare Function SetWindowPos Lib "user32.dll" (ByVal hwnd As Long, ByVal st As Long, _ ByVal x As Long, ByVal y As Long, ByVal w As Long, ByVal h As Long, ByVal uFlags As Long) As Long Private Sub UserForm_Activate() Call SetWindowPos(FindWindow("ThunderDFrame", Me.Caption), -1, 0, 0, 0, 0, 3) DoEvents Call SetWindowPos(FindWindow("ThunderDFrame", Me.Caption), -2, 0, 0, 0, 0, 3) DoEvents Call SetWindowPos(FindWindow("ThunderDFrame", Me.Caption), 0, 0, 0, 0, 0, 3)
End Sub
このようなAPIを追加でどうですか?
ichinose
2003だとこんな感じなんですが、2007だとダメかも。 (Jaka)
VBS
Dim ExlApp,pasF
pasF = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\表示.xls"
On Error Resume Next Set ExlApp = GetObject(, "Excel.Application" ) If ExlApp Is Nothing Then Set ExlApp = CreateObject("Excel.Application") End IF On Error Goto 0
ExlApp.Workbooks.Open pasF
CreateObject("WScript.Shell").AppActivate ExlApp.Caption ExlApp.WindowState = -4143
On Error Resume Next ExlApp.Run ("'" & pasF & "'!Auto_Open") On Error Goto 0
Set ExlApp = Nothing
標準モジュール
Sub auto_open() Application.Visible = False UserForm1.Show End Sub
フォーム(なくても良いですが、次回エクセル起動の事を考えて入れてあります。)
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) Application.Visible = True Windows(ThisWorkbook.Name).Visible = True End Sub
>このようなAPIを追加でどうですか? ichinoseさん 有難うございます。 前面に表示はされましたが、アクティブにはなりません。 一回ユーザーフォームをクリックするとアクティブになりキー操作が出来ます。
>2003だとこんな感じなんですが、2007だとダメかも。 Jakaさん 有難うございます。 2007だと前面になりません。 2003だと何もしなくても前面になります。
前面でアクティブになる方法はないでしょうか?出来るならAPIを使わないほうがいいです。 (zawa)
VBS側
dim bk1,app set app=createobject("excel.application") app.WindowState = -4140 app.visible=true set bk1=app.workbooks.open("D:\Users\xxx\デスクトップ\Book1.xls") bk1.close false app.quit
BOOK1.XLS側
Thisworkbook
Private Sub Workbook_Open() UserForm1.Show End Sub
UserForm1
Private Sub UserForm_Activate() AppActivate Me.Caption Application.Visible = False Application.WindowState = xlMaximized End Sub
繰り返しますが、環境がないので確認はしていません。
ichinose
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.