Excel VBA 操作 Word(入门篇)
三、通过录制宏生成代码
有了对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?)
(有人可能会说这样的办法太笨,有什么好办法请告知。先谢过!)
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 操作 Word(入门篇)的更多相关文章
- VBA操作word生成sql语句
项目开始一般都是用word保存下数据库的文档 但是从表单一个一个的建表实在是很困难乏味,查查资料 1.可以生成一个html或者xml,检索结构生成sql.但是这个方式也蛮麻烦 2.查到vba可以操作w ...
- python操作word入门
1.安装pywin32 http://sourceforge.net/projects/pywin32 在files里去找适合你的python版本.截止此文,最新版本是pywin32-219快捷路径: ...
- C# vba 操作 Word
添加引用 Microsoft Word *.0 Object Library Microsoft Graph *.0 Object Library 变量说明 Object oMissing = Sy ...
- Asp.Net 操作word 第二篇[推荐]
引言:前段时间有项目要用c#生成Word格式的计算报告,通过网络查找到很多内容,但是都很凌乱,于是自己决定将具体的步骤总结整理出来,以便于更好的交流和以后相似问题可以迅速的解决! 现通过具体的示例演示 ...
- Excel vba:批量生成超链接,添加边框,移动sheet等
Excel vba 操作 批量生成sheet目录并添加超链接 Sub Add_Sheets_Link() 'Worksheets(5)为清单目录页 '在sheet页上生成sheet页名字并超链接 To ...
- Excel VBA入门(五)Excel对象操作
本章是本系列教程的重点.但我觉得应该不是难点.从第零章开始到学完本章,应该可以把VBA用于实战中了. Excel对象主要有4个: 工作薄 Workbook 工作表 Worksheet 单元格区域 Ra ...
- Excel VBA入门(九)操作工作薄
虽然我前面讲过,在VBA中操作工作薄并不是件明智的事,但有些时候,还是避免不了要这么做.绝大多数情况下,我们要做的是获取到某个工作薄对象,并以此来获得其中的工作表对象,然后再对工作表中的数据进行处理. ...
- Excel VBA入门(三) 流程控制1-条件选择
VBA中的流程控制分为两种,其一是条件结构式的,即根据条件判断的结果去选择性执行相应的语句(块):另一种是循环,即循环地执行语句(块).本节介绍第一种. 1. IF if 语句其实包含有几种形式: ① ...
- Excel VBA入门(八)单元格边框
本文基于以下文件 http://pan.baidu.com/s/1nvJtsu9 (部分)内容预览: 1. 边框样式 Sub cell_format() Dim sht As Worksheet Di ...
随机推荐
- CSS3动画效果之Transform
无意中翻看博客发现这个属性,就顺便熟悉了一下,百度了一下和查看了CSS3帮助文档,特整理一下 Transform 适应于对任一DOM元素的2D或3D转换,转换效果有:旋转.拉伸.平移.倾斜等. 目前浏 ...
- CSS3制作Freebie标签
<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...
- git版本库管理介绍,撤销git pull操作
Git是分布式版本控制系统,GitHub 是最大的 Git 版本库托管商,是成千上万的开发者和项目能够合作进行的中心. 大部分 Git 版本库都托管在 GitHub,很多开源项目使用 GitHub 实 ...
- 【vue.js】windows下安装vue.js
windows下搭建vue开发环境 Vue.js是一套构建用户界面的 “渐进式框架”.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计.Vue 的核心库只关注视图层,并且非常容易学习,非常 ...
- Windows下面安装和配置Solr 4.9(三)支持中文分词器
首先将下载解压后的solr-4.9.0的目录里面F:\tools\开发工具\Lucene\solr-4.9.0\contrib\analysis-extras\lucene-libs找到lucene- ...
- 【Linux】Linux文件属性
既然说要了解Linux的文件属性,那么有个重要的也是常用的指令就必须要先介绍一下:就是『 ls 』这一个查看文件的命令!在以root的身份登入Linux之后,下达『 ls -al 』,结果如下所示: ...
- Python学习笔记010——递归函数
1 递归定义 函数直接或间接调用函数本身,则该函数称为递归函数 2 递归特点 Python函数递归调用,会用到栈 – 这里的栈是函数/程序运行时系统为其分配的一段内存区 – 栈具有 后进先出 的特性 ...
- RHEL7 -- 修改主机名
RHEL7中,有三种定义的主机名: a.静态的(static):“静态”主机名也称为内核主机名,是系统在启动时从/etc/hostname自动初始化的主机名 b.瞬态的(transient):“瞬态” ...
- 字符串 - KMP模式匹配
在朴素的模式匹配算法中,主串的pos值(i)是不断地回溯来完成的(见字符串的基本操作中的Index函数).而计算机的大仙们发现这种回溯其实可以是不需要的.既然i值不回溯,也就是不可以变小,那么考虑的变 ...
- CTabCtrl控件标签的相关设置
原文链接: http://blog.csdn.net/happyhell/article/details/6012177 1. 获得CTabCtrl标签高度:CRect rc; CTabCtrl *p ...