我們知道,大綱級(jí)別定義良好的Word
文檔可以輕松用Edraw master
轉(zhuǎn)換成思維導(dǎo)圖。但是,對(duì)于一個(gè)極長的文檔,例如一本教材,直接導(dǎo)入Edraw master
轉(zhuǎn)換后的思維導(dǎo)圖,因?yàn)閮?nèi)容過多,仍然很難閱讀。這時(shí)候,可以考慮分章節(jié)將長文檔分割成一個(gè)一個(gè)小文檔,再將小文檔導(dǎo)入Edraw master
,轉(zhuǎn)換后的思維導(dǎo)圖就比較好用了。
下面的宏可以將一個(gè)極長的文檔分成每一個(gè)“標(biāo)題 4”段落及其所屬內(nèi)容構(gòu)成的短文檔。如果想按其他級(jí)別的段落來分割文檔,只需將宏中的變量styleName
賦為其他值即可。(注:
2024年1月26日修訂代碼,不再需要強(qiáng)制限定最后一頁有且只有一個(gè)樣式為styleName
的段落)
除了可以按樣式名分割文檔,直接按大綱級(jí)別(OutlineLevel
)來分割文檔也是可以的,只需要將以下代碼中的If .ParagraphFormat.Style = styleName Then
一行注釋掉,并取消下一行If .Paragraphs(1).OutlineLevel = OlLevel then
的注釋,其中,OlLevel
是指定大綱級(jí)別的變量。文章來源:http://www.zghlxwxcb.cn/news/detail-532924.html
Sub 按大綱級(jí)別分割文檔()
Dim pos%, i%, rng As Range, titPara As Paragraph
Dim subDoc As Document, mainDoc As Document, path$, fileName$, styleName$, olLevel%
Set mainDoc = ActiveDocument '原文檔對(duì)象
'指定的分割文檔的大綱級(jí)別或該級(jí)大綱的樣式名稱。只需指定一個(gè)
styleName = "標(biāo)題 4" '指定的分割文檔的大綱級(jí)別對(duì)應(yīng)的段落的樣式名稱
olLevel = 4 '指定的分割文檔的大綱級(jí)別
'子文檔保存路徑,這里保存在主文檔所在目錄。注意路徑要以反斜杠結(jié)束
path = mainDoc.path & "\"
' pages = mainDoc.ComputeStatistics(wdStatisticPages) '獲取文檔總頁數(shù)
i = 1
Application.ScreenUpdating = False
' 某些版本的office執(zhí)行文檔創(chuàng)建關(guān)閉會(huì)出現(xiàn)操作無效錯(cuò)誤,忽略
On Error Resume Next
With Selection
' 光標(biāo)移動(dòng)至文檔開頭
.HomeKey unit:=wdStory
Do
'If .ParagraphFormat.Style = styleName Then ' 根據(jù)樣式名定位原文檔分割位置
If .Paragraphs(1).OutlineLevel = olLevel Then '根據(jù)大綱級(jí)別定位原文檔分割位置
Set titPara = .Paragraphs(1)
'一個(gè)數(shù)字序列號(hào)+指定大綱段落文本作為分割文件的文件名
'也可每移動(dòng)一個(gè)標(biāo)題比較一下當(dāng)前標(biāo)題的大綱級(jí)別與指定樣式段落的大綱級(jí)別
'如果當(dāng)前段落大綱級(jí)別較高,則將段落文本連接起來作為文件名的一部分,
'這樣,從文件名即可看出該文件所屬的章節(jié)
fileName = Mid(titPara.Range, 1, Len(titPara.Range) - 1) '去掉段落末尾的回車符號(hào)
' 如果原文檔標(biāo)題4是以序號(hào)加上頓號(hào)做前綴,在文件名中去掉前綴。沒有頓號(hào)pos會(huì)返回0
pos = InStr(fileName, "、")
' 拼接文件名
fileName = Format(i, "00000") & Mid(fileName, pos + 1)
Set rng = .Bookmarks("\headinglevel").Range '獲取該標(biāo)題下所有內(nèi)容
rng.Copy '復(fù)制內(nèi)容保存到分割的文檔中
Set subDoc = Documents.Add '新建文檔保存分割出的內(nèi)容
' 指定分割的文檔中“正文”樣式的字體
With subDoc.Styles("正文").Font
.NameFarEast = "宋體"
.NameAscii = "Source Code Pro"
.NameOther = "Source Code Pro"
End With
subDoc.Content.Paste '粘貼復(fù)制的內(nèi)容,源格式粘貼
' 將字體文件嵌入分割的文檔中一起保存,移植到缺少Source Code Pro字體的電腦也能正常顯示格式
subDoc.EmbedTrueTypeFonts = True
subDoc.SaveAs path & fileName & ".docx" '保存分割的文檔中
subDoc.Close '關(guān)閉分割的文檔中
mainDoc.Activate '激活原文檔,防止意外處理其他文檔
i = i + 1
End If
pos = .Start '記錄當(dāng)前光標(biāo)位置
.GoTo wdGoToHeading, wdGoToNext, 1 '光標(biāo)移動(dòng)到下一個(gè)標(biāo)題
' 當(dāng)光標(biāo)移動(dòng)到文檔最后一個(gè)標(biāo)題后,執(zhí)行上一行的.GoTo命令光標(biāo)位置不再發(fā)生變化,此時(shí)即完成了分割,可以退出循環(huán)
If .Start = pos Then Exit Do
Loop
End With
Set subDoc = Nothing
Set mainDoc = Nothing
Set rng = Nothing
Debug.Print "共生成新文檔數(shù)量為" & (i - 1)
Debug.Print "處理完成。"
Application.ScreenUpdating = True
End Sub
上述代碼中只有一個(gè)技巧值得注意,那就是使用預(yù)定義書簽"\headinglevel"
取得指定樣式段落所屬的全部內(nèi)容(包括子標(biāo)題、文本段落和圖片、表格等)。Word
中的預(yù)定義書簽有下面一些(來源:微軟官方文檔)文章來源地址http://www.zghlxwxcb.cn/news/detail-532924.html
Bookmark | 說明 |
---|---|
\Sel | 當(dāng)前所選內(nèi)容或插入點(diǎn)。 |
\PrevSel1 | 發(fā)生編輯的最新選擇;轉(zhuǎn)到此書簽等效于運(yùn)行 一次 GoBack 方法。 |
\PrevSel2 | 倒數(shù)第二次編輯過的所選內(nèi)容;定位至該書簽相當(dāng)于運(yùn)行兩次 GoBack 方法。 |
\StartOfSel | 當(dāng)前所選內(nèi)容的起點(diǎn)。 |
\EndOfSel | 當(dāng)前所選內(nèi)容的終點(diǎn)。 |
\Line | 當(dāng)前行或當(dāng)前所選內(nèi)容的首行。 如果插入點(diǎn)在本段非最后一行的行尾,該書簽包含完整的下一行。 |
\Char | 當(dāng)前字符,它是插入點(diǎn)后面的字符(當(dāng)沒有選定內(nèi)容時(shí))或所選內(nèi)容的第一個(gè)字符。 |
\Para | 當(dāng)前段,即包含插入點(diǎn)的段,或在選定多個(gè)段落時(shí)所選段落中的第一段。 請(qǐng)注意,如果插入點(diǎn)或所選內(nèi)容位于文檔的最后一段,則“\Para”書簽不包含段落標(biāo)記。 |
\Section | 當(dāng)前節(jié),并可能包含節(jié)尾的分隔符。 當(dāng)前節(jié)包含插入點(diǎn)或所選內(nèi)容。 如果所選內(nèi)容包含多個(gè)節(jié),則“\Section”書簽為所選內(nèi)容中的第一節(jié)。 |
\Doc | 活動(dòng)文檔中的全部內(nèi)容(文檔結(jié)尾處的段落標(biāo)記除外)。 |
\Page | 當(dāng)前頁,并可能包含頁尾的分隔符。 當(dāng)前頁包含插入點(diǎn)。 如果當(dāng)前所選內(nèi)容包含多頁,則“\Page”書簽為所選內(nèi)容的第一頁。 注意,如果插入點(diǎn)或所選內(nèi)容位于文檔中的最后一頁,則“\Page”書簽不包含文檔結(jié)尾的段落標(biāo)記。 |
\StartOfDoc | 文檔開頭。 |
\EndOfDoc | 文檔結(jié)尾。 |
\Cell | 表格中當(dāng)前的單元格,即包含插入點(diǎn)的單元格。 如果當(dāng)前所選內(nèi)容包含表中一個(gè)或多個(gè)單元格,則“\Cell”書簽為所選內(nèi)容的第一個(gè)單元格。 |
\Table | 當(dāng)前表格,即包含插入點(diǎn)或所選內(nèi)容的表格。 如果所選內(nèi)容包含多個(gè)表格,則“\Table”書簽為所選內(nèi)容中完整的第一個(gè)表格(即使未選定完整的表格)。 |
\HeadingLevel | 包含插入點(diǎn)或所選內(nèi)容的標(biāo)題,及其子標(biāo)題和文字。 如果當(dāng)前所選內(nèi)容為正文文字,則“\HeadingLevel”書簽包含上一個(gè)標(biāo)題以及該標(biāo)題包含的任何子標(biāo)題和文字。 |
到了這里,關(guān)于使用VBA將大綱級(jí)別定義良好的單個(gè)Word文檔按指定的大綱樣式分割成多個(gè)文檔的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!