三流君 ken3のmemo置き場

三流プログラマーのメモ書きです。主にVBAやWindowsの話題が多いです

挨拶・自己紹介:
失敗続きのAB型の変わり者 :三流プログラマー Ken3です
フリーのエンジニア・個人事業主です・・と書くと聞こえはイイが(それとなくカッコよく聞こえるが)、 現在は小さな案件の受注請負 と 短期派遣 で 日々つつましく?ほそぼそと暮らしてます。

よく検索されるキーワード: [質問回答XXXXさんへ] [CreateObject] [VBA] [JRA競馬オッズ]

Outlook VBA マクロで分類 Categoriesの登録 蛇足でExcelから複数分類のセット

detail.chiebukuro.yahoo.co.jp

>メールを色分けして分類するために、既存の色分類項目ではなく、
>新規作成で名前と色を設定したいと考えています。
>おそらく、Categories.Addメソッドを使用するとは思うのですが苦戦しております。

>Categories オブジェクト (Outlook)
https://learn.microsoft.com/ja-jp/office/vba/api/outlook.categories

>Categories.Add メソッド (Outlook)
https://learn.microsoft.com/ja-jp/office/vba/api/outlook.categories.add

上記質問に反応してみた・・・
ここまで、調べているなら、もう既に解決済みかなぁ、、、と思いつつ、

OutlookVBA マクロで分類 Categoriesの登録にチャレンジ 蛇足でExcelから複数分類のセット処理 - YouTube
https://youtu.be/jzZi5BdKpXE
目次
00:00 やりたいこと
00:50 1.単純にOutlookマクロで分類を追加してみた
03:22 2.同じ項目名を追加するとどうなるか?
03:57 3.分類項目名が存在したら・・の処理を入れる
08:48 4.蛇足 単体テスト終了、次はExcelから複数登録?
13:24 5.あっ、増えすぎた分類項目を消したい時・・・

#OutlookVBA #ExcelVBA #VBA #Categories
#アウトルック #エクセル #マクロ #分類項目
#デバッグ #Debug

1.単純にOutlookマクロで分類を追加してみた
learn.microsoft.com
のコードを変更して、固定の値を書いてみた

' https://learn.microsoft.com/ja-jp/office/vba/api/outlook.categories
'のコードを参考にして
Sub tset20230121_Category_追加のテスト()

    Dim objNameSpace As Outlook.NameSpace
    Dim objCategory  As Outlook.Category   'あれ今回、使ってないや・・
 
    ' Obtain a NameSpace object reference.
    Set objNameSpace = Application.GetNamespace("MAPI")
 
    ' Check if the Categories collection for the Namespace
    ' contains one or more Category objects.
    ' objNameSpace.Categories.Count
    '↑なるほど、これで分類のカウントがわかるのか、今回は置いといて
    
    '分類を追加してみる
    '  Categories.Add メソッド (Outlook)
    ' https://learn.microsoft.com/ja-jp/office/vba/api/outlook.categories.add
    objNameSpace.Categories.Add "テスト分類名", olCategoryColorRed
    ' OlCategoryColor 列挙 (Outlook) ↑olCategoryColorRed 色定数が知りたい時
    ' https://learn.microsoft.com/ja-jp/office/vba/api/outlook.olcategorycolor
    
    ' Clean up.
    Set objCategory = Nothing
    Set objNameSpace = Nothing
 
End Sub

03:22 ~
2.同じ項目名を追加するとどうなるか?
↑上のコードを二回実行すると(※同じ値を追加すると、どうなるのか?)

重複エラー

実行時エラー 80070057
分類項目名が重複しています。分類項目名は一意である必要があります。

まぁ、そうなるよね。

03:57 ~
3.分類項目名が存在したら・・の処理を入れる

やり方、いろいろ、ありますが、
存在チェックを単純に、
Set objCategory = objNameSpace.Categories("分類名の文字列")
で、取得する、
3.1 取得できなかったら、objNameSpace.Categories.Addで追加
3.2 取得できたら、 objCategory.Color 色だけ変える

この方向でコードを修正すると、

' https://learn.microsoft.com/ja-jp/office/vba/api/outlook.categories
'のコードを参考にして
Sub tset20230121_Category_追加のテスト002()

    Dim str分類名 As String  'また日本語変数名かよ・・
    Dim n分類色 As Integer   '分類の色、今回ショートカットキーはテストしない

    '単純に入力、キャンセルチェックなし・・・
    str分類名 = InputBox("登録分類名?を入れて", "分類名", "テスト分類名")
    n分類色 = Val("0" & InputBox("色は?1:赤 5:緑 8:青 など", "色", "1")) '数値に変換
        ' OlCategoryColor 列挙 (Outlook) ↑olCategoryColorRed 色定数が知りたい時
        ' https://learn.microsoft.com/ja-jp/office/vba/api/outlook.olcategorycolor

    'NameSpace 複数アカウント設定時、分類がどうなのか?気になるけど後日の課題かな・・
    Dim objNameSpace As Outlook.NameSpace
    Set objNameSpace = Application.GetNamespace("MAPI")
 
    '分類
    Dim objCategory  As Outlook.Category   '今回、存在チェックを兼ねて使用
    Set objCategory = Nothing  'エラーチェックのため初期化
    On Error Resume Next 'エラーを無視して次に行く、見つからなかった時の判断用
    Set objCategory = objNameSpace.Categories(str分類名)
    On Error GoTo 0 'すぐに戻そうぜ※意外と忘れがちなので、Resume Nextとセットで
 
    '分類 objCategory が↑存在しなければ   追加する
    If objCategory Is Nothing Then    '分類を追加してみる
        '  Categories.Add メソッド (Outlook)
        ' https://learn.microsoft.com/ja-jp/office/vba/api/outlook.categories.add
        objNameSpace.Categories.Add str分類名, n分類色
    Else
        objCategory.Color = n分類色  '分類名が存在したので、色だけ変更
    End If
    
    ' Clean up.
    Set objCategory = Nothing
    Set objNameSpace = Nothing
 
End Sub

08:48 ~
4.蛇足 単体テスト終了、次はExcelから複数登録?

Excelなど、分類登録の表を作り、連続登録かなぁ・・・

シートイメージ

A列に分類名,B列に色を指定して、連続登録かな・・

Option Explicit

'Excel から Outlookの分類を追加する テスト
'A列の分類名 と B列の色 を 登録する(一方通行)
Sub tset20230121_Category_追加のテスト003()

    'Outlookの起動
    Dim oApp As Outlook.Application  'OutlookのApplication オブジェクトを入れる
    Set oApp = CreateObject("Outlook.Application") 'outlook起動をCreateObjectで
    
    'NameSpace 複数アカウント設定時、分類がどうなのか?気になるけど後日の課題かな・・
    Dim objNameSpace As Outlook.Namespace
    Set objNameSpace = oApp.GetNamespace("MAPI")
    '次は作業フォルダーの指定(.GetDefaultFolder) と 表示(.Display)
    Dim objFolder As Outlook.Folder
    Set objFolder = objNameSpace.GetDefaultFolder(9) '予定
    objFolder.Display  '表示
    
    Dim objCategory  As Outlook.Category '分類オブジェクト
    
    Dim str分類名 As String  'また日本語変数名かよ・・
    Dim n分類色 As Integer   '分類の色、今回ショートカットキーはテストしない
    
    'A2から空白になるまで登録する
    Dim y As Long
    For y = 2 To 999 '
        str分類名 = Trim(Cells(y, "A").Text) 'A列の分類名
        n分類色 = Val("0" & Cells(y, "B"))   'B列の色
        If str分類名 = "" Then Exit For 'A列が空白になったら抜ける
        
       '分類の存在チェックと登録
       Set objCategory = Nothing  'エラーチェックのため初期化
       On Error Resume Next 'エラーを無視して次に行く、見つからなかった時の判断用
       Set objCategory = objNameSpace.Categories(str分類名)
       On Error GoTo 0 'すぐに戻そうぜ※意外と忘れがちなので、Resume Nextとセットで
    
       '分類 objCategory が↑存在しなければ   追加する
       If objCategory Is Nothing Then    '分類を追加してみる
           '  Categories.Add メソッド (Outlook)
           ' https://learn.microsoft.com/ja-jp/office/vba/api/outlook.categories.add
           objNameSpace.Categories.Add str分類名, n分類色
       Else
           objCategory.Color = n分類色  '分類名が存在したので、色だけ変更
       End If
    
    Next y

   
    ' Clean up.
    oApp.Quit '起動したアウトルックの終了
    Set oApp = Nothing
    Set objCategory = Nothing
    Set objNameSpace = Nothing
 
    MsgBox "処理終了、Outlookの分類を確認してください"
 
End Sub

13:24 ~
5.あっ、増えすぎた分類項目を消したい時・・・

もう、テストで、グチャグチャですね・・・

使わなくなった、分類を削除したい・・
なんてことが、ある未来が見えたところで
今日は、失礼します。※おいおい、削除のコード書かないのかよ・・・


ken3memo.hatenablog.com
ken3memo.hatenablog.com

Ken3 ホームページ 目次

分類:HPを大きく分けると4つの柱(分類)です。

  1. [VBA・マクロ プログラミング]の解説
    当店の人気はVBA系のCreateObject("XXXXXX.application")で他のアプリケーションを操作するサンプルが人気です
  2. [プログラマーの愚痴]では、あまり見せたくない三流プログラマーの内面かな。
    三流君を踏み台にする
  3. [古いクラシック ASP(Active Server Pages)]の解説。
  4. [元コンビニ店長時代の話]が弟に巻き込まれ、失敗した脱サラ、畑違い?の仕事で失敗。
主に上記4つの分類でHP作成やメルマガの発行を行ってます。
※更新頻度が落ちていて情報の鮮度が悪いです。



本当に三流なんです(笑):たまにスゴイですねなんて言われることもありますが、
真実は→ [三流君の真実は...] ←を初めに見てくださるとわかると思います。
(からくりは、成功例↑しか載せてなくて ヒドイ失敗例はお蔵入り迷宮入りが多かったりします)