如何用vba在word中快速移动或选中内容区域?
轉(zhuǎn)自:http://www.exceloffice.net/archives/1598
在word中經(jīng)常需要操作特定位置的文本內(nèi)容,定位文本內(nèi)容就顯得尤為重要。
在word vba中Range、?Selection 對象有多種移動、定位、選擇文本內(nèi)容的方法和屬性。
在這些方法和屬性中,有兩類枚舉常量是經(jīng)常要用到的,一類是移動、定位、選擇的單位常量WdUnits,比如是按照行、段落、單詞、還是句子進行移動、定位。
以下就是在word中會用到的16種單位常量枚舉:
| 名稱 | 值 | 說明 | 常量的定義 |
| wdCell | 12 | 1個單元格 | Const wdCell=12 |
| wdCharacter | 1 | 1個字符 | Const wdCharacter=1 |
| wdCharacterFormatting | 13 | 字符格式 | Const wdCharacterFormatting=13 |
| wdColumn | 9 | 一列 | Const wdColumn=9 |
| wdItem | 16 | 選中的項目 | Const wdItem=16 |
| wdLine | 5 | 一行 | Const wdLine=5 |
| wdParagraph | 4 | 一個段落 | Const wdParagraph=4 |
| wdParagraphFormatting | 14 | 段落格式 | Const wdParagraphFormatting=14 |
| wdRow | 10 | 一行 | Const wdRow=10 |
| wdScreen | 7 | 一個屏幕 | Const wdScreen=7 |
| wdSection | 8 | 一個節(jié) | Const wdSection=8 |
| wdSentence | 3 | 一句話 | Const wdSentence=3 |
| wdStory | 6 | 全文 | Const wdStory=6 |
| wdTable | 15 | 一個表格 | Const wdTable=15 |
| wdWindow | 11 | 一個窗口 | Const wdWindow=11 |
| wdWord | 2 | 一個單詞 | Const wdWord=2 |
另一類是移動、定位、選擇的方向枚舉常量WdMovementType,WdCollapseDirection等。
如下所示:
| 名稱 | 值 | 說明 | 常量的定義 |
| wdExtend | 1 | 將當(dāng)前的選擇區(qū)域的結(jié)尾擴展到指定單位的結(jié)尾 | Const wdExtend=1 |
| wdMove | 0 | 取消當(dāng)前的選擇區(qū)域, ? 然后將光標(biāo)移動到指定單位的結(jié)尾 | Const wdMove=0 |
| wdCollapseStart | 1 | 取消當(dāng)前的選擇區(qū)域,然后將光標(biāo)定位到開頭 | Const wdCollapseStart=1 |
| wdCollapseEnd | 0 | 取消當(dāng)前的選擇區(qū)域,然后將光標(biāo)定位到結(jié)尾 | Const wdCollapseEnd=0 |
1.使用Collapse方法快速取消選擇內(nèi)容區(qū)域,使光標(biāo)不選中任何一個字符。
Visual Basic
Sub QQ1722187970() Const wdCollapseStart = 1 Const wdCollapseEnd = 0 With Word.Selection .Collapse (wdCollapseStart) '不帶參數(shù)默認是wdCollapseStart .Collapse End With End Sub
| 1 2 3 4 5 6 7 8 9 | Sub QQ1722187970() ????Const wdCollapseStart = 1 ????Const wdCollapseEnd = 0 ????With Word.Selection ????????.Collapse (wdCollapseStart) ????????'不帶參數(shù)默認是wdCollapseStart ????????.Collapse ????End With End Sub |
如果在word文檔中選中了某段文本內(nèi)容區(qū)域,則運行上述代碼將取消選中文本內(nèi)容區(qū)域,光標(biāo)將定位在取消選擇前的文本內(nèi)容區(qū)域的起始位置。如果把參數(shù)改為wdCollapseEnd,則定位在結(jié)束位置。
如果要折疊的區(qū)域是一個段落,則wdCollapseEnd后將定位在當(dāng)前段落標(biāo)記符之后的一個字符前,也就是下一個段落的開頭。如果要折疊的區(qū)域是整個word文檔的最后一個段落,則wdCollapseEnd后將定位到最后一個段落標(biāo)記符前。
可以用以下的代碼進行驗證:
Visual Basic
Sub QQ1722187970() Dim oDoc As Document Set oDoc = Word.ActiveDocument Dim oRng As Range Dim oP As Paragraph With oDoc Set oP = .Paragraphs(1) Set oRng = oP.Range Debug.Print oRng.Start, oRng.End oRng.Collapse 0 Debug.Print oRng.Start, oRng.End End With End Sub
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | Sub QQ1722187970() ????Dim oDoc As Document ????Set oDoc = Word.ActiveDocument ????Dim oRng As Range ????Dim oP As Paragraph ????With oDoc ????????Set oP = .Paragraphs(1) ????????Set oRng = oP.Range ????????Debug.Print oRng.Start, oRng.End ????????oRng.Collapse 0 ???????? Debug.Print oRng.Start, oRng.End ????End With End Sub |
2.使用HomeKey和?EndKey方法使光標(biāo)定位到指定單位內(nèi)容的開頭和結(jié)尾。
Visual Basic
Sub QQ1722187970() With Word.Selection .HomeKey wdLine Debug.Print .Start .EndKey wdLine Debug.Print .End End With End Sub
| 1 2 3 4 5 6 7 8 | Sub QQ1722187970() ????With Word.Selection ????????.HomeKey wdLine ????????Debug.Print .Start ????????.EndKey wdLine ????????Debug.Print .End ????End With End Sub |
上述代碼將返回光標(biāo)所在的內(nèi)容區(qū)域的那一行的開始位置和那一行的結(jié)束位置。
如果要從當(dāng)前光標(biāo)所在的位置開始擴展選擇的話,可以添加第二個參數(shù),代碼如下:
Visual Basic
Sub QQ1722187970() With Word.Selection .HomeKey wdLine, wdExtend .EndKey wdLine, wdExtend End With End Sub
| 1 2 3 4 5 6 | Sub QQ1722187970() ????With Word.Selection ????????.HomeKey wdLine, wdExtend ????????.EndKey wdLine, wdExtend ????End With End Sub |
經(jīng)過測試,HomeKey和?EndKey方法的第一個參數(shù)unit只能用wdLine和wdStory,其它單位都不能用。
3.使用StartOf、EndOf方法實現(xiàn)與HomeKey、EndKey類似的效果。
4.使用Expand方法擴展當(dāng)前的選擇區(qū)域
代碼如下:
Visual Basic
Sub QQ1722187970() With Word.Selection .Expand wdParagraph End With End Sub
| 1 2 3 4 5 | Sub QQ1722187970() ????With Word.Selection ????????.Expand wdParagraph ????End With End Sub |
它與EndOf、EndKey、HomeKey等方法不同的是,它會自動當(dāng)當(dāng)前選擇區(qū)域左右擴展到指定的單位區(qū)域內(nèi),比如當(dāng)選中某個段落中的某些文本內(nèi)容時,使用上述代碼將自動選中當(dāng)前選擇區(qū)域所在的整段段落區(qū)域。
5.使用Shrink方法不斷地收縮選區(qū)
Shrink方法可以將當(dāng)前的選擇區(qū)域按照整個文檔(entire document),節(jié)( section),段落( paragraph),句子( sentence),單詞( word),插入點( insertion point)的順序不斷地收縮當(dāng)前的選擇區(qū)域。
6.使用Extend方法不斷地擴展選區(qū),或者按照指定的字符擴展選區(qū)。
與Shrink方法類似的,當(dāng)使用Extend方法不帶參數(shù)時,可以按照單詞(word),句子( sentence),段落( paragraph),節(jié)( section),整個文檔( entire document)這樣的順序依次擴展當(dāng)前的選擇區(qū)域。
當(dāng)Extend方法帶參數(shù)時,它可以帶一個字符參數(shù),表示將與當(dāng)前選擇區(qū)域的結(jié)尾位置開始向下尋找該字符,如果找到了就擴展當(dāng)前的選區(qū)到該字符。這里要特別注意的就是,該參數(shù)只能是一個字符,如果超過一個字符,該方法將會無效。
代碼如下:
Visual Basic
Sub QQ1722187970() With Word.Selection .Extend "點" End With End Sub
| 1 2 3 4 5 | Sub QQ1722187970() ????With Word.Selection ????????.Extend "點" ????End With End Sub |
利用這個方法可以實現(xiàn)很多逐字符判斷的程序。
7.使用Move方法快速地前后移動任意的單位:
使用Move方法有兩個參數(shù),一個是Unit參數(shù),表示要移動的單位,另一個參數(shù)是Count,表示要移動的單位數(shù)量,如果是負數(shù)則往前移動,如果是正數(shù)則往后移動。
比如如下的代碼可以定位到中間的頁面:
Visual Basic
Sub QQ1722187970() '當(dāng)前位置插入一個分節(jié)符 Word.Selection.InsertBreak wdSectionBreakNextPage '繼續(xù)插入一個分節(jié)符 Word.Selection.InsertBreak wdSectionBreakNextPage '定位到中間的頁面 Word.Selection.Move wdSection, -1 End Sub
| 1 2 3 4 5 6 7 8 | Sub QQ1722187970() ????'當(dāng)前位置插入一個分節(jié)符 ????Word.Selection.InsertBreak wdSectionBreakNextPage ????'繼續(xù)插入一個分節(jié)符 ????Word.Selection.InsertBreak wdSectionBreakNextPage ????'定位到中間的頁面 ????Word.Selection.Move wdSection, -1 End Sub |
?
其它相關(guān)文章推薦:
- 如何用vba獲得word range對象所在的行的文本內(nèi)容?
- 如何用vba判斷word文檔中是否有高亮(顏色)的文字?
- 如何用vba批量刪除Word文檔中的空白頁?
- 如何用vba刪除access數(shù)據(jù)庫中表的記錄?
- 如何用vba實現(xiàn)將ppt幻燈片中的圖片批量導(dǎo)出為獨立的圖片文件?
- 如何用vba創(chuàng)建一個空白的zip壓縮文件?
總結(jié)
以上是生活随笔為你收集整理的如何用vba在word中快速移动或选中内容区域?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。