[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『フォームのみ表示で、Excelをタスクバーから消さないようにするには』(しば)
いつもお世話になっています。
Excel起動時にユーザーフォームをAuto_Openで開かせる際、Excel本体をApplication.Visible = Falseで非表示にしているのですが、
このときタスクバーからExcelが消えてしまいます。
フォームのみ表示の状態で、Excelをタスクバーから消さないようにするにはどうすればいいでしょう?
Sub Auto_Open()
Application.Visible = False
form.Show
Application.ShowWindowsInTaskbar = True
End Sub
< 使用 Excel:Excel2016、使用 OS:Windows10 >
非表示にしないで、最小化すればいいのでは?
Application.WindowState = xlMinimized
ユーザーフォームの挙動については、検証してませんが・・・
(渡辺ひかる) 2019/09/09(月) 17:35
Sub Auto_Open()
Application.WindowState = xlMinimized
UserForm1.Show
End Sub
最小化すると、ユーザーフォームも後ろにいっちゃうので、 UserFormの最初に、
Private Sub UserForm_Initialize() AppActivate Application.Caption End Sub
とかしておくといいようです。 (´・ω・`) 2019/09/09(月) 17:47
通常はExcelがUserFormを表示する際、タスクバー表示を無くしてしまうので、UserFormを表示しきる前に、マクロでタスクバー表示付きで表示させてしまいます。 このとき、モーダルにしておけば、事後にExcelがShowを完了させようとしてもエラーになって、スタイルを変えられなくなります。
【標準モジュール】 Sub Auto_Open() On Error Resume Next UserForm1.Show On Error GoTo 0 End Sub
【UserForm1】 Private Declare Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Declare Function ShowWindow Lib "User32" (ByVal Hwnd As Long, ByVal nCmdShow As Long) As Long Private Declare Function GetWindowLong Lib "User32" Alias "GetWindowLongA" (ByVal Hwnd As Long, ByVal nIndex As Long) As Long Private Declare Function SetWindowLong Lib "User32" Alias "SetWindowLongA" (ByVal Hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Const GWL_EXSTYLE As Long = -20 Private Const SW_SHOWNORMAL = 1 Private Const WS_EX_APPWINDOW As Long = &H40000
Public Sub UserForm_Initialize() Dim Hwnd As Long Hwnd = FindWindow("ThunderDFrame", UserForm1.Caption) SetWindowLong Hwnd, GWL_EXSTYLE, GetWindowLong(Hwnd, GWL_EXSTYLE) Or WS_EX_APPWINDOW ShowWindow Hwnd, SW_SHOWNORMAL Application.Visible = False End Sub
Private Sub UserForm_Terminate() Application.Visible = True End Sub (???) 2019/09/09(月) 18:39
???さんの方法も試したのですがこちらもエラーが起きます。私には正直難しいです、すいません。
(しば) 2019/09/10(火) 16:39
(しば) 2019/09/10(火) 17:12
それに、Application.CaptionはExcel本体のウィンドウタイトル文字列だし、Excel本体は非表示にしているのだから、アクティブにはできないでしょう。 隠したいのかアクティブにしたいのか、矛盾させないように。
(???) 2019/09/10(火) 17:38
>最初のAuto_Openの時 最初だけっていうのはよくわかりませんが、最初というのはどういうことでしょう ファイル作成したあとということでしょうか。 セキュリティの警告関係ではないのかなぁ?
AppActivate Application.Caption
の場所は、UserForm_Initialize じゃなくて、Auto_Openの Application.WindowState = xlMinimized の直後のほうかいいかもしれません。
Auto_Open じゃ無くて、Workbook_Openイベントの方だとどうなんでしょうね。
???さん >隠したいのかアクティブにしたいのか、矛盾させないように。
私の回答に対するクレームのようですが、実際に試されてからのお言葉ですか
以下、AppActivateのヘルプからの抜粋です。
AppActivate ステートメントは、指定したアプリケーションやウィンドウにフォーカスを 移します。このとき、フォーカスが移っても指定したウィンドウの状態は変化しません。 たとえば、最小化されているウィンドウにフォーカスを移しても、そのウィンドウは最小 化されたままです。
最小化状態のまま、フォーカスが移ります。 (´・ω・`) 2019/09/10(火) 17:52
Private Declare Function ShowWindow Lib "User32" (ByVal hwindow As Long, ByVal cmdshow As Long) As Long
Private Const SW_SHOWMINIMIZED As Long = 2 'ウィンドウをアクティブにして、最小化する。
Sub Auto_Open()
ShowWindow Application.Hwnd, SW_SHOWMINIMIZED UserForm1.Show Application.WindowState = xlNormal End Sub
(kazuo) 2019/09/10(火) 21:33
すみませんでした。
Excel2010でやってました。 Excel2013で試したところ、AppActivate で実行時エラーになることを確認しました。
2013以降でWindow管理がかわった影響なのか、2013以降ではうまくいかないようです。 (´・ω・`) 2019/09/10(火) 22:45
こういうこと? 2007まで・・・?
標準モジュール Sub auto_open() Application.WindowState = xlMinimized Application.Visible = False UserForm1.Show End Sub
ユーザーフォーム Private Sub UserForm_Activate() Application.Visible = True AppActivate UserForm1.Caption End Sub (BJ) 2019/09/11(水) 00:41
これも書いておいた方が良かったかな?
Private Sub UserForm_Terminate() Application.WindowState = xlMaximized '最大化 End Sub (BJ) 2019/09/11(水) 00:48
また質問で申し訳ないのですが、、
最小化された状態でタスクバーボタンを押すとExcel本体が表示されますが、
フォームが開いている間はタスクバーボタンを押してもExcelが表示されないようにする方法はありますでしょうか?
(しば) 2019/09/11(水) 09:05
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.