プロが教える店舗&オフィスのセキュリティ対策術

Excelを使って計算時間の長いプログラムを走らせている時に
IEなどの別のウインドウを開いて作業するということがよくあります。

例えば、計算のプロセスが100あったとして、
ユーザーフォーム上に
1/100、2/100、・・・100/100

と計算が進む毎にカウントを進めていくというプログラムを書くことはできるのですが
IEなどの別のウインドウを最大表示で開いていると
隠れて見えなくなってしまいます。

それでタスクバー上に上記のような文字列を表示したいのですが
どうすれば良いでしょうか?

あるいは常に最前面表示の小さなウインドウを
モニターの端に表示させてカウントを表示するにはどうしたら良いですか?

あと、プログラムが終了した際に
タスクバー上のExcelが点滅するようなアクションを起こしたいのですが
可能でしょうか?

よろしくお願いいたします。

A 回答 (1件)

>それでタスクバー上に上記のような文字列を表示したいので


そのプロセスの適当なところに
Application.Caption = "1/100" や ・・"50/100" などを挟み込んでゆけばよいのでは?
DoEventsとセットでないと反映されないかも?

>あるいは常に最前面表示の小さなウインドウを
こちらの物好きじいちゃんさんのが参考になるのでは?
https://oshiete.goo.ne.jp/qa/9130415.html
当方32Bit版Officeなので64Bit移植も視野に入れた回答は不可です。あらかじめ。

>タスクバー上のExcelが点滅するようなアクション
適当なのがなさそうなので
標準モジュールに
Private Declare Function FlashWindowEx Lib "user32" _
(FWInfo As FLASHWINFO) As Boolean

Private Declare Sub Sleep Lib "kernel32" _
(ByVal dwMilliseconds As Long)

Private Type FLASHWINFO
cbSize As Long ' size of structure
hWnd As Long ' hWnd of window to use
dwFlags As Long ' Flags, see below
uCount As Long ' Number of times to flash window
dwTimeout As Long ' Flash rate of window in milliseconds. 0 is default.
End Type

Const FLASHW_STOP = 0
Const FLASHW_CAPTION = 1
Const FLASHW_TRAY = 2
Const FLASHW_ALL = FLASHW_CAPTION Or FLASHW_TRAY
Const FLASHW_TIMER = 4
Const FLASHW_TIMERNOFG = 12

Sub FlashTest()
Dim retVal As Integer
Dim FWInfo As FLASHWINFO

' Fill the structure:
With FWInfo
.cbSize = 20 ’これが不明
.hWnd = Application.Hwnd 'Excelの場合
.dwFlags = FLASHW_ALL
.uCount = 10 '回数
.dwTimeout = 200 ’間隔
End With

' Allow time to cover the window:
Sleep 2000
' call the function:
retVal = FlashWindowEx(FWInfo)
End Sub

としておいて終了の際に、Call FlashTest を呼び出したら・・?
※上記のAPIもMSDNだったかに載っていたのを以前にメモってただけです。

Excel2010以前と2013以後では異なる結果になるかもしれません。
以上、ご参考まで。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このQ&Aを見た人がよく見るQ&A