VBAによるタスク操作(API不使用)
Excelに限らず,VBAでWindowsのタスク・プロセスの操作をしようと思ったら,まずはWindows APIを叩くことを考えるのではないかと思います.
まぁ,それも道理ですよね――そのような機能,VBAやExcelには用意がありませんし,「VBAでシステム関連の情報を取得しようと思ったら,Windows APIを叩く」は正攻法だと思います.
ところが.
Word VBAでタスクの操作を行う??
まずはこちらを見ていただきたく.
システムで実行されている 1 つのタスクを表します。 タスクオブジェクトは、 Tasks コレクションのメンバーです。 Tasks コレクションには、システム上で実行されているすべてのアプリケーションが含まれています。
このように,なぜかWordにはタスク関連のオブジェクトが所属しているのです.
したがって,ExcelからWordを参照設定すれば,‥
こうして,‥
Public Sub Get_Tasks() Dim wd As Word.Application Set wd = New Word.Application Dim tsk As Word.Task Dim c As Excel.Range Set c = ThisWorkbook.Worksheets.Item(1).Cells.Item(1, 1) For Each tsk In wd.Tasks c.Value = tsk.Name If tsk.Name = "電卓" Then If MsgBox(tsk.Name & " をアクティブにしますか?", vbQuestion + vbYesNo) = vbYes Then Call tsk.Activate ElseIf MsgBox(tsk.Name & " を終了しますか?", vbQuestion + vbYesNo) = vbYes Then Call tsk.Close End If End If Set c = c.Offset(1, 0).Cells Next Call wd.Quit Set wd = Nothing End Sub
こうなった.
にしても,タスク関連のオブジェクトがOfficeに用意されているにしても,なんでWordだったんでしょうね.
ちなみに
Wordにはこのようなオブジェクトも用意されています.
これでシステム情報の一部を取得したり,「システム情報(msinfo32.exe)」を開いたりできるのですが‥.
これもなぜWord?
「Wordにはシステム関連のオブジェクトを格納する」というお約束があったんでしょうか??
Word VBA参考書籍
Word VBAの参考書籍って数が少ないですよね.
というか,「VBAといえばAccessかExcelのもの!」という人も多いんじゃないでしょうか.かくいう私も,使うのは9割方それですが.