Word VBA 最終版にする 互換モードの種類を判定する関数 変更履歴の切り替え

# 最終版Finlalにする 解除する

最終版ってなんというのだろうかと思っていたのですが、Finalでした。
まんまだ。
まあ最終版は簡単に解除できますが、VBAでも解除できます。

```vb

Sub WordAcitiveDocumentFinalVersion()
'最終版にする
ActiveDocument.Final = True
'最終版を解除する
ActiveDocument.Final = False
End Sub

```

# Doc*形式を互換モードにする
[Document.CompatibilityMode プロパティ (Word)](https://msdn.microsoft.com/ja-jp/vba/word-vba/articles/document-compatibilitymode-property-word)

##注釈(機械翻訳がひどすぎる)
Word の以前のバージョンで作成された Word で文書を開くと、互換モードになっています。互換モードことがなくなります新機能や強化された機能 Word で使用可能なドキュメントを作業中に Word の以前のバージョンを使用してドキュメントを編集するユーザーが編集できるようにするため。

##Remarks(米英語言文)
When you open a document in Word that was created in a previous version of Word, Compatibility Mode is turned on. Compatibility Mode ensures that no new or enhanced features in Word are available while working with a document, so that people who edit the document using previous versions of Word will have full editing capabilities.


##注釈(書き直すとこんな感じ？）
以前のバージョンで作成されたWordで開くときは、互換モード(CompatibilityMode)になっています。互換モードが働いているときには、Wordの新しい機能や拡張された機能が使えません。このため、以前のバージョンを使う場合は、完全な互換モードを使う必要があります。Wordの新機能や拡張された機能を使う場合には互換モードを解除する必要がありますが、以前のバージョンのWordでは編集できなくなります。

```vb

Sub isActiveDocumentCompatibilityMode()
Debug.print Application.Version = ActiveDocument.CompatibilityMode
End Sub

```

##定数
[WdCompatibilityMode 列挙 (Word)](https://docs.microsoft.com/en-us/office/vba/api/Word.WdCompatibilityMode)

|名前      |     値|  説明|
|:-------:|:----:|:----:|
|wdCurrent|65535|最新バージョンの Word に該当する互換性モードです。
|wdWord2003|11|Word は、Word 2003 で最も互換性のあるモードに配置されます。このモードでは、Word の新しい機能が無効になります。|
|wdWord2007|12|Word は、Office Word 2007 で最も互換性のあるモードに配置されます。このモードでは無効になって Wordare に新しい機能の場合。|
|wdWord2010|14|Word と最も互換性があるモードに配置されます。このモードでは無効になって Wordare に新しい機能の場合。|
|wdWord2013|15|既定値。Word のすべての機能が有効になります|

##英語版は微妙にニュアンスが違う

[WdCompatibilityMode Enumeration (Word)](https://docs.microsoft.com/en-us/office/vba/api/word.wdcompatibilitymode)
https://docs.microsoft.com/en-us/office/vba/api/word.wdcompatibilitymode

|名前      |     値|  説明|
|:-------:|:----:|:----|
|wdCurrent|65535|Compatibility mode equivalent to the latest version of Word.|
|wdWord2003 |11 |Word is put into a mode that is most compatible with Word 2003. Features new to Word are disabled in this mode.|
|wdWord2007 |12 |Word is put into a mode that is most compatible with Office Word 2007. Features new to Wordare disabled in this mode.|
|wdWord2010 |14|Word is put into a mode that is most compatible with . Features new to Wordare disabled in this mode.
|wdWord2013 |15|Default. All Word features are enabled.|

これは日本語版と同じだがDocs版がある
[WdCompatibilityMode Enum ](https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.interop.word.wdcompatibilitymode?view=word-pia)
    Docs.NET.NET API BrowserMicrosoft.Office.Interop.WordWdCompatibilityMode


Namespace: Microsoft.Office.Interop.Word 
Assembly:    Microsoft.Office.Interop.Word.dll
Specifies the compatibility mode that Word 2010 uses when opening a document.


|名前      |     値|  説明|
|:-------|:----|:----|
|wdCurrent|	65535|Compatibility mode equivalent to the latest version of Word.|
|wdWord2003 	|11|Word 2010 is put into a mode that is most compatible with Word 2003. Features new to Word 2010 are disabled in this mode.|
|wdWord2007 |12|Word 2010 is put into a mode that is most compatible with Word 2007. Features new to Word 2010 are disabled in this mode.|
|wdWord2010|14|All Word 2010 features are enabled.|
|wdWord2013|15 	|Default. All Word 2013 features are enabled.|

WdWord2003ｎ記述はWord2010では最もWord2003と互換性がありますが、Word2010の新しい機能はこのモードではすべて無効になります
ということになっている。
つまりVersionごとに同じ定数を使っても互換性が違う可能性がある。

#よく似た定数
定数は名前wdCompatibilityModeCurrentのような名前はない。

https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.word.server.conversions.compatibilitymode?view=sharepoint-server

これは互換性を維持して前のバージョンへ保存するときの値。
Namespace:    Microsoft.Office.Word.Server.Conversions 
Assembly:    Microsoft.Office.Word.Server.dll

Specifies the compatibility mode of the output file.


| Fields | value | note |
|:------:|:------:|:-----------------------|
|Current|-1| Convert the file to the most recent version.|
|MaintainCurrentSetting |0 | Maintain the current compatibility mode setting specified by the file.ファイルの現在の互換性を維持|
|Word2003 |11|Convert the file to Word 97 to Word 2003 compatibility mode.|
|Word2007 |12| Convert the file to Word 2007 compatibility mode.|
|Word2010 | 14 | Convert the file to Word 2010 compatibility mode.|
|Word2013 | 15 |Convert the file to Microsoft Word 2013 compatibility mode.|


```vb

Function fnWordDocumentCompatibilityModeis(lpValue As Long) As String
' 2018/09/12
' Q11Q
' For Word 2010 Later
' ActiveDocument.CompatibilityModeで取得した長整数型(LONG)の値がどのバージョンか、文字列型で返す関数です
Select Case lpValue
Case Is = 65535
fnWordDocumentCompatibilityModeis = "Current Version"
Case Is = 11
fnWordDocumentCompatibilityModeis = "Word 2003"
Case Is = 12
fnWordDocumentCompatibilityModeis = "Word 2007"
Case Is = 14
fnWordDocumentCompatibilityModeis = "Word 2010"
Case Is = 15
fnWordDocumentCompatibilityModeis = "Word 2013"
Case Else
fnWordDocumentCompatibilityModeis = "Error or Unknown"
End Select
End Function

```

## SetCompatibilitymode
[Document.SetCompatibilityMode メソッド (Word)](https://msdn.microsoft.com/ja-jp/VBA/Word-VBA/articles/document-setcompatibilitymode-method-word)

ドキュメントの互換性モードを設定します。
構文
Expression.SetCompatibilityMode(***mode***)

式ドキュメントオブジェクトを表す変数です。
Modeは上の数字を使う。
読み取り専用と言いながら、互換性を変更することは可能だ。

[文書が互換モードかどうかを判定するWordマクロ 初心者備忘録]
(https://www.ka-net.org/blog/?p=5477)
ここよりもっと解説が詳しいが、サンプルで下の方の

```vb
Dim ta: Set ta = CreateObject("TLI.TLIApplication")
```
これを使っているサンプルは現在は動かないので注意。


##互換モードは2010よりはよくなっていない説を唱える

### 初心者備忘録より引用 URLは上記と同じ

>Word 2010で追加された、DocumentオブジェクトのCompatibilityModeプロパティを使うと、対象となる文書に設定されている、互換モードのバージョンを取得することができます。

この機能は2010より追加されている。推定だが、互換モードはおそらく2010より2013の方が2003の互換性が高いということはない。上記のDocsの記述から2010以上の機能を無効化して互換するためである。

##互換モードは一見同じようで違う
このように互換モードは、表示は同じでも設定は違う場合がある。

# 変更履歴(TrackRivisions)のオンとオフを切り替える
Toggle TrackRivisions
toggleは切り替えると訳した方がいいみたいですね。Trackが引きずるつまり、履歴。Rivisionが歴史修正主義、つまり日本をバカにさせているネトウヨの思想にも使われますね。なんかあまりいイメージのプロパティ名とは思えません。覚えやすいのは覚えやすいですけどね。

[変更履歴のオン・オフを切り替えるWordマクロ](https://www.relief.jp/docs/word-macro-toggle-track-revisions.html)

このコードでもいいのですが
[VBA マクロ高速化のために停止すべき3項目 t-hom’s diary](https://thom.hateblo.jp/entry/2015/08/31/063500)
このようにProperty Letを標準モジュールで使って切り替える方法があります。これを使ってみます。標準モジュールでもPropetry Letが使えるという例です。

### ActiveDocumentとThisDocument
個人的にはThisの方が好きです。ActiveにしたDocumentに見境なくコードが効くのは危ないからです。Debug.Printの行はSampleなので置いていますが、もちろん削除してよいです。
Property Let toggleTrackRivisions(ByVal Flag As Boolean)のようにもかけて、Reliefさんと同じ1行で書けます。ちょっと好みでThisにしました。

```vb
Option Explicit
''' これは標準モジュール用のコードです '''
''' 2018/09/12 By Q11Q
''' For Word 2007 Later

Sub test()
  toggle変更履歴TrackRivisions = False
  toggle変更履歴TrackRivisions = True
End Sub

Property Let toggle変更履歴TrackRivisions(ByVal Flag As Boolean)
With ActiveDocument
.TrackRevisions = Flag
Debug.Print .TrackRevisions
End With
End Property

Property Let toggleTrackRivisions(ByVal Flag As Boolean)
ThisDocument.TrackRevisions = Flag : Debug.Print ThisDocument.TrackRevisions
End Property

```