本文的對象是:有一定Excel VBA基礎,對Word VBA還沒有什么認識,想在Excel中通過VBA操作Word還有困難的人。
一、新建Word引用
需要首先創建一個對 Word Application 對象的引用。在VBA中,工具-引用,選取“MicroSoft Word 11.0 Object Library”。
方法一、New Word.Application
Dim Wordapp As Word.Application
Set Wordapp = NewWord.Application
Wordapp.Visible = True '可見
'Wordapp.ScreenUpdating =False '屏幕刷新
Dim WordD As Word.Document '定義word類
Set WordD = Wordapp.Documents.Add '新建文檔
'Set WordD = Wordapp.Documents.open(filename) '打開文檔
'……
WordD.Close '關閉文檔
Set WordD = Nothing
WordApp.Quit '退出Word對象
方法二、CreateObject
Dim WordApp As Object
Set WordApp =CreateObject("Word.Application") '新建Word對象
‘后續操作及退出一樣……
方法三、GetObject
文件已打開的情況下,使用:SetWordD=GetObject(filename),可建立對文檔的引用,如果文件沒有打開,則還需要先用方法一或二來操作。
至於方法一和方法二的區別,在網上詢問了一下,大師們的回答是:
方法一:前期綁定,好處是在對象后輸入句點可以給出快速提示,因為需要先引用對象,所以容易出現版本兼容問題。
方法二:后期綁定,沒有提示,根據運行代碼機器上對象的版本創建對象,兼容性好。
提示:有時二者有較大區別,可論壇搜索字典對象,建議編寫代碼時使用前期綁定,發布時使用后期綁定。
二、認識Word的結構
Excel有:
Excel.Application ’Excel引用
Excel.Application. Workbooks ’工作簿
Excel.Application. Workbooks.Sheets(1) ’工作表
工作表下是Range,區域;Cells(row,col),單元格
Word有:
Word.Application
Word.Application.Documents ’文檔
文檔下有字符、單詞、句子、段落和節。字符組成單詞,單詞組成句子,句子組成段落。此外,每個文檔具有一個包含一個或多個節的 Sections 集合,每一個節都有一個包含該節頁眉和頁腳的HeadersFooters 集合。
Characters(index)
Words(index)
Sentences(index)
Paragraphs(index)
Sections(index)
前三個返回Range對象,能直接使用任何區域屬性或方法修改該Range 對象。后面二個返回該集合的單個成員,而不是 Range 對象,不能直接使用區域屬性或方法。如下使用例子:Words(1)后面直接.Copy,而.Paragraphs(1)和.Copy之間多了一個Range。
Selection.Words(1).Copy
ActiveDocument.Paragraphs(1).Range.Copy
Characters:字符,ActiveDocument.Sentences(1).Characters.Count,第一句的字符總數。
Words:單詞,對於英文來說是二個空格之間的字母加空格,對於中文,一個標點符號,一個漢字,或一個詞(按照微軟的輸入法中的詞組定義?)。(感覺不是很可靠?)
Sentences:句子,以句號結束?感覺也不是一個很可靠的范圍,感覺還是字符、段落、節,控制起來靠譜一些。
Range 對象表示文檔中的一個連續范圍,由一個起始字符位置和一個終止字符位置定義。這個連續范圍可以小到一個插入點,大到整個文檔。
Dim rngPa As Range
Set rngPa =ActiveDocument. Characters (1) '第一個字符
Set rngPa = ActiveDocument.Range( _
Start:=ActiveDocument.Paragraphs(1).Range.Start, _
End:=ActiveDocument.Paragraphs(4).Range.End) ‘第1段頭到第4段尾
Set rngPa = ActiveDocument.Range(Start:=0,End:=10) ‘當前文檔前10個字符
rngPa.Select
選定,我覺得用處不大,原因就是為什么要選中呢?能操作就直接操作,不能的話,就選中吧(他可以說是沒辦法的辦法)。
range對象的賦值:(包括任意的對象,Set是對對象賦值的標准語句)
set a=b
和變量的賦值:a=1不一樣
第三段:通過錄制宏生成代碼,修改如下:
三、通過錄制宏生成代碼
有了對Word基本結構的認識,想操作這些對象應該使用什么方法、修改哪些屬性?不知道就“錄制宏”。錄制宏是我們認識未知對象的很好方法之一,通過宏錄制器將操作譯成Word的 Visual Basic 代碼,再根據需要修改代碼。Word中錄制與Excel不同的是,不能使用鼠標移動光標或選中一行,只能使用鍵盤來移動,或用Shift+方向鍵來選中。以下幾句話就是鍵盤的:上、下、左、右、Home、End、Shift+左選中5個字符、Shift+右選中5個字符。
Selection.MoveUp Unit:=wdLine, Count:=1
Selection.MoveDown Unit:=wdLine, Count:=1
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.MoveRight Unit:=wdCharacter, Count:=1
Selection.HomeKey Unit:=wdLine
Selection.EndKey Unit:=wdLine
Selection.MoveLeft Unit:=wdCharacter, Count:=5, Extend:=wdExtend
Selection.MoveRight Unit:=wdCharacter, Count:=5, Extend:=wdExtend
錄制的宏使用 Selection 屬性返回 Selection 對象。即:錄制的宏總是以Selection.開頭的,如上。要想使用這個Selection.,有時候我們就不得不先對特定的對象.Select,選中。
當然,Selection是一個Range,Characters、Words、Sentences也是Range,Paragraphs(n). Range, Sections(2). Range也是Range,那我們就可以將Selection.后面的語句嫁接到前面這些Range之后,就不用先.Select了。
錄制的宏,通過嫁接或者復制到EXCEL VBA之后,有的運行會出錯,此時應檢查以下幾項:
1、第一項中要求的“引用”建立了沒?
2、利用VBA提醒功能檢查語句。VBA編輯過程中,通常在打下. 之后(需要前期綁定?),該對象所有的方法、屬性都會顯示出來,利用這個特點,可以檢查錄制的宏,能否嫁接到需要操作的對象之后。提示里有就能,沒有就不能。
3、部分轉換函數,Word VBA里有,Excel VBA里可能沒有,遇到這樣的情況,也可能出錯。
例:
WordD.Paragraphs(1).Range.ParagraphFormat.FirstLineIndent = CentimetersToPoints(0.35)
Selection.ParagraphFormat.FirstLineIndent = CentimetersToPoints(0.35)是“首行縮進2字符”操作錄制的,嫁接后,運行出錯,按方法2檢查:.ParagraphFormat.FirstLineIndent能用在Range之后,那么就是CentimetersToPoints(0.35)出問題了?這顯然是一個函數,字面意思是“厘米轉換成點數”,(錄制時我明明輸入的是“2字符”,錄下來咋成了厘米為單位呢?)那是否是Excel VBA里沒有這個函數呢?(我不知道),將=后面直接改為數字運行通過,最后試下來=20大約相當於5號字的“首行縮進2字符”。(這個20,就是20Points?0.35cm=20 Points?)
(有人可能會說這樣的辦法太笨,有什么好辦法請告知。先謝過!)
三、通過錄制宏生成代碼
有了對Word基本結構的認識,想操作這些對象應該使用什么方法、修改哪些屬性?不知道就“錄制宏”。錄制宏是我們認識未知對象的很好方法之一,通過宏錄制器將操作譯成Word的 Visual Basic 代碼,再根據需要修改代碼。Word中錄制與Excel不同的是,不能使用鼠標移動光標或選中一行,只能使用鍵盤來移動,或用Shift+方向鍵來選中。以下幾句話就是鍵盤的:上、下、左、右、Home、End、Shift+左選中5個字符、Shift+右選中5個字符。
Selection.MoveUp Unit:=wdLine, Count:=1
Selection.MoveDown Unit:=wdLine, Count:=1
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.MoveRight Unit:=wdCharacter, Count:=1
Selection.HomeKey Unit:=wdLine
Selection.EndKey Unit:=wdLine
Selection.MoveLeft Unit:=wdCharacter, Count:=5, Extend:=wdExtend
Selection.MoveRight Unit:=wdCharacter, Count:=5, Extend:=wdExtend
錄制的宏使用 Selection 屬性返回 Selection 對象。即:錄制的宏總是以Selection.開頭的,如上。要想使用這個Selection.,有時候我們就不得不先對特定的對象.Select,選中。
當然,Selection是一個Range,Characters、Words、Sentences也是Range,Paragraphs(n). Range, Sections(2). Range也是Range,那我們就可以將Selection.后面的語句嫁接到前面這些Range之后,就不用先.Select了。
錄制的宏,通過嫁接或者復制到EXCEL VBA之后,有的運行會出錯,此時應檢查以下幾項:
1、第一項中要求的“引用”建立了沒?
2、利用VBA提醒功能檢查語句。VBA編輯過程中,通常在打下. 之后(需要前期綁定?),該對象所有的方法、屬性都會顯示出來,利用這個特點,可以檢查錄制的宏,能否嫁接到需要操作的對象之后。提示里有就能,沒有就不能。
3、部分轉換函數,Word VBA里有,Excel VBA里可能沒有,遇到這樣的情況,也可能出錯。
例:
WordD.Paragraphs(1).Range.ParagraphFormat.FirstLineIndent = CentimetersToPoints(0.35)
Selection.ParagraphFormat.FirstLineIndent = CentimetersToPoints(0.35)是“首行縮進2字符”操作錄制的,嫁接后,運行出錯,按方法2檢查:.ParagraphFormat.FirstLineIndent能用在Range之后,那么就是CentimetersToPoints(0.35)出問題了?這顯然是一個函數,字面意思是“厘米轉換成點數”,(錄制時我明明輸入的是“2字符”,錄下來咋成了厘米為單位呢?)那是否是Excel VBA里沒有這個函數呢?(我不知道),將=后面直接改為數字運行通過,最后試下來=20大約相當於5號字的“首行縮進2字符”。(這個20,就是20Points?0.35cm=20 Points?)
(有人可能會說這樣的辦法太笨,有什么好辦法請告知。先謝過!)
四、Word vba常用語句100句
1、系統參數
(01) Application.ActivePrinter ‘獲取當前打印機
(02) Application.Height '當前應用程序文檔的高度
(03) Application.Width ‘當前應用程序文檔的寬度
(04) Application.Build ‘獲取Word版本號和編譯序號
(05) Application.Caption ‘當前應用程序名
(06) Application.DefaultSaveFormat '返回空字符串,表示Word文檔
(07) Application.DisplayRecentFiles '返回是否顯示最近使用的文檔的狀態
(08) Application.Documents.Count '返回當前打開的文檔數
(09) Application.FontNames.Count ‘返回當前可用的字體數
(10) Application.Left ‘返回當前文檔的水平位置
(11) Application.MacroContainer.FullName '返回當前文檔名,包括所在路徑
Application.MacroContainer.pach '返回當前文檔路徑
Application.ActiveDocument.Path ‘獲得文件的相對路徑
(12) Application.NormalTemplate.FullName '返回文檔標准模板名稱及所在位置
(13) Application.RecentFiles.Count '返回最近打開的文檔數目
(14) Application.System.CountryRegion '返回應用程序所在的地區代碼
(15) Application.System.FreeDiskSpace ‘返回應用程序所在磁盤可用空間
(16) Application.System.HorizontalResolution '返回顯示器的水平分辨率
(17) Application.System.VerticalResolution '返回顯示器的垂直分辨率
(18) Application.System.LanguageDesignation '返回系統所使用的語言
(19) Application.System.MathCoprocessorInstalled ‘返回系統是否安裝了數學協處理器
(20) Application.System.OperatingSystem ‘返回當前操作系統名
(21) Application.System.ProcessorType '返回計算機處理器名
(22) Application.System.Version ‘返回操作系統的版本號
(23) Application.Templates.Count '返回應用程序所使用的模板數
(24) Application.UserName '返回應用程序用戶名
(25) Application.Version ‘返回應用程序的版本號
2、Documents/Document對象
(26) ActiveDocument.AttachedTemplate.FullName '返回當前文檔采用的模板名及模板所在位置
(27) ActiveDocument.Bookmarks.Count '返回當前文檔中的書簽數
(28) ActiveDocument.Characters.Count '返回當前文檔的字符數
(29) ActiveDocument.CodeName ‘返回當前文檔的代碼名稱
(30) ActiveDocument.Comments.Count ‘ 返回當前文檔中的評論數
(31) ActiveDocument.Endnotes.Count '返回當前文檔中的尾注數
(32) ActiveDocument.Fields.Count '返回當前文檔中的域數目
(33) ActiveDocument.Footnotes.Count ‘返回當前文檔中的腳注數
(34) ActiveDocument.FullName '返回當前文檔的全名及所在位置
(35) ActiveDocument.HasPassword '當前文檔是否有密碼保護
(36) ActiveDocument.Hyperlinks.Count '返回當前文檔中的鏈接數
(37) ActiveDocument.Indexes.Count '返回當前文檔中的索引數
(38) ActiveDocument.ListParagraphs.Count '返回當前文檔中項目編號或項目符號數
(39) ActiveDocument.ListTemplates.Count '返回當前文檔中使用的列表模板數
(40) ActiveDocument.Paragraphs.Count '返回當前文檔中的段落數
(41) ActiveDocument.Password=XXX '設置打開文件使用的密碼
(42) ActiveDocument.ReadOnly '獲取當前文檔是否為只讀屬性
(43) ActiveDocument.Saved '當前文檔是否被保存
(44) ActiveDocument.Sections.Count '當前文檔中的節數
(45) ActiveDocument.Sentences.Count ‘當前文檔中的語句數
(46) ActiveDocument.Shapes.Count '當前文檔中的形狀數 ,圖形?
(47) ActiveDocument.Styles.Count '當前文檔中的樣式數
(48) ActiveDocument.Tables.Count ‘當前文檔中的表格數
(49) ActiveDocument.TablesOfAuthorities.Count ‘返回當前文檔中的引文目錄數
(50) ActiveDocument.TablesOfAuthoritiesCategories.Count ‘返回當前文檔中引文目錄類別數
(51) ActiveDocument.TablesOfContents.Count ‘返回當前文檔中的目錄數
(52) ActiveDocument.TablesOfFigures.Count '返回當前文檔中的圖表目錄數
3、Paragraphs/Paragraph對象
(53) Selection.Paragraphs.Count '返回所選區域的段落數
(54) Selection.Paragraphs.First '返回所選區域中的第一段
(55) ActiveDocument.Paragraphs(1).LeftIndent '返回當前文檔中第一段的左縮進值
(56) ActiveDocument.Paragraphs(1).LineSpacing '返回當前文檔中第一段的行距
(57) ActiveDocument.Paragraphs(1).OutlineLevel ‘返回或設置當前文檔中第一段的大綱級別
.OutlineLevel = wdOutlineLevel2 ‘2級
.OutlineLevel = wdOutlineLevel3 ‘3級
(58) ActiveDocument.Paragraphs(1).RightIndent ‘返回當前文檔中第一段的右縮進量
(59) ActiveDocument.Paragraphs(1).SpaceBefore '返回當前文檔中第一段的段前間距
(60) ActiveDocument.Paragraphs(1).SpaceAfter ‘返回當前文檔中第一段的段后間距
(61) ActiveDocument.Paragraphs(1).Range.Text '返回當前文檔中第一段的內容
(62) ActiveDocument.Paragraphs(1).Range.Style.NameLocal '返回當前文檔中第一段應用的樣式名
(63) ActiveDocument.Paragraphs(1).Range.Style.Description '返回當前文檔中第一段所應用樣式的詳細描述
(64) ActiveDocument.Paragraphs(1).Range.Style.Font.Name '返回當前文檔中第一段所應用樣式的字體名
(65) ActiveDocument.Paragraphs(1).Range.Style.Font.NameFarEast '返回或設置一種東亞字體名
(66) ActiveDocument.Paragraphs(1).Range.Style.Font.Size '返回或設置當前文檔中第一段所應用樣式的字體大小
(67) ActiveDocument.Paragraphs(1).Range.Style.Font.Spacing '返回或設置字符間距
(68) Selection.Words.Count '所選區域的字數 Sentences對象
(69) Selection.Sentences.Item(1) '所選區域中的第一句的內容 Words對象
(71) ActiveDocument.Words(1).Select '選擇當前文檔中的第一個詞
(72) ActiveDocument.Range.Words(1).InsertAfter "我愛你!" '在當前文檔中的第一個詞后插入“我愛你”
4、Characters對象
(73) Selection.Characters.Count '當前文檔中所選區域的字符數
(74) ActiveDocument.Paragraphs(1).Range.InsertParagraphAfter'在當前文檔的第一段之后插入一個新段落
5、Sections/Section對象
(75) ActiveDocument.Sections.First '當前文檔的第一節
(76) ActiveDocument.Sections.First.PageSetup.BottomMargin '當前文檔第一節所在頁的底邊距
(77) ActiveDocument.Sections.First.PageSetup.LeftMargin '當前文檔第一節所在頁的左邊距
(78) ActiveDocument.Sections.First.PageSetup.RightMargin '當前文檔第一節所在頁的右邊距
(79) ActiveDocument.Sections.First.PageSetup.TopMargin '當前文檔第一節所在頁的頂邊距
(80) ActiveDocument.Sections.First.PageSetup.PaperSize '返回或設置當前文檔第一節所在頁的大小
(81) ActiveDocument.Sections.First.PageSetup.PageHeight '返回或設置當前文檔第一節所在頁的高度
(82) ActiveDocument.Sections.First.PageSetup.PageWidth '返回或設置當前文檔第一節所在頁的寬度
(83) ActiveDocument.Sections.Add Range:=myRange '在當前文檔中添加新節
(84) ActiveDocument.Sections.Item(2) '當前文檔中的第二節
(85) ActiveDocument.Sections.Last.Range.InsertAfter "文檔結束!" '在當前文檔中最后一節的結尾添加文字“文檔結束!”
6、Range對象
(86) ActiveDocument.Range(Start:=0, End:=10) '表示當前文檔前10個字符所組成的一個Range對象
(87) Set myRange = ActiveDocument.Range(Start:=ActiveDocument.Paragraphs(2).Range.Start, _
End:=ActiveDocument.Paragraphs(4).Range.End) '將當前文檔第2段至第4段設置為一個Range對象
(88) ActiveDocument.Paragraphs(1).Range.Copy '復制當前文檔中的第一段
(89) Selection.Copy
Documents.Add.Content.Paste '復制所選內容到新文檔中
(90) ActiveDocument.Bookmarks("Book1").Copy Name:="Book2" '將Book2書簽復制Book1書簽標記的位置
(91) Selection.GoTo What:=wdGoToLine, Which:=wdGoToAbsolute, Count:=4 '將所選內容移至文檔中的第4行
(92) Selection.GoTo What:=wdGoToTable, Which:=wdGoToNext '將所選內容移至下一個表格的第1個單元格
(93) Selection.Range.AutoFormat '為所選內容套用格式
(94) ActiveDocument.Content.Font.Name = "Arial" '將當前文檔的字體設置為斜體
(95) ActiveDocument.Content.Select Selection.Delete '將當前文檔中的內容刪除其它
(96) Documents.Add '添加一個新文檔
(97) Set myTable = ActiveDocument.Tables.Add(Selection.Range, 2, 2) '在當前文檔所選區域添加一個2行2列的表格
7、文件讀寫
(98) Open "C:\my.txt" For Input As #1 '打開一個用於輸入的文件並令其編號為1
(99) Line Input #1, TextLine '讀取被打開用於輸入且編號為1的文件
(100) Close #1 '關閉編號為1的文件
1、系統參數
(01) Application.ActivePrinter ‘獲取當前打印機
(02) Application.Height '當前應用程序文檔的高度
(03) Application.Width ‘當前應用程序文檔的寬度
(04) Application.Build ‘獲取Word版本號和編譯序號
(05) Application.Caption ‘當前應用程序名
(06) Application.DefaultSaveFormat '返回空字符串,表示Word文檔
(07) Application.DisplayRecentFiles '返回是否顯示最近使用的文檔的狀態
(08) Application.Documents.Count '返回當前打開的文檔數
(09) Application.FontNames.Count ‘返回當前可用的字體數
(10) Application.Left ‘返回當前文檔的水平位置
(11) Application.MacroContainer.FullName '返回當前文檔名,包括所在路徑
Application.MacroContainer.pach '返回當前文檔路徑
Application.ActiveDocument.Path ‘獲得文件的相對路徑
(12) Application.NormalTemplate.FullName '返回文檔標准模板名稱及所在位置
(13) Application.RecentFiles.Count '返回最近打開的文檔數目
(14) Application.System.CountryRegion '返回應用程序所在的地區代碼
(15) Application.System.FreeDiskSpace ‘返回應用程序所在磁盤可用空間
(16) Application.System.HorizontalResolution '返回顯示器的水平分辨率
(17) Application.System.VerticalResolution '返回顯示器的垂直分辨率
(18) Application.System.LanguageDesignation '返回系統所使用的語言
(19) Application.System.MathCoprocessorInstalled ‘返回系統是否安裝了數學協處理器
(20) Application.System.OperatingSystem ‘返回當前操作系統名
(21) Application.System.ProcessorType '返回計算機處理器名
(22) Application.System.Version ‘返回操作系統的版本號
(23) Application.Templates.Count '返回應用程序所使用的模板數
(24) Application.UserName '返回應用程序用戶名
(25) Application.Version ‘返回應用程序的版本號
2、Documents/Document對象
(26) ActiveDocument.AttachedTemplate.FullName '返回當前文檔采用的模板名及模板所在位置
(27) ActiveDocument.Bookmarks.Count '返回當前文檔中的書簽數
(28) ActiveDocument.Characters.Count '返回當前文檔的字符數
(29) ActiveDocument.CodeName ‘返回當前文檔的代碼名稱
(30) ActiveDocument.Comments.Count ‘ 返回當前文檔中的評論數
(31) ActiveDocument.Endnotes.Count '返回當前文檔中的尾注數
(32) ActiveDocument.Fields.Count '返回當前文檔中的域數目
(33) ActiveDocument.Footnotes.Count ‘返回當前文檔中的腳注數
(34) ActiveDocument.FullName '返回當前文檔的全名及所在位置
(35) ActiveDocument.HasPassword '當前文檔是否有密碼保護
(36) ActiveDocument.Hyperlinks.Count '返回當前文檔中的鏈接數
(37) ActiveDocument.Indexes.Count '返回當前文檔中的索引數
(38) ActiveDocument.ListParagraphs.Count '返回當前文檔中項目編號或項目符號數
(39) ActiveDocument.ListTemplates.Count '返回當前文檔中使用的列表模板數
(40) ActiveDocument.Paragraphs.Count '返回當前文檔中的段落數
(41) ActiveDocument.Password=XXX '設置打開文件使用的密碼
(42) ActiveDocument.ReadOnly '獲取當前文檔是否為只讀屬性
(43) ActiveDocument.Saved '當前文檔是否被保存
(44) ActiveDocument.Sections.Count '當前文檔中的節數
(45) ActiveDocument.Sentences.Count ‘當前文檔中的語句數
(46) ActiveDocument.Shapes.Count '當前文檔中的形狀數 ,圖形?
(47) ActiveDocument.Styles.Count '當前文檔中的樣式數
(48) ActiveDocument.Tables.Count ‘當前文檔中的表格數
(49) ActiveDocument.TablesOfAuthorities.Count ‘返回當前文檔中的引文目錄數
(50) ActiveDocument.TablesOfAuthoritiesCategories.Count ‘返回當前文檔中引文目錄類別數
(51) ActiveDocument.TablesOfContents.Count ‘返回當前文檔中的目錄數
(52) ActiveDocument.TablesOfFigures.Count '返回當前文檔中的圖表目錄數
3、Paragraphs/Paragraph對象
(53) Selection.Paragraphs.Count '返回所選區域的段落數
(54) Selection.Paragraphs.First '返回所選區域中的第一段
(55) ActiveDocument.Paragraphs(1).LeftIndent '返回當前文檔中第一段的左縮進值
(56) ActiveDocument.Paragraphs(1).LineSpacing '返回當前文檔中第一段的行距
(57) ActiveDocument.Paragraphs(1).OutlineLevel ‘返回或設置當前文檔中第一段的大綱級別
.OutlineLevel = wdOutlineLevel2 ‘2級
.OutlineLevel = wdOutlineLevel3 ‘3級
(58) ActiveDocument.Paragraphs(1).RightIndent ‘返回當前文檔中第一段的右縮進量
(59) ActiveDocument.Paragraphs(1).SpaceBefore '返回當前文檔中第一段的段前間距
(60) ActiveDocument.Paragraphs(1).SpaceAfter ‘返回當前文檔中第一段的段后間距
(61) ActiveDocument.Paragraphs(1).Range.Text '返回當前文檔中第一段的內容
(62) ActiveDocument.Paragraphs(1).Range.Style.NameLocal '返回當前文檔中第一段應用的樣式名
(63) ActiveDocument.Paragraphs(1).Range.Style.Description '返回當前文檔中第一段所應用樣式的詳細描述
(64) ActiveDocument.Paragraphs(1).Range.Style.Font.Name '返回當前文檔中第一段所應用樣式的字體名
(65) ActiveDocument.Paragraphs(1).Range.Style.Font.NameFarEast '返回或設置一種東亞字體名
(66) ActiveDocument.Paragraphs(1).Range.Style.Font.Size '返回或設置當前文檔中第一段所應用樣式的字體大小
(67) ActiveDocument.Paragraphs(1).Range.Style.Font.Spacing '返回或設置字符間距
(68) Selection.Words.Count '所選區域的字數 Sentences對象
(69) Selection.Sentences.Item(1) '所選區域中的第一句的內容 Words對象
(71) ActiveDocument.Words(1).Select '選擇當前文檔中的第一個詞
(72) ActiveDocument.Range.Words(1).InsertAfter "我愛你!" '在當前文檔中的第一個詞后插入“我愛你”
4、Characters對象
(73) Selection.Characters.Count '當前文檔中所選區域的字符數
(74) ActiveDocument.Paragraphs(1).Range.InsertParagraphAfter'在當前文檔的第一段之后插入一個新段落
5、Sections/Section對象
(75) ActiveDocument.Sections.First '當前文檔的第一節
(76) ActiveDocument.Sections.First.PageSetup.BottomMargin '當前文檔第一節所在頁的底邊距
(77) ActiveDocument.Sections.First.PageSetup.LeftMargin '當前文檔第一節所在頁的左邊距
(78) ActiveDocument.Sections.First.PageSetup.RightMargin '當前文檔第一節所在頁的右邊距
(79) ActiveDocument.Sections.First.PageSetup.TopMargin '當前文檔第一節所在頁的頂邊距
(80) ActiveDocument.Sections.First.PageSetup.PaperSize '返回或設置當前文檔第一節所在頁的大小
(81) ActiveDocument.Sections.First.PageSetup.PageHeight '返回或設置當前文檔第一節所在頁的高度
(82) ActiveDocument.Sections.First.PageSetup.PageWidth '返回或設置當前文檔第一節所在頁的寬度
(83) ActiveDocument.Sections.Add Range:=myRange '在當前文檔中添加新節
(84) ActiveDocument.Sections.Item(2) '當前文檔中的第二節
(85) ActiveDocument.Sections.Last.Range.InsertAfter "文檔結束!" '在當前文檔中最后一節的結尾添加文字“文檔結束!”
6、Range對象
(86) ActiveDocument.Range(Start:=0, End:=10) '表示當前文檔前10個字符所組成的一個Range對象
(87) Set myRange = ActiveDocument.Range(Start:=ActiveDocument.Paragraphs(2).Range.Start, _
End:=ActiveDocument.Paragraphs(4).Range.End) '將當前文檔第2段至第4段設置為一個Range對象
(88) ActiveDocument.Paragraphs(1).Range.Copy '復制當前文檔中的第一段
(89) Selection.Copy
Documents.Add.Content.Paste '復制所選內容到新文檔中
(90) ActiveDocument.Bookmarks("Book1").Copy Name:="Book2" '將Book2書簽復制Book1書簽標記的位置
(91) Selection.GoTo What:=wdGoToLine, Which:=wdGoToAbsolute, Count:=4 '將所選內容移至文檔中的第4行
(92) Selection.GoTo What:=wdGoToTable, Which:=wdGoToNext '將所選內容移至下一個表格的第1個單元格
(93) Selection.Range.AutoFormat '為所選內容套用格式
(94) ActiveDocument.Content.Font.Name = "Arial" '將當前文檔的字體設置為斜體
(95) ActiveDocument.Content.Select Selection.Delete '將當前文檔中的內容刪除其它
(96) Documents.Add '添加一個新文檔
(97) Set myTable = ActiveDocument.Tables.Add(Selection.Range, 2, 2) '在當前文檔所選區域添加一個2行2列的表格
7、文件讀寫
(98) Open "C:\my.txt" For Input As #1 '打開一個用於輸入的文件並令其編號為1
(99) Line Input #1, TextLine '讀取被打開用於輸入且編號為1的文件
(100) Close #1 '關閉編號為1的文件
五、例子。例中的操作全部是錄制,然后嫁接的。
例子:用Excel VBA,將如下Excel表格(考試系統中導出的題庫 ),生成如下Word文檔
規程名稱 題型 題目內容 答案A 答案B 答案C 答案D 正確答案 分值 有否圖形
規程1 選擇題 題目1…… …… …… …… …… ABCD 2
規程1 判斷題 題目2…… 對 2
規程2 選擇題 題目3…… …… …… …… …… A 2
規程2 判斷題 題目4…… 錯 2
規程1
一、選擇題
1、題目1…… (ABCD)
A、……
B、……
C、……
D、……
二、判斷題
1、題目2…… (對)
規程2
一、選擇題
1、題目3…… (A)
A、……
B、……
C、……
D、……
二、判斷題
1、題目4…… (錯)
Sub ScWordWd()
'將“題庫”中的題目,按格式生成Word文檔
Dim I As Integer, J As Integer, Zhs As Integer, Xh As Integer, Dls As String
Dim Lr As String, Bt As String, Bt1 As String, Tx As String, Tx1 As String
Dim Lj As String, Wjm As String
Dim AA
Sheets("題庫").Select
Zhs = Sheets("題庫").UsedRange.Rows.Count
Bt = Cells(2, 1) '標題
Tx = Cells(2, 2) '題型
Xh = 1 '
Dls = 1 '
'Dim WordApp As Object
'Set WordApp = CreateObject("Word.Application") '新建Word對象
Dim Wordapp As Word.Application
Set Wordapp = New Word.Application '新建Word對象
Wordapp.Visible = True '可見
'Wordapp.ScreenUpdating = False '屏幕刷新
Dim WordD As Word.Document '定義word類
Set WordD = Wordapp.Documents.Add '新建文檔
Wordapp.Selection.WholeStory '全選
Wordapp.Selection.Font.Name = "宋體" '字體
Wordapp.Selection.Font.Size = 10 '字號
For I = 2 To Zhs
Bt1 = Cells(I, 1)
WordD.Paragraphs(Dls).Range.Font.Name = "宋體" '字體
WordD.Paragraphs(Dls).Range.Font.Size = 10 '字號
If Len(Trim(Bt1)) > 0 Then
Tx1 = Cells(I, 2)
Lr = Cells(I, 3)
If Bt1 <> Bt Then '標題不同,寫標題,居中
If I > 5 Then '
WordD.Paragraphs(Dls).Range.InsertAfter (vbCrLf) '插入回車符,增加一段
Dls = Dls + 1
WordD.Paragraphs(Dls).Range.Select
'Wordapp.Selection.InsertBreak Type:=wdPageBreak
'WordD.Paragraphs(Dls).Range.InsertBreak Type:=wdPageBreak '插入分頁符,兩個都沒反應?
Wordapp.Selection.InsertBreak Type:=wdSectionBreakNextPage '插入分節符(下一頁)
WordD.Paragraphs(Dls).Range.InsertAfter (vbCrLf) '插入回車符,增加一段
Dls = Dls + 1
End If
Bt = Bt1
WordD.Paragraphs(Dls).Range.Text = Bt & vbCrLf '寫標題
'WordD.Paragraphs(Dls).Range.InsertAfter (vbCrLf) '插入回車符,增加一段
WordD.Paragraphs(Dls).OutlineLevel = wdOutlineLevel2 '設置大綱級別,2級
'WordD.Paragraphs(Dls).Range.ParagraphFormat.FirstLineIndent = CentimetersToPoints(0)
WordD.Paragraphs(Dls).Range.ParagraphFormat.FirstLineIndent = 0 '取消首行縮進
'WordD.Paragraphs(Dls).Range.Font.Name = "宋體" '字體
'WordD.Paragraphs(Dls).Range.Font.Size = 10 '字號
WordD.Paragraphs(Dls).Range.ParagraphFormat.Alignment = wdAlignParagraphCenter '居中排列
WordD.Paragraphs(Dls).Range.Font.Bold = wdToggle '加粗
Dls = Dls + 1
Xh = 1
End If
If Tx1 <> Tx Then '題型不同,寫題型
If Tx1 = "選擇題" Then
WordD.Paragraphs(Dls).Range.Text = "一、選擇題" '寫題型
Else
WordD.Paragraphs(Dls).Range.InsertAfter (vbCrLf) '插入回車符,增加一段
Dls = Dls + 1
WordD.Paragraphs(Dls).Range.Text = "二、判斷題" '寫題型
End If
Tx = Tx1
WordD.Paragraphs(Dls).Range.ParagraphFormat.Alignment = wdAlignParagraphJustify '左對齊
'WordD.Paragraphs(Dls).Range.ParagraphFormat.FirstLineIndent = CentimetersToPoints(0.35) '首行縮進2字符,時能用時不能用,CentimetersToPoints不能被Excel識別?
WordD.Paragraphs(Dls).Range.ParagraphFormat.FirstLineIndent = 20 '首行縮進,20大約相當於5號字的2字符
WordD.Paragraphs(Dls).Range.InsertAfter (vbCrLf) '插入回車符,增加一段
WordD.Paragraphs(Dls).Range.Font.Bold = wdToggle '加粗
Dls = Dls + 1
Xh = 1
End If
If Tx = "選擇題" Then
WordD.Paragraphs(Dls).Range.Text = Xh & "、" & Lr & " (" & Cells(I, 8) & ")" & vbCrLf '寫題目及標准答案
Dls = Dls + 1
WordD.Paragraphs(Dls).Range.Text = "A、" & Cells(I, 4) & vbCrLf '選項A
Dls = Dls + 1
WordD.Paragraphs(Dls).Range.Text = "B、" & Cells(I, 5) & vbCrLf '選項B
Dls = Dls + 1
WordD.Paragraphs(Dls).Range.Text = "C、" & Cells(I, 6) & vbCrLf '選項C
Dls = Dls + 1
If Len(Trim(Cells(I, 7))) > 0 Then
WordD.Paragraphs(Dls).Range.Text = "D、" & Cells(I, 7) & vbCrLf '選項D
Dls = Dls + 1
End If
Xh = Xh + 1
Else
WordD.Paragraphs(Dls).Range.Text = Xh & "、" & Lr & " (" & Cells(I, 8) & ")" & vbCrLf '寫題目及標准答案
Dls = Dls + 1
Xh = Xh + 1
End If
End If
Next I
Wordapp.WindowState = wdWindowStateMinimize '最小化窗口
'Wordapp.ScreenUpdating = True '屏幕刷新
'WordD.Close '
'Set WordD = Nothing
'Set Wordapp = Nothing
'Wordapp.Quit '退出Word對象
ThisWorkbook.Activate
End Sub
例子:用Excel VBA,將如下Excel表格(考試系統中導出的題庫 ),生成如下Word文檔
規程名稱 題型 題目內容 答案A 答案B 答案C 答案D 正確答案 分值 有否圖形
規程1 選擇題 題目1…… …… …… …… …… ABCD 2
規程1 判斷題 題目2…… 對 2
規程2 選擇題 題目3…… …… …… …… …… A 2
規程2 判斷題 題目4…… 錯 2
規程1
一、選擇題
1、題目1…… (ABCD)
A、……
B、……
C、……
D、……
二、判斷題
1、題目2…… (對)
規程2
一、選擇題
1、題目3…… (A)
A、……
B、……
C、……
D、……
二、判斷題
1、題目4…… (錯)
Sub ScWordWd()
'將“題庫”中的題目,按格式生成Word文檔
Dim I As Integer, J As Integer, Zhs As Integer, Xh As Integer, Dls As String
Dim Lr As String, Bt As String, Bt1 As String, Tx As String, Tx1 As String
Dim Lj As String, Wjm As String
Dim AA
Sheets("題庫").Select
Zhs = Sheets("題庫").UsedRange.Rows.Count
Bt = Cells(2, 1) '標題
Tx = Cells(2, 2) '題型
Xh = 1 '
Dls = 1 '
'Dim WordApp As Object
'Set WordApp = CreateObject("Word.Application") '新建Word對象
Dim Wordapp As Word.Application
Set Wordapp = New Word.Application '新建Word對象
Wordapp.Visible = True '可見
'Wordapp.ScreenUpdating = False '屏幕刷新
Dim WordD As Word.Document '定義word類
Set WordD = Wordapp.Documents.Add '新建文檔
Wordapp.Selection.WholeStory '全選
Wordapp.Selection.Font.Name = "宋體" '字體
Wordapp.Selection.Font.Size = 10 '字號
For I = 2 To Zhs
Bt1 = Cells(I, 1)
WordD.Paragraphs(Dls).Range.Font.Name = "宋體" '字體
WordD.Paragraphs(Dls).Range.Font.Size = 10 '字號
If Len(Trim(Bt1)) > 0 Then
Tx1 = Cells(I, 2)
Lr = Cells(I, 3)
If Bt1 <> Bt Then '標題不同,寫標題,居中
If I > 5 Then '
WordD.Paragraphs(Dls).Range.InsertAfter (vbCrLf) '插入回車符,增加一段
Dls = Dls + 1
WordD.Paragraphs(Dls).Range.Select
'Wordapp.Selection.InsertBreak Type:=wdPageBreak
'WordD.Paragraphs(Dls).Range.InsertBreak Type:=wdPageBreak '插入分頁符,兩個都沒反應?
Wordapp.Selection.InsertBreak Type:=wdSectionBreakNextPage '插入分節符(下一頁)
WordD.Paragraphs(Dls).Range.InsertAfter (vbCrLf) '插入回車符,增加一段
Dls = Dls + 1
End If
Bt = Bt1
WordD.Paragraphs(Dls).Range.Text = Bt & vbCrLf '寫標題
'WordD.Paragraphs(Dls).Range.InsertAfter (vbCrLf) '插入回車符,增加一段
WordD.Paragraphs(Dls).OutlineLevel = wdOutlineLevel2 '設置大綱級別,2級
'WordD.Paragraphs(Dls).Range.ParagraphFormat.FirstLineIndent = CentimetersToPoints(0)
WordD.Paragraphs(Dls).Range.ParagraphFormat.FirstLineIndent = 0 '取消首行縮進
'WordD.Paragraphs(Dls).Range.Font.Name = "宋體" '字體
'WordD.Paragraphs(Dls).Range.Font.Size = 10 '字號
WordD.Paragraphs(Dls).Range.ParagraphFormat.Alignment = wdAlignParagraphCenter '居中排列
WordD.Paragraphs(Dls).Range.Font.Bold = wdToggle '加粗
Dls = Dls + 1
Xh = 1
End If
If Tx1 <> Tx Then '題型不同,寫題型
If Tx1 = "選擇題" Then
WordD.Paragraphs(Dls).Range.Text = "一、選擇題" '寫題型
Else
WordD.Paragraphs(Dls).Range.InsertAfter (vbCrLf) '插入回車符,增加一段
Dls = Dls + 1
WordD.Paragraphs(Dls).Range.Text = "二、判斷題" '寫題型
End If
Tx = Tx1
WordD.Paragraphs(Dls).Range.ParagraphFormat.Alignment = wdAlignParagraphJustify '左對齊
'WordD.Paragraphs(Dls).Range.ParagraphFormat.FirstLineIndent = CentimetersToPoints(0.35) '首行縮進2字符,時能用時不能用,CentimetersToPoints不能被Excel識別?
WordD.Paragraphs(Dls).Range.ParagraphFormat.FirstLineIndent = 20 '首行縮進,20大約相當於5號字的2字符
WordD.Paragraphs(Dls).Range.InsertAfter (vbCrLf) '插入回車符,增加一段
WordD.Paragraphs(Dls).Range.Font.Bold = wdToggle '加粗
Dls = Dls + 1
Xh = 1
End If
If Tx = "選擇題" Then
WordD.Paragraphs(Dls).Range.Text = Xh & "、" & Lr & " (" & Cells(I, 8) & ")" & vbCrLf '寫題目及標准答案
Dls = Dls + 1
WordD.Paragraphs(Dls).Range.Text = "A、" & Cells(I, 4) & vbCrLf '選項A
Dls = Dls + 1
WordD.Paragraphs(Dls).Range.Text = "B、" & Cells(I, 5) & vbCrLf '選項B
Dls = Dls + 1
WordD.Paragraphs(Dls).Range.Text = "C、" & Cells(I, 6) & vbCrLf '選項C
Dls = Dls + 1
If Len(Trim(Cells(I, 7))) > 0 Then
WordD.Paragraphs(Dls).Range.Text = "D、" & Cells(I, 7) & vbCrLf '選項D
Dls = Dls + 1
End If
Xh = Xh + 1
Else
WordD.Paragraphs(Dls).Range.Text = Xh & "、" & Lr & " (" & Cells(I, 8) & ")" & vbCrLf '寫題目及標准答案
Dls = Dls + 1
Xh = Xh + 1
End If
End If
Next I
Wordapp.WindowState = wdWindowStateMinimize '最小化窗口
'Wordapp.ScreenUpdating = True '屏幕刷新
'WordD.Close '
'Set WordD = Nothing
'Set Wordapp = Nothing
'Wordapp.Quit '退出Word對象
ThisWorkbook.Activate
End Sub
(完)