Excel VBA 新規ページをOffice2007-Office2010のレイアウトに近づけるためテーマを変更するマクロ Set Offce 2007-2010 Theme on New workbook


```vb
Sub SetThisWorkbookSetOffice2007_2010Theme()
Dim wb As Workbook: Set wb = ThisWorkbook
Dim sThem As String, sThemeFolder As String, FSO As Object: Set FSO = CreateObject("Scripting.FileSystemObject")
              sThemeFolder = FSO.GetParentFolderName(Application.Path) & "\Document Themes " & CInt(Application.Version) & "\"
               sThem = "Office Theme.thmx"
               wb.ApplyTheme (FSO.BuildPath(sThemeFolder, sThem))
               sThem = "Office 2007 - 2010.xml"
               wb.Theme.ThemeFontScheme.Load FSO.BuildPath(sThemeFolder & "\Theme Fonts", sThem) 'Fonts
               wb.Theme.ThemeColorScheme.Load FSO.BuildPath(sThemeFolder & "\Theme Colors", sThem) 'Colors
               sThem = "Office 2007 - 2010.eftx"
               wb.Theme.ThemeEffectScheme.Load FSO.BuildPath(sThemeFolder & "\Theme Effects", sThem)
Set FSO = Nothing
End Sub
```

# このテーマではない
[【Officeテーマ】と【Officeの背景】の変更はアカウントで](https://hamachan.info/win10/office/theme.html)
ちなみにシステム設定を使用するがおすすめです。
背景なんてどうでもいいので、バッサリオフにします。背景なしにします。

# このテーマ
[Word または Excel でテーマを変更して既定のテーマにする](https://support.microsoft.com/ja-jp/office/word-%E3%81%BE%E3%81%9F%E3%81%AF-excel-%E3%81%A7%E3%83%86%E3%83%BC%E3%83%9E%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%97%E3%81%A6%E6%97%A2%E5%AE%9A%E3%81%AE%E3%83%86%E3%83%BC%E3%83%9E%E3%81%AB%E3%81%99%E3%82%8B-c846f997-968e-4daa-b2d4-42bd2afef904)
>ドキュメントのテーマを使用すると、Word、Excel、および PowerPoint のドキュメント間での色、フォント、画像の書式設定による効果の調整が容易になり、更新も簡単になります。 このビデオでは、テーマ全体を変更する方法について説明します。テーマのフォント、色、または効果をカスタマイズするために以下を参照してください。 


ドキュメントのテーマが今回のテーマ。
上のコードでも`"\Document Themes "`たしかにフォルダ名にドキュメントのテーマがある。

[テーマの色について](http://officetanaka.net/excel/vba/graph/26.htm)
ただし、カスタマイズはフォント以外は時間の無駄なので、絶対にやってはいけない。

# もとはパワーポイント
[PowerPoint テンプレートとテーマの違い](https://support.microsoft.com/ja-jp/office/powerpoint-%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%81%A8%E3%83%86%E3%83%BC%E3%83%9E%E3%81%AE%E9%81%95%E3%81%84-e2408e10-e015-43b3-8b29-b99d128ae448)
> テーマ とテンプレート を使用すると、さまざまな手動書式を回避して、魅力的で一貫性のあるコンテンツを簡単に作成できます。

手動書式とは一体。。。マイクロソフトの解説は相変わらず人間が理解できるようになっていない。

> PowerPointテーマとは
テーマ は、あらかじめ定義された色、フォント、および視覚的効果のセットで、スライドに適用して統一されたプロフェッショナルな外観にします。
テーマを使用すると、簡単な操作でプレゼンテーションの外観を調和させることができます。 次に例を示します。
 - スライドにグラフィックス (表、図形など) を追加すると、PowerPoint は、他のスライド要素と互換性のあるテーマの色を適用します。
 - <B><Font Color = "RED">濃い色のテキストは、明るい背景 (逆も同様) に表示されるので、コントラストが強く読みやすくなります。</Font></B>

魅力的で一貫性のあるコンテンツを簡単に作成できます。
このためにマイクロソフがやったのはパワーポイントのテーマをワードとエクセルに持ち込んだのです。
もともとの目的は背景色を暗くしたり明るくしたりしても文字が読みやすいように。つまりスライドを想定している。
[PowerPoint で独自のテーマを作成する](https://support.microsoft.com/ja-jp/office/powerpoint-%E3%81%A7%E7%8B%AC%E8%87%AA%E3%81%AE%E3%83%86%E3%83%BC%E3%83%9E%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B-83e68627-2c17-454a-9fd8-62deb81951a6#OfficeVersion=Newer_versions_(Windows))
> テーマの概要
テーマは、スライドに適用する色、フォント、および背景のデザイン パターンです。
テーマを使用すると、簡単な操作でプレゼンテーションの外観を調和させることができます。 テーマによって定義されたサイズ、色、および配置がテキストとグラフィックに自動的に適用されます。つまり、個々のスライドを作成するときの手作業が軽減されます。

# OfficthemeとThema*の違い
[OfficeTheme オブジェクト (Office)](https://docs.microsoft.com/ja-jp/office/vba/api/office.officetheme)
> Microsoft Office テーマを表します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126919/3a1ae190-bc1c-e9d7-ad11-df9d8a522e41.png)

おわかりいただけるだろうか。

ThemeColorScheme
ThemeEffectScheme
ThemeFontScheme

この3つを持つ、いわばコレクションがOfficeThemeである。
[Office.OfficeTheme interface](https://docs.microsoft.com/ja-jp/javascript/api/office/office.officetheme?view=common-js-preview)
>Office テーマの色のプロパティにアクセスできるようにします。
Office テーマの色を使用すると、すべての Office ホスト アプリケーションに適用される File Office Account Office テーマ UI を使用して、ユーザーが選択した現在の Office テーマとアドインの配色を調整できます。 > > Using Office theme colors is appropriate for mail and task pane add-ins.

同じもののはずなのに、参照する場所で表現が異なる。
[ThemeColorScheme インターフェイス](https://docs.microsoft.com/ja-jp/dotnet/api/microsoft.office.core.themecolorscheme?view=office-pia)
> Microsoft Office 2007年のテーマの配色パターンを表します。

しかしドットネットのところに2007年とある。
Office2007のとき導入されたテーマはカスタマイズができなかった。これはOfficeTanakaに記載されている。
これをある程度扱えるように変えたため、このようなことになっているらしい。

# テーマの応用（業務用限定）とカスタマイズのヒント
[組織のMicrosoft 365テーマをカスタマイズする](https://docs.microsoft.com/ja-jp/microsoft-365/admin/setup/customize-your-organization-theme?view=o365-worldwide)
>"4.5:1 の最小色コントラスト比を満たしていない" というメッセージが表示されるのはなぜですか?
テキスト、アイコン、またはボタンの色と背景色の間の推奨コントラスト比は 4.5:1 です。 この推奨事項をオーバーライドして、テーマを保存することはできますが、これは要件ではありません。

このようにある程度全体のバランスを取って設計されている（ハイコントラストを除く）ということになっている。

# 2007 Visio
さらにPowerpointになったのは2010あたりで、最初はVISIOこそテーマの根源だった。
[Visio 2007 のテーマで使用する図形のデザイン](https://docs.microsoft.com/ja-jp/previous-versions/office/developer/office-2007/aa445858(v=office.12))
>Microsoft Office Visio 2007 では、新しいテーマ機能によって、Visio 図面のデザインおよび書式設定の方法が大きく変わりました。テーマ機能は、以前のバージョンの Visio の類似機能とは実装方法が異なるため、Visio 図形をデザインおよび作成する方法も変わります。

>テーマは "テーマの色" と "テーマの効果" に分かれており、それぞれ次の書式設定属性を制御します。

>テーマの効果
テーマの効果の属性:
 - フォント    線のパターン、太さ、透過性、および角の丸み
 - 塗りつぶしのパターンおよび透過性
 - 影のスタイル、透過性、オフセット、倍率、および方向
 - コネクタのパターン、太さ、透過性、角の丸み、および端点のスタイルとサイズ

テーマのしくみ
THEME 関数
テーマ機能は、主に、現在のテーマの書式設定を取得する新しい THEME シェイプシート関数によって実現されます。テーマをページに適用すると、テーマ機能によって制御されるすべての書式設定セルの式に THEME 関数が挿入されます。


> 表 2. THEME 関数の文字列: テーマの効果
テーマの属性 	文字列
英数字用のフォント 	"LatinFont"
日本語用のフォント 	"AsianFont"
コンプレックス スクリプト用のフォント 	"ComplexFont"
線のパターン 	"LinePattern"
線の太さ 	"LineWeight"
線の透過性 	"LineTransparency"
線の角の丸み 	"LineRounding"
塗りつぶしのパターン 	"FillPattern"
塗りつぶしの透過性 	"FillTransparency"
影の倍率 	"ShadowMagnification"
影の方向 	"ShadowDirection"
コネクタのパターン 	"ConnectorPattern"
コネクタの太さ 	"ConnectorWeight"
コネクタの透過性 	"ConnectorTransparency"
コネクタの角の丸み 	"ConnectorRounding"
コネクタの端点の始点のスタイル 	"ConnectorBegin"
コネクタの端点の終点のスタイル 	"ConnectorEnd"
コネクタの端点の始点のサイズ 	"ConnectorBeginSize"
コネクタの端点の終点のサイズ 	"ConnectorEndSize"

Visio 2007の記述はおそらくテーマフォントスキーム、テーマエフェクトスキームの内容を表していると考えられる。
また現在のVISIOのヘルプにはこのような解説が見当たらない。
また、この2007のトピックにはPowerpoint自体がない。
このため***Office Themeは2007と2010で扱いが大幅に変わった***と推測される。これがレイアウトのズレにつながるのだろう。

# テーマを変更する目的
Office2010以前からずっと引き継いてきているファイルを別のワークブックにコピーする、シートをこの新規ファイルに持ってくるとレイアウトが崩れることがある。

 - テキストボックスが変わる
 - セルの高さが変わる
 - 改ページがずれる
 - ページが4分の1になる

これらはテーマが変わってしまうことが原因。
フォントは改行サイズや行サイズに影響する。
エフェクトスキームはコネクタがあり、これが図形に影響していると思われる。

# かと言ってテーマの変え方は難しい
Officeが64か32か、また、Officeのバージョンで異なる。
スペースも多く、普通にやるとバグになる。
そこで、上記のようなマクロを組んだ。
途中まではエクセル自体の場所と、バージョンから導き出す。
もしかするとBuildPathで行けるのではないか、と思ったが、かなり効果があるようだ。