Word 2013以降で新元号に対応するにはかっこ悪いけど日付CCでdocx形式で保存しよう

#Docx形式でWordの文書を保存する理由
日付選択コンテンツコンツロールがdoc形式では使えないため。
word2010でも使えますが境界色を設定しない方がよいかもしれません。
補足：またDocx形式でも互換モードの時は使えません。互換モードを解除する必要があります。互換モードは日付選択コンテンツコントロール(以下、「日付CC」と略す。)のほか[Word 2010・2013でオブジェクトの選択と表示がグレーアウトして選択できない](https://www.relief.jp/docs/word-not-use-selection-task-pane.html)など制約がある。解除方法はこちらを参照すること。[新拡張子なのに互換モードと表示される](https://hamachan.info/win8/word/gokan2.html)

#新元号に対応する方法
Word2016は新元号に対応する準備がされている。
このため、日付を日付CCで入力し、docxもしくはdocmで保存する(互換モードではないこと)。
このようにしておくとWordの更新で新しい元号に自動的に設定される。
Word2013は更新されるか不明だが、いざというときは西暦4桁表示に変換できる。

##手動で挿入
[よねさんのword&Excel講座 Word2010 日付選択コンテントコントロールの使い方](http://www4.synapse.ne.jp/yone/word2010/word2010_contents_date.html)
開発タブを表示する必要がある。
 またWord2013で微妙に改善されている。[Word におけるコンテンツ コントロール](https://msdn.microsoft.com/ja-jp/library/office/jj889465.aspx?f=255&MSPPError=-2147217396#WordCC_WhatsNew)
Word 2013 におけるコンテンツ コントロールの改善
Word 2013 では、コンテンツ コントロールに 3 つの主要な改善が加えられました。すなわち、視覚化の改善、リッチ テキスト コンテンツ コントロールの XML マッピングのサポート、新しい繰り返しコンテンツ用のコンテンツ コントロールです。
視覚化の改善
Word 2013 では、次の 3 つのうちのいずれかの状態で個々のコンテンツ コントロールを表示できます。
    境界ボックス
    開始/終了タグ
    なし
そして境界ボックスの時、Word2013以降はフォーカスがない限り視覚化されなくなった。

##VBA
とりあえずInputBoxで今日の日付を登録できるようにした。
Tagは編集中は見えないが、和暦の表示形式を示している。
これは西暦表示に変換するときに検索で使用できる

```vb
Sub InsertDateCC()
'For Word 2013 Later

'For Word 2013 Later

Dim wDoc As Word.Document: Set wDoc = ThisDocument
Dim wRng As Word.Range
Dim wdContentCtrl As ContentControl
Dim DT As Date
Dim buf As String

On Error GoTo Terminator
buf = InputBox("日付を入力してください", "日付挿入", Date)
If IsDate(buf) = False Then GoTo Terminator
DT = CDate(buf)
Set wRng = Selection.Range
Set wdContentCtrl = wRng.ContentControls.Add(wdContentControlDate) '[WdContentControlType 列挙 (Word)](https://msdn.microsoft.com/ja-jp/vba/word-vba/articles/wdcontentcontroltype-enumeration-word)
'Const wdContentControlDate = 6
With wdContentCtrl
'.PlaceholderText = DT
 .Tag = "CC_Date_Jpn_ggge_m_d_aaa" 'Titleと違い、編集中は表示されないが、Wordに格納されている。
 .Color = wdColorAqua '境界色
 .MultiLine = True '複数行が可能。ただしテキストとリッチテキストにしか有効ではない
 .Title = "Date" & Format(DT, "yyyymmdd") 'ここの月は小文字でよい
 .Range.Text = DT
 '.DateCalendarType = wdCalendarWestern 'グレゴリオ暦 0 [WdCalendarType 列挙 (Word)](https://msdn.microsoft.com/ja-jp/vba/word-vba/articles/wdcalendartype-enumeration-word?f=255&MSPPError=-2147217396)
 .DateDisplayFormat = "ggge年M月d日(aaa)"
 .LockContentControl = False 'True:delete Unable コンテンツコントロール削除不可
 .LockContents = False 'True : Modify contents value unable 値変更不可
End With
Exit Sub
Terminator:
MsgBox buf & "は日付と解釈できません"
End Sub
```

###和暦から西暦(yyyy/M/d)
wdoc.contentcontrolsで集合になっているので、Tagで絞り込むか表示形式で絞り込んで表示形式を変更する

```vb

Sub TranspherDateCC_JpnFormatToyyyyMMdd()
'For Word 2013 Later
Dim wDoc As Word.Document: Set wDoc = ThisDocument
Dim wRng As Word.Range
Dim wdCC As ContentControl, wdCCs As ContentControls
Dim DT As Date
Dim buf As String
Set wdCCs = wDoc.ContentControls
For Each wdCC In wdCCs
If wdCC.DateDisplayFormat = "ggge年M月d日(aaa)" Then ’ここの月は大文字のM
'If wdCC.DateDisplayFormat = "ggge年M月d日(aaa)" And wdCC.Tag = "CC_Date_Jpn_ggge_m_d_aaa" Then
'タイトルやTagをつけておくと、変更するべき日付CCを絞り込むことができる。
wdCC.DateDisplayFormat = "yyyy/MM/dd"
wdCC.Tag = ""
wdCC.Tag = "DateyyyyMMdd"
End If
Next wdCC
End Sub
```

###西暦から和暦曜日付き

```vb
Sub TranspherDateCC_yyyyMMddtoJpnDateFmtgggeMdaaa()
Dim wDoc As Word.Document: Set wDoc = ThisDocument
Dim wRng As Word.Range
Dim wdCC As ContentControl, wdCCs As ContentControls
Dim DT As Date
Dim buf As String
Set wdCCs = wDoc.ContentControls
For Each wdCC In wdCCs
If wdCC.DateDisplayFormat = "yyyy/MM/dd" Then
wdCC.DateDisplayFormat = "ggge年M月d日(aaa)"
wdCC.Tag = ""
wdCC.Tag = "CC_Date_Jpn_ggge_m_d_aaa"
End If
Next wdCC
End Sub
```

#Word2016は新元号対応準備中(かっこ悪いけど)
日付コンテンツコンツロールで日付の表示形式をggge年M月d日で、日付を2019年5月1日以降にすると？？１年M月d日と表示されます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/126919/b952ca40-372f-5074-981a-ed84030558c2.png)


#上記のマクロはアドインかNormalのテンプレートに
アドインをお勧めします。
保存するファイルはDocx形式になりマクロがつきません。
この日付CCはマクロではないし、フォームでもないのです。