[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『自ブックを最前面にする』(ポン太2号)
いつも参考にさせていただいております。 最前面表示について質問させて下さい。
指定した時刻にマクロを実行するファイルで、 自動実行時にそのエクセルファイルとメッセージを前面に表示させたいと思っています。 メッセージは最前面表示になるのですが、 エクセルファイルが思うように表示されません(※)。
ご教示宜しくお願いします。
'============================================================ Option Explicit
Dim YYMMDD_HHMMSS As Date Dim Message_SW As Integer
'自動消去メッセージ #If VBA7 And Win64 Then Private Declare PtrSafe Function MessageBoxTimeoutA Lib "user32" ( _ ByVal hwnd As Long, _ ByVal lpText As String, _ ByVal lpCaption As String, _ ByVal uType As VbMsgBoxStyle, _ ByVal wLanguageID As Long, _ ByVal dwMilliseconds As Long) As Long #Else Private Declare Function MessageBoxTimeoutA Lib "user32" ( _ ByVal hwnd As Long, _ ByVal lpText As String, _ ByVal lpCaption As String, _ ByVal uType As VbMsgBoxStyle, _ ByVal wLanguageID As Long, _ ByVal dwMilliseconds As Long) As Long #End If
'最前面表示 [[20100129171023]] #If Win64 Then Public Declare PtrSafe Function SetWindowPos Lib "user32" _ (ByVal hwnd As LongPtr, _ ByVal hWndInsertAfter As LongPtr, _ ByVal X As Long, ByVal Y As Long, _ ByVal cx As Long, ByVal cy As Long, _ ByVal wFlags As Long) As Long #Else Public Declare Function SetWindowPos Lib "user32" _ (ByVal hwnd As Long, _ ByVal hWndInsertAfter As Long, _ ByVal X As Long, ByVal Y As Long, _ ByVal cx As Long, ByVal cy As Long, _ ByVal wFlags As Long) As Long #End If
Public Const walways = -1 '常に手前にセット Public Const wreset = -2 '解除 Public Const wdisp = &H40 '表示する Public Const w_SIZE = &H1 'サイズを設定しない Public Const w_MOVE = &H2 '位置を設定しない
'========================================================================= Sub AlarmMessage()
Dim ALARM_JIKANN As String Dim ALARM_FUN As String Dim ALARM_BYO As String
ALARM_FUN = ThisWorkbook.Sheets("ああ").Range("アラーム分") & "分" ALARM_BYO = ThisWorkbook.Sheets("ああ").Range("アラーム秒") & "秒"
ALARM_JIKANN = "ファイルを閉じて下さい" If ALARM_FUN = "0分" Then ALARM_JIKANN = "ファイルを閉じて下さい" End If If ALARM_BYO = "0秒" Then ALARM_JIKANN = "ファイルを閉じて下さい" End If
'■■■ThisWorkbook以外を作業している場合の対処■■■ Dim hwnd As Long hwnd = Application.hwnd
'自ブック(予約表.xlsm)を最前面表示にする Windows("予約表.xlsm").Activate With ThisWorkbook.Sheets("ああ") .Parent.Activate .Activate .Range("B1").Select End With
[[20100129171023]] 'Excelを常に手前に設定 Call SetWindowPos(hwnd, walways, 0, 0, 0, 0, wdisp Or w_SIZE Or w_MOVE)
'Excelを常に手前の設定解除 Call SetWindowPos(hwnd, wreset, 0, 0, 0, 0, wdisp Or w_SIZE Or w_MOVE)
'※エクセルを複数開いている場合、最後にアクティブだったファイルが表示される。 '「AppActivate」はPC環境により、タスクバーが点滅するだけだった。 '実行前、エクセル以外のアプリケーションがアクティブの可能性もあり。
'■■■メッセージ表示■■■ MessageBoxTimeoutA 0&, _ ALARM_JIKANN, _ Application.Name, _ vbInformation, _ 0, _ 50000
Message_SW = 1 End Sub
'========================================================================= Sub Auto_open()
Dim ALARM_JIKANN As String Dim ALARM_FUN As String Dim ALARM_BYO As String
Message_SW = 0
ALARM_FUN = Right("0" & Sheets("ああ").Range("アラーム分"), 2) ALARM_BYO = Right("0" & Sheets("ああ").Range("アラーム秒"), 2) ALARM_JIKANN = "00:" & ALARM_FUN & ":" & ALARM_BYO
'編集で開いている場合のみ実行 If ThisWorkbook.ReadOnly = False Then
ThisWorkbook.Sheets("ああ").Range("アラーム時刻") = Now + TimeValue(ALARM_JIKANN) YYMMDD_HHMMSS = ThisWorkbook.Sheets("ああ").Range("アラーム時刻")
'指定時間になったら実行 Application.OnTime YYMMDD_HHMMSS, "AlarmMessage" End If End Sub
< 使用 Excel:Excel2013、使用 OS:Windows10 >
hwnd = Application.hwnd は、 thisworkbook.activateの後に行って下さい。
(kazuo) 2020/10/08(木) 16:53
tkit様 kazuo様
ご教示ありがとうございます。
kazuo様のを実行したところ、ほぼ上手くいきました。 ありがとうございます。
tkit様のSetForegroundWindowも、これから勉強して試してみます。 また質問することがあるかもしれませんが、 その際は宜しくお願いします。
(ポン太2号) 2020/10/09(金) 16:43
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.