「選択位置より前」と「選択位置以降」とで、文書を2分割するマクロです。手動で行うと地味に面倒な作業なので、マクロ化しておくと便利です。
仕組みとコード
元の文書のコピーを2個作成し、一方は選択位置以降を削除、他方は選択位置より前を削除します。元の文書は残ります。文書の分割箇所に一時的にブックマークを設定する仕組みです。
Public Sub 選択位置で文書を分割()
Const nameBM As String = "vba_Split" 'ブックマーク名
Dim oDoc As Document
Dim nameA As String, nameB As String
Set oDoc = ActiveDocument
'状態チェック
If oDoc.Saved = False Then GoTo ENDUP
If Selection.Information(wdWithInTable) Then GoTo ENDUP
nameA = Replace(oDoc.Name, ".doc", "_1.doc")
nameB = Replace(oDoc.Name, ".doc", "_2.doc")
'現在位置にブックマークを設定してコピーを作成
oDoc.Bookmarks.Add nameBM, Selection.Paragraphs(1).Range
oDoc.SaveAs2 oDoc.Path & "\" & nameB
oDoc.SaveAs2 oDoc.Path & "\" & nameA
'前半ファイル…ブックマーク以降を削除して保存
oDoc.Range( _
Start:=oDoc.Bookmarks(nameBM).Range.Start, _
End:=oDoc.Content.End).Delete
oDoc.Save
'後半ファイル…ブックマークより前を削除して保存
Set oDoc = Documents.Open(oDoc.Path & "\" & nameB)
oDoc.Range( _
Start:=oDoc.Content.Start, _
End:=oDoc.Bookmarks(nameBM).Range.Start).Delete
oDoc.Bookmarks(nameBM).Delete 'ブックマーク削除
oDoc.Save
ENDUP:
Set oDoc = Nothing
End Sub
状態チェック
文書が未保存の場合、表内が選択されている場合は処理を中止しています。ほかにも正常動作しない条件(ヘッダー・フッターが選択されている場合など)はあるので必要に応じて補ってください。
ブックマークの設定
Document.Add
(
ブックマーク名,
設定対象Range)
分割位置を保持するために、選択範囲の先頭段落にブックマークを設定しています。
ブックマーク設定範囲の先頭を取得
Document.Bookmarks(
ブックマーク名).Range.Start
ブックマークの開始位置から、削除範囲の開始位置、終了位置を特定しています。
削除範囲の他方位置である文書の先頭と末尾は、Document.Content.Start
、Document.Content.End
で求められます。