Publisher VBA ColorShemeをRGB分解する

#Publisherの特徴
##PublisherにはThemeColorがない
すくなくとも2019までない。ColorShemeはある
PublisherはWord Excel Powerpoint Access Visio Sharepoint Outlookを含め唯一CMYKが使える。
#CMYKからRGB変換は簡単にできる。
CMYKで配色を指定すると、それをRGBに変換することはできる。

#RGBからCMYKは簡単にできない
RGBで指定したものは、CMYKに分解することは簡単にはできない。


##Publisherは12色ではなく8色
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126919/805c8365-47bc-077d-a7d8-8bdf4da17f6d.png)
これが最新バージョンの配色である。Excelと違い、8色しかない。


##Application の一括設定プロパティ (Publisher)
https://docs.microsoft.com/ja-jp/office/vba/api/publisher.application.colorschemes
使用可能な配色パターンを表す**colorschemesコレクションを取得します。
次の使用例は、 colorschemesコレクションをループ処理し、各配色パターンの名前と、それに続くハイパーリンクの色の RGB 値を表示します

```vb
Dim cscLoop As ColorScheme
Dim cscAll As ColorSchemes

Set cscAll = Application.ColorSchemes

For Each cscLoop In cscAll
With cscLoop
Debug.Print "Color scheme: " & .Name _
& " / Followed hyperlink color: " _
& .Colors(ColorIndex:=pbSchemeColorFollowedHyperlink).RGB '<<<<<
End With
Next cscLoop
```

###ColorFormat
ColorFormat object (Publisher)
Represents the color of a one-color object or the foreground or background color of an object with a gradient or patterned fill. You can set colors to an explicit red-green-blue value by using the RGB property.

####ColorFormat.BaseCMYK
ColorFormat.BaseCMYK プロパティ (Publisher)
https://docs.microsoft.com/ja-jp/office/vba/api/publisher.colorformat.basecmyk
色に濃淡または網かけを適用する前に、親のColorFormatオブジェクトの基本のシアン、マゼンタ、イエロー、ブラック (CMYK) の色の値を返します。 読み取り専用です。
構文
Expression.Basecmyk

ColorFormatオブジェクトを表す変数を取得します。

戻り値
ColorCMYK
ColorCMYK
ColorFormat.CMYK プロパティ (Publisher)
https://docs.microsoft.com/ja-jp/office/vba/api/publisher.colorformat.cmyk
CMYK カラープロパティを表すColorcmykオブジェクトを取得します。
構文
CMYK
ColorFormatオブジェクトを表す変数を取得します。
戻り値
ColorCMYK

###PbSchemeColorIndex 列挙 (Publisher)
https://docs.microsoft.com/ja-jp/office/vba/api/publisher.pbschemecolorindex
現在の配色で指定する色を表します。

| Name|Value|Description ||
|:----------:|:----------------:|:-------------------:|:--------------------|
|pbSchemeColorNone |0|配色パターンなしに設定します。 ||
|pbSchemeColorMain|1 |メインの色に設定します。 ||
|pbSchemeColorAccent1|2| 強調色 1 の色に設定します。||
|pbSchemeColorAccent2|3 |強調色 2 の色に設定します。 ||
|pbSchemeColorAccent3|4| 強調色 3 の色に設定します。||
|pbSchemeColorAccent4|5| 強調色 4 の色に設定します。||
|pbSchemeColorHyperlink|6| ハイパーリンクの色に設定します。||
|pbSchemeColorFollowedHyperlink|7 |表示済みハイパーリンクの色に設定します。 |
|pbSchemeColorAccent5|8| 強調色 5 の色に設定します。 ||




[PbColorType 列挙 (Publisher)](https://docs.microsoft.com/ja-jp/office/vba/api/publisher.pbcolortype)

| Name|Value|Description ||
|:----------:|:----------------:|:-------------------:|:--------------------|
|pbColorTypeCMS|4|CMS ||
|pbColorTypeCMYK|3|CMYK ||
|pbColorTypeInk|5|Ink ||
|pbColorTypeMixed|-2|Mixed|混在|
|pbColorTypeRGB|1|RGB ||
|pbColorTypeScheme|2|Scheme |配色|

###PbColorScheme enumeration (Publisher)
https://docs.microsoft.com/en-us/office/vba/api/publisher.pbcolorscheme

Itemプロパティによって返される配色パターンを表します。 一連のコーディネートされた色の一貫した色を提供する文書にまとめて使用することをお勧めします。

|Name|Value|Description|
|:-------------|:----------------:|:-----------|
|pbColorSchemeAlpine|-1|Alpine|
|pbColorSchemeAqua|-2|Aqua|
|pbColorSchemeBerry|-3|Berry|
|pbColorSchemeBlackGray|-4|Black|Gray|
|pbColorSchemeBlackWhite|-58|Black|and|White|
|pbColorSchemeBrown|-5|Brown|
|pbColorSchemeBurgundy|-6|Burgundy|
|pbColorSchemeCavern|-7|Cavern|
|pbColorSchemeCelebration|-1004|Celebration|
|pbColorSchemeCherry|-1002|Cherry|
|pbColorSchemeCitrus|-8|Citrus|
|pbColorSchemeClay|-9|Clay|
|pbColorSchemeCranberry|-10|Cranberry|
|pbColorSchemeCrocus|-11|Crocus|
|pbColorSchemeCustom|1|Custom|
|pbColorSchemeDarkBlue|-61|DarkBlue|
|pbColorSchemeDesert|-12|Desert|
|pbColorSchemeField|-13|Field|
|pbColorSchemeFirstUserDefined|2000|FirstUserDefined|
|pbColorSchemeFjord|-14|Fjord|
|pbColorSchemeFloral|-15|Floral|
|pbColorSchemeGarnet|-16|Garnet|
|pbColorSchemeGlacier|-17||
|pbColorSchemeGreen|-59|Green|
|pbColorSchemeHeather|-18|Heather|
|pbColorSchemeIris|-19|Iris|
|pbColorSchemeIsland|-20|Island|
|pbColorSchemeIvy|-21|Ivy|
|pbColorSchemeLagoon|-22|Lagoon|
|pbColorSchemeLilac|-23|Lilac|
|pbColorSchemeMahogany|-24||
|pbColorSchemeMarine|-25|Marine|
|pbColorSchemeMaroon|-26|Maroon|
|pbColorSchemeMeadow|-27|Meadow|
|pbColorSchemeMist|-28|Mist|
|pbColorSchemeMistletoe|-29|Mistletoe|
|pbColorSchemeMonarch|-41|Monarch|
|pbColorSchemeMoss|-30|Moss|
|pbColorSchemeMountain|-31|Mountain|
|pbColorSchemeMulberry|-32|Mulberry|
|pbColorSchemeNavy|-33|Navy|
|pbColorSchemeNutmeg|-34|Nutmeg|
|pbColorSchemeOcean|-1000|Ocean|
|pbColorSchemeOlive|-35|Olive|
|pbColorSchemeOrange|-1003|Orange|
|pbColorSchemeOrchid|-36|Orchid|
|pbColorSchemeParrot|-37|Parrot|
|pbColorSchemePeach|-1005|Peach|
|pbColorSchemePebbles|-38|Pebbles|
|pbColorSchemePrairie|-39|Prairie|
|pbColorSchemePurple|-1001|Purple|
|pbColorSchemeRainForest|-40|Rain|Forest|
|pbColorSchemeRed|-60|Red|
|pbColorSchemeRedwood|-42|Redwood|
|pbColorSchemeReef|-43|Reef|
|pbColorSchemeSagebrush|-44|Sagebrush|
|pbColorSchemeSapphire|-45|Sapphire|
|pbColorSchemeShamrock|-46|Shamrock|
|pbColorSchemeSienna|-47|Sienna|
|pbColorSchemeSpice|-48|Spice|
|pbColorSchemeSunrise|-49|Sunrise|
|pbColorSchemeSunset|-50|Sunset|
|pbColorSchemeTeal|-51|Teal|
|pbColorSchemeTidepool|-52|Tidepool|
|pbColorSchemeTropics|-53|Tropics|
|pbColorSchemeTrout|-54|Trout|
|pbColorSchemeVineyard|-55|Vineyard|
|pbColorSchemeWaterfall|-56|Waterfall|
|pbColorSchemeWildflower|-57|Wildflower|

###pbcolormodel 列挙 (Publisher)
Represents the color model of the picture. 図のカラー モデルを表します



| Name|Value|Description ||
|:----------:|:----------------:|:-------------------:|:--------------------|
|pbColorModelCMYK|2|CMYK ||
|pbColorModelGreyScale|3|GreyScale ||
|pbColorModelRGB|1|RGB ||
|pbColorModelUnknown|4|Unknown ||

#ColorShcheme
現在のドキュメントで選択しているテーマカラー、及び、全リストを
一時フォルダに出力します。
Publisher専用です。
最初図形が必要だと書いていましたがこれは不要です。


```vb
Option Explicit
Type RGBColorCollection
Rd As Long
Gr As Long
Bl As Long
End Type
Sub pbThemacolor()
'for Microsoft Publisher Application
'1.ALT+F11、ALT I > M でVBEを開き、マクロモジュールを作成
'2.このマクロをコピー
Dim pD As Publisher.Document: Set pD = ThisDocument
Dim wWin As Publisher.Window: Set wWin = ActiveWindow
Dim wSchemeColor As Office.ThemeColorScheme
Dim wThemeColor As Office.ThemeColor
Dim i As Long
Dim C As RGBColorCollection
Dim N As Long
Dim pActiveScheme As Publisher.ColorScheme, pCScheme As Publisher.ColorScheme, pSchemes As Publisher.ColorSchemes: Set pSchemes = Application.ColorSchemes
Dim tcScheme As Office.ThemeColorScheme
Dim tcFontScheme As Office.ThemeFontScheme ': Set tcFontScheme = Theme.ThemeFontScheme
Dim wSHP As Publisher.Shape
Dim FSO: Set FSO = CreateObject("Scripting.FileSystemObject")
Dim oFolder 'As Folder
Dim oFile 'As File
Dim TS 'As TextStream
'Dim shp As Publisher.Shape: Set shp = pD.Pages(1).Shapes(1)
Dim arPbCindex
arPbCindex = Split("pbSchemeColorNone,pbSchemeColorMain,pbSchemeColorAccent1,pbSchemeColorAccent2,pbSchemeColorAccent3,pbSchemeColorAccent4,pbSchemeColorHyperlink,pbSchemeColorFollowedHyperlink,pbSchemeColorAccent5", ",")
Const fsoSpecialFolderTemp = 2
Const fsoForAppending = 8
Const fsoForReading = 1
Const fsoForWriting = 1
Const fsoOpenAsASCII = 0
Const fsoOpenAsUNICODE = -1
Const fsoOpenAsSystemDefault = 2
Const zC As String = ","
Set pActiveScheme = ActiveDocument.ColorScheme
Set oFolder = FSO.getspecialfolder(fsoSpecialFolderTemp)
Set TS = FSO.opentextfile(oFolder.Path & "\" & Format(Now, "yyyymmddhhmmss") & ".txt", fsoForAppending, True, fsoOpenAsUNICODE)
TS.writeline "現在選択されている配色のパターン名" & pActiveScheme.Name
For Each pCScheme In pSchemes
With pCScheme
N = .Colors(ColorIndex:=pbSchemeColorFollowedHyperlink)
C.Bl = Int(N / 65536)
C.Gr = Int((N - (C.Bl * 65536)) / 256)
C.Rd = N - (C.Gr * 256) - (C.Bl * 65536)
For i = 1 To 8
TS.writeline "Color scheme: " & .Name & ":Index:" & i & ":" _
& " /" & arPbCindex(i) & " /: " _
& .Colors(ColorIndex:=i).RGB & ":R" & C.Rd & ":G:" & C.Gr & ":B:" & C.Bl
'shp.Fill.ForeColor.RGB = N
Next
End With
Next
TS.Close
Set FSO = Nothing
End Sub

```

#CMYKToRGB
今度は四角形一つを作ってください。
それをCMYKで色を塗り、RGB分解する方法で取得します。
ところがこの逆はできません。
RGBで指定した色は、CMYKにはできず、エラーになります。

```vb
Public Type RGBColorCollection
Rd As Long
Gr As Long
Bl As Long
End Type
Public Type CMYKCollection
lngCyan As Long
lngMagenta As Long
lngYellow As Long
lngBlack As Long
End Type
Sub CMYKtoRGB()
'for Microsoft Publisher Application
'1.Publiserhで新しい文書(Document)を作成し、オートシェイプで四角形を一つ作る。
'2.ALT+F11、ALT I > M でVBEを開き、マクロモジュールを作成
'3.このマクロをコピー
Dim pD As Publisher.Document: Set pD = ThisDocument
Dim wWin As Publisher.Window: Set wWin = ActiveWindow
Dim wSchemeColor As Office.ThemeColorScheme
Dim wThemeColor As Office.ThemeColor
Dim i As Long
Dim C As RGBColorCollection
Dim N As Long
Dim pActiveScheme As Publisher.ColorScheme, pCScheme As Publisher.ColorScheme, pSchemes As Publisher.ColorSchemes: Set pSchemes = Application.ColorSchemes
Dim tcScheme As Office.ThemeColorScheme
Dim tcFontScheme As Office.ThemeFontScheme ': Set tcFontScheme = Theme.ThemeFontScheme
Dim wSHP As Publisher.Shape
Dim FSO: Set FSO = CreateObject("Scripting.FileSystemObject")
Dim oFolder 'As Folder
Dim oFile 'As File
Dim TS 'As TextStream
Dim shp As Publisher.Shape: Set shp = pD.Pages(1).Shapes(1)
Dim arPbCindex
Dim colorfmt As Publisher.ColorFormat
arPbCindex = Split("pbSchemeColorNone,pbSchemeColorMain,pbSchemeColorAccent1,pbSchemeColorAccent2,pbSchemeColorAccent3,pbSchemeColorAccent4,pbSchemeColorHyperlink,pbSchemeColorFollowedHyperlink,pbSchemeColorAccent5", ",")
Const fsoSpecialFolderTemp = 2
Const fsoForAppending = 8
Const fsoForReading = 1
Const fsoForWriting = 1
Const fsoOpenAsASCII = 0
Const fsoOpenAsUNICODE = -1
Const fsoOpenAsSystemDefault = 2
Const zC As String = ","
Dim colCMYK As CMYKCollection
Dim cmykColor As ColorCMYK
Dim iCyan As Long, iMagenta As Long, iYellow As Long, iBlack As Long
Set oFolder = FSO.getspecialfolder(fsoSpecialFolderTemp)
Set TS = FSO.opentextfile(oFolder.Path & "\" & Format(Now, "yyyymmddhhmmss") & ".txt", fsoForAppending, True, fsoOpenAsUNICODE)
For iCyan = 1 To 255 Step 50
For iMagenta = 1 To 255 Step 50
For iYellow = 1 To 255 Step 50
For iBlack = 1 To 255 Step 50
colCMYK.lngCyan = iCyan
colCMYK.lngMagenta = iMagenta
colCMYK.lngYellow = iYellow
colCMYK.lngBlack = iBlack
Set cmykColor = shp.Fill.ForeColor.CMYK 'ここでCMYKでColoroFormatを作ることを決める
cmykColor.SetCMYK Cyan:=iCyan, Magenta:=iMagenta, Yellow:=iYellow, Black:=iBlack: DoEvents '配色を指定
N = shp.Fill.ForeColor.RGB: DoEvents ’指定した配色のRGB値を取得して以下分解する
C.Bl = Int(N / 65536)
C.Gr = Int((N - (C.Bl * 65536)) / 256)
C.Rd = N - (C.Gr * 256) - (C.Bl * 65536)
TS.writeline "C:" & zC & iCyan & zC & "M:" & zC & iMagenta & zC & "Y:" & zC & iYellow & zC & "K:" & zC & iBlack & zC & "RGB" & zC & "R:" & zC & C.Rd & zC & "G:" & zC & C.Gr & zC & "Blue:" & C.Bl
Next iBlack
Next iYellow
Next iMagenta
Next iCyan
TS.Close
End Sub
```

Publisher の [プリンターの詳細設定] ダイアログ ボックス
https://support.office.com/ja-jp/article/publisher-%E3%81%AE-%E3%83%97%E3%83%AA%E3%83%B3%E3%82%BF%E3%83%BC%E3%81%AE%E8%A9%B3%E7%B4%B0%E8%A8%AD%E5%AE%9A-%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0-%E3%83%9C%E3%83%83%E3%82%AF%E3%82%B9-16dcf025-854d-4048-b342-dbfcb82d1d09
Publisher のこれらのオプションを使用して、さまざまな印刷ツールを制御できます。これらはウィザードでプリンターを設定するため、封筒や両面の文書を印刷したり、カラーの版を個別に印刷したり、印刷用マークを追加したりすることが簡単です。

### CMYKの設定とインクはここで説明しているようだ
Separations tab [分版] タブ
https://support.office.com/ja-jp/article/publisher-%E3%81%AE-%E3%83%97%E3%83%AA%E3%83%B3%E3%82%BF%E3%83%BC%E3%81%AE%E8%A9%B3%E7%B4%B0%E8%A8%AD%E5%AE%9A-%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0-%E3%83%9C%E3%83%83%E3%82%AF%E3%82%B9-16dcf025-854d-4048-b342-dbfcb82d1d09

Output section [出力] セクション
この設定の選択により、集版または分版のどちらを印刷するか、印刷する版、印刷する解像度を決定します。
Print colors as 色を印刷します。 カラー モデルを指定するのには、このオプションのいずれかを選択します。
Composite RGB 複合 RGB 色が RGB カラー モデルで定義されている版を印刷するには、このオプションを選択します。 これは、デスクトップ印刷オプションをお勧めします。
Composite Grayscale 複合グレースケール 色が灰色の網掛けで定義されている版を印刷するには、このオプションを選択します。
CMYK Cmyk (シアン、マゼンタ、黄、黒) で定義版を印刷するには、このオプションを選択します。
CMYK オプションを有効にするには、お使いのコンピューターに接続されているカラー PostScript レベル 2 またはこれ以降のプリンターが必要です。
[印刷] ダイアログ ボックスでカラー プリンターを選択せず、このオプションを選択した場合、カラー プリンターを選択するように通知するメッセージが表示されます。
Separations 版 文書内で使用されるインクごとに個別の版を印刷するには、このオプションを選択します。
注: [分版] を選択する場合、[白紙の版は印刷しない] および [ハーフトーン スクリーン] オプションが有効になります。

These plates これらの版
印刷のプロセスで使われるインクを定義するには、このオプションのいずれかを選択します。 ボックスの一覧で選択したオプションによってハーフトーン スクリーン]オプションは異なります。
注: このオプションは、Separations[分版] が選択されている場合にのみ、有効になります。

All defined inks すべての定義済みのインク
使用されているかどうかどうかは、個別の刷版の文書に対して定義したすべてのインクを印刷するには、このオプションを選択します。
Used inks only 使用したインクのみ
文書内で使用されているインクのみの個別の版を印刷するには、このオプションを選択します。
スポット カラーをプロセス カラーに変換します。 CMYK のと同じ値に文書内で使用するすべてのスポット カラーに変換するには、このオプションを選択し、プロセス カラー分版の一部として、これらのオブジェクトを印刷します。
白紙の版を印刷しません。 特定のページではなくが、文書内で使用されているインクの版を印刷しないようにするのには、このチェック ボックスを選択します。 たとえば、このチェック ボックスが選択されている場合、のみをブラックの版のみ黒のテキストを含むページが印刷されます。 色の写真が含まれるページ、シアン、マゼンタ、黄、および黒のインク プレートが印刷されます。
解決方法 表示されるオプションは、プリンターによって異なります。 たとえば、に加えて(既定) ] オプションで、他の解像度は、一覧内、600 x 600、1200 x 1200 または 1800 x 1800 します。 一般的に、リストの解像度は (dpi) です。 点が異なります)、によっては、プリンターや出力機器の場合があります。 可能な解像度は、使用しているプリンター ドライバーによって異なります。 プリンターが解像度はカスタマイズできません。 一部のプリンターでは、1 つだけの解像度で印刷を許可します。
[ハーフトーン スクリーン] セクション
行/インチ (lpi) を決定する設定を選択します。 設定は、[分版の印刷] 一覧で選択したオプションにより異なります。
注: これらのオプションは、[分版] が選択されている場合にのみ有効になります。
次の設定を使用します。 ユーザー設定の線スクリーン角度とプレートを使用するプロセス カラーとスポット カラーの頻度を設定するには、このチェック ボックスを選択します。 指定されたインクすべてを選択するか、によっては、使用したインクのみ、またはプロセスにスポット カラーに変換、印刷プレート、頻度、および角度のオプションが異なります。 既定オプションを変更する場合は、印刷業者に問い合わせてください。
Print plate 印刷プレート インクの版を印刷する] チェック ボックスを選択します。
Frequency 頻度 すべての版の画面とハーフトーンのすべてのユーザー設定の線の画面頻度を入力します。
Angle 角度 すべての版の画面とハーフトーンのすべてのユーザー設定の線スクリーン角度を入力します。
Publisher の既定の線数は、133 行/インチ (lpi) です。 Publisher の既定の角度は次のとおりです。
ブラック (K):45 度
シアン (C):105 度
マゼンタ (M):75 度
イエロー (Y):90 度
スポット カラー: 使用されている色数によって異なります。 Publisher では、45 度で最初のスポット カラーを印刷します。 その他のスポット カラーは 105、75、30、60、90、135、15、165、120、0 度で印刷されます。