如何用vba在word中快速移动或选中内容区域?
轉自:http://www.exceloffice.net/archives/1598
在word中經常需要操作特定位置的文本內容,定位文本內容就顯得尤為重要。
在word vba中Range、?Selection 對象有多種移動、定位、選擇文本內容的方法和屬性。
在這些方法和屬性中,有兩類枚舉常量是經常要用到的,一類是移動、定位、選擇的單位常量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 | 一個節 | 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 | 將當前的選擇區域的結尾擴展到指定單位的結尾 | Const wdExtend=1 |
| wdMove | 0 | 取消當前的選擇區域, ? 然后將光標移動到指定單位的結尾 | Const wdMove=0 |
| wdCollapseStart | 1 | 取消當前的選擇區域,然后將光標定位到開頭 | Const wdCollapseStart=1 |
| wdCollapseEnd | 0 | 取消當前的選擇區域,然后將光標定位到結尾 | Const wdCollapseEnd=0 |
1.使用Collapse方法快速取消選擇內容區域,使光標不選中任何一個字符。
Visual Basic
Sub QQ1722187970() Const wdCollapseStart = 1 Const wdCollapseEnd = 0 With Word.Selection .Collapse (wdCollapseStart) '不帶參數默認是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) ????????'不帶參數默認是wdCollapseStart ????????.Collapse ????End With End Sub |
如果在word文檔中選中了某段文本內容區域,則運行上述代碼將取消選中文本內容區域,光標將定位在取消選擇前的文本內容區域的起始位置。如果把參數改為wdCollapseEnd,則定位在結束位置。
如果要折疊的區域是一個段落,則wdCollapseEnd后將定位在當前段落標記符之后的一個字符前,也就是下一個段落的開頭。如果要折疊的區域是整個word文檔的最后一個段落,則wdCollapseEnd后將定位到最后一個段落標記符前。
可以用以下的代碼進行驗證:
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方法使光標定位到指定單位內容的開頭和結尾。
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 |
上述代碼將返回光標所在的內容區域的那一行的開始位置和那一行的結束位置。
如果要從當前光標所在的位置開始擴展選擇的話,可以添加第二個參數,代碼如下:
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 |
經過測試,HomeKey和?EndKey方法的第一個參數unit只能用wdLine和wdStory,其它單位都不能用。
3.使用StartOf、EndOf方法實現與HomeKey、EndKey類似的效果。
4.使用Expand方法擴展當前的選擇區域
代碼如下:
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等方法不同的是,它會自動當當前選擇區域左右擴展到指定的單位區域內,比如當選中某個段落中的某些文本內容時,使用上述代碼將自動選中當前選擇區域所在的整段段落區域。
5.使用Shrink方法不斷地收縮選區
Shrink方法可以將當前的選擇區域按照整個文檔(entire document),節( section),段落( paragraph),句子( sentence),單詞( word),插入點( insertion point)的順序不斷地收縮當前的選擇區域。
6.使用Extend方法不斷地擴展選區,或者按照指定的字符擴展選區。
與Shrink方法類似的,當使用Extend方法不帶參數時,可以按照單詞(word),句子( sentence),段落( paragraph),節( section),整個文檔( entire document)這樣的順序依次擴展當前的選擇區域。
當Extend方法帶參數時,它可以帶一個字符參數,表示將與當前選擇區域的結尾位置開始向下尋找該字符,如果找到了就擴展當前的選區到該字符。這里要特別注意的就是,該參數只能是一個字符,如果超過一個字符,該方法將會無效。
代碼如下:
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 |
利用這個方法可以實現很多逐字符判斷的程序。
7.使用Move方法快速地前后移動任意的單位:
使用Move方法有兩個參數,一個是Unit參數,表示要移動的單位,另一個參數是Count,表示要移動的單位數量,如果是負數則往前移動,如果是正數則往后移動。
比如如下的代碼可以定位到中間的頁面:
Visual Basic
Sub QQ1722187970() '當前位置插入一個分節符 Word.Selection.InsertBreak wdSectionBreakNextPage '繼續插入一個分節符 Word.Selection.InsertBreak wdSectionBreakNextPage '定位到中間的頁面 Word.Selection.Move wdSection, -1 End Sub
| 1 2 3 4 5 6 7 8 | Sub QQ1722187970() ????'當前位置插入一個分節符 ????Word.Selection.InsertBreak wdSectionBreakNextPage ????'繼續插入一個分節符 ????Word.Selection.InsertBreak wdSectionBreakNextPage ????'定位到中間的頁面 ????Word.Selection.Move wdSection, -1 End Sub |
?
其它相關文章推薦:
- 如何用vba獲得word range對象所在的行的文本內容?
- 如何用vba判斷word文檔中是否有高亮(顏色)的文字?
- 如何用vba批量刪除Word文檔中的空白頁?
- 如何用vba刪除access數據庫中表的記錄?
- 如何用vba實現將ppt幻燈片中的圖片批量導出為獨立的圖片文件?
- 如何用vba創建一個空白的zip壓縮文件?
總結
以上是生活随笔為你收集整理的如何用vba在word中快速移动或选中内容区域?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 丑数~~~~
- 下一篇: python使用xlwings合并exc