MSProject2013でタスクのバー色をリソース名と連動する

Microsoft Projectでタスクを誰かに割り当てたとき、担当者ごとに違う色をタスクのバーに割り当てると見やすくなるのでよくやります。しかし、自動でリソース名とバーの色を連動させる機能がないので、いちいち設定を変えねばなりません。これが結構面倒なので、リソース名を変更するとタスクのバーの色を事前に決めた色に自動的に変えるマクロを作ってみました。
※今回は画像中心でお伝えしていきます。
今回のサンプルは下記の３人のリソースを割り当てたとき、自動的にバーの色を割り当てるマクロを作ります。

![image001.png](https://qiita-image-store.s3.amazonaws.com/0/83170/685814b6-f8c0-6b8f-3dc5-2b9160c134a8.png)
まず、クラスモジュールを作成します。
![image003.png](https://qiita-image-store.s3.amazonaws.com/0/83170/4d53d9f7-8523-5a2f-e05e-d33eaa06390a.png)
イベントを受け取るモジュールなので、今回はEventClassModuleと名付けます。
![image004.png](https://qiita-image-store.s3.amazonaws.com/0/83170/f8efae89-86ca-8596-f524-0cc6e373c957.png)
まずは、このクラスモジュールを編集していきます。
![image005.png](https://qiita-image-store.s3.amazonaws.com/0/83170/8456ff8d-c522-7f53-a682-e313f6b9ced1.png)
下図のように宣言し、
![image006.png](https://qiita-image-store.s3.amazonaws.com/0/83170/daec7db6-b310-6206-1555-4084fb4b17e3.png)
Editorウィンドウの左側のプルダウンメニューから「App」を選択すると、
![image007.png](https://qiita-image-store.s3.amazonaws.com/0/83170/c29c1100-44d8-c000-b62a-8afa34fbabae.png)
下図のように勝手に関数が追加されますが、これは使いません。
![image008.png](https://qiita-image-store.s3.amazonaws.com/0/83170/0f2ff908-07a2-c2ea-ee9a-e0b682e5da8e.png)
右のプルダウンメニューから、「ProjectBeforeChange」を選択すると、下図のように関数の雛形が追加されます。最初に勝手に追加された、「App_NewProject」は使用しないので削除します。
![image009.png](https://qiita-image-store.s3.amazonaws.com/0/83170/106f16f6-caf7-5852-095c-1538f2c2c484.png)
まずは、このイベントハンドラがちゃんとリソースを変更したときのイベントが取得できるか確認するために、MsgBox()関数を埋め込んで動かしてみます。しかし、まだこれだけではイベントを受け取れません。
![image010.png](https://qiita-image-store.s3.amazonaws.com/0/83170/8f2ee572-2107-c33b-0599-413fa0306be1.png)
Projectのコードを開き、
![image011.png](https://qiita-image-store.s3.amazonaws.com/0/83170/bc8153dc-90d1-a3a6-440a-69a9499caf30.png)
左側のプルダウンメニューから「Project」を選択し、
![image012.png](https://qiita-image-store.s3.amazonaws.com/0/83170/1424a3f7-3d8c-ceb6-2635-52b132810058.png)
Open()を追加し、
![image015.png](https://qiita-image-store.s3.amazonaws.com/0/83170/89b451b4-af3b-35c4-4af4-45405926d646.png)
下図のコードを追加します。
![image025.png](https://qiita-image-store.s3.amazonaws.com/0/83170/bb2eec8d-87b4-1b13-d35b-9b18fc88fdc7.png)
これでようやく、イベントを拾えるようになります。
リソースを変更すると、メッセージが表示できるようになりました。
![image026.png](https://qiita-image-store.s3.amazonaws.com/0/83170/31ad7dd7-dc4a-8d24-2bd7-ef6fc8ce2560.png)
メッセージを表示するのはこれで問題ありませんが、クラスモジュールからはバーの色を直接変えることはできないので、グローバル変数経由で変更のあったタスクがどれかをThisProjectに伝えます。ThisProject側にグローバル変数「msgStr」を宣言しておき、これにタスクIDを入れます。
![image027.png](https://qiita-image-store.s3.amazonaws.com/0/83170/8dfce927-e66b-b1a6-ea48-6d6df12b65f8.png)
ThisProject側では、タスクの変更を検出するChange()関数を挿入しておきます。
![image028.png](https://qiita-image-store.s3.amazonaws.com/0/83170/030cf05f-eab0-ecb9-b444-cf42e83b3f20.png)
次に、各タスクをどのような色に変えるのか、調べておきます。
![image029.png](https://qiita-image-store.s3.amazonaws.com/0/83170/36d3e569-3fd2-6d2b-9bc6-68fb74d2e8ae.png)
バーの設定ダイアログを開き、
![image030.png](https://qiita-image-store.s3.amazonaws.com/0/83170/a24c1e62-d5f3-5f4d-70a8-d5b581eba92d.png)
「色」項目のポップアップメニューで「その他の色」を選択すると、RGBそれぞれの値を知ることができるので、メモっておきます。
![image031.png](https://qiita-image-store.s3.amazonaws.com/0/83170/0627e119-9736-9641-f784-e2597abe5f18.png)
先程追加したChange()関数で、下記のようにリソース名とバー色の関係を記述します。
![image032.png](https://qiita-image-store.s3.amazonaws.com/0/83170/a1d6e53a-9cef-ce37-5ce0-71ddffcb2157.png)
これで、下図のようにリソース名を変更すると、
![image033.png](https://qiita-image-store.s3.amazonaws.com/0/83170/4ad5057b-cff7-bb17-ebdd-a21aec9d92ce.png)
リソースのバー色に変更されるようになりました。
![image034.png](https://qiita-image-store.s3.amazonaws.com/0/83170/724b97d6-ed45-fbd7-0fc1-4b30b633b2fa.png)
メデタシメデタシ。