VBA在Word中的应用
VBA在Word中的应用
作者:余姝华
来源:《新课程学习·中》2014年第02期
摘要:教师一般应用Word来命制试卷,但收集试题和排版工作量非常繁重,利用VBA 在Word中的应用,开发一个自带试题库,教师可以对题库进行添加、修改和删除试题等功能;并能够对所选择的题目进行自动排版。
教师可以高效完成一份高质量的试卷,彻底减轻教师命制试题的工作量。
关键词:Word;VBA;自动排版
目前大多数学校、教师利用Word命制试卷,需要花费大量的时间来收题、排版,而且排版后的试卷格式也不标准。
通过VBA for Word开发一款自带试题库和试卷排版功能的系统,教师可以
对题库中的试题进行添加、修改和删除等管理,对选好的试题进行自动排版,生成标准的、统一的试卷,每位教师都可以在短时间内高效地完成一份高质量的试卷。
一、试卷结构分析
以语文试卷为例,纸型为A3,方向为横向,版面分左右两栏,左边最上面一般为一级标题并居中显示某次语文考试试卷。
试卷正文大致包括:基础知识、现代文、文言文和写作四大块内容。
基础知识部分主要是:选择和填空,在试卷排版中题目需要左缩;现代文部分主要包含:正文内容和正文后的习题,正文内容标题需要居中,正文首行缩进2个字符;文言文部分的排版和现代文基本相同;写作部分排版比较麻烦的是作文格子的编排,它是上下行之间要空开一行的表格。
二、系统功能模块分析
本系统主要有三大功能模块:添加试题、修改试题(包括修改和删除)和试卷自动生成。
数据库采用Access,主要考虑它移植方便、便于管理。
试题存放在数据库中,在对大量试卷分析时发现,一个大题中有若干个小题,而每个大题所含的小题数都是不同的,所以在设计数据库时采用了多表并建立关系。
三、系统功能的实现
1.添加试题
在系统设计需求分析中考虑到教师在命制试卷时,收集试题耗时,试题的保密性差,所以在本系统中直接设计了试题库。
题库可以对试题进行有效地保密,因为题库量很大,组卷时按条件随机组卷,猜题押宝命中概率很小。
有了题库,可以马上启用备用的平行试卷,或在考试前的最后时刻随机决定平行试卷中的一套作为正式考卷,从而达到出其不意的效果。
试题库极大地方便了实现计算机科学的管理(修改、增删、试卷合理生成、浏览、打印等),又因试卷的随机生成,提高了试卷的保密程度,从而进一步提高了考试的效果,充分体现出考试的严肃性和公平性。
2.修改试题
该模块主要实现两个功能:删除和修改。
教师对该系统库中的试题可以做出相应的修改,或者对不必要的试题进行删除操作。
这一模块与上面的添加试题模块都是引用ADO连接ACCESS数据,并对数据保存、修改和删除。
3.自动排版并生成试卷
该模块主要有两块内容:试卷版面设置和试卷试题设置。
(1)试卷版面设置
用户可以在“试卷纸张大小”下拉框中选择相应的纸型,程序中主要是通过VBA的Application对象的ActiveDocument.PageSetup.PaperSize属性设置试卷纸张的大小;在“请输入试卷大标题”文本框中输入将要生成试卷的标题。
比如,“2013学年第二学期九年级第一次语文月考”,我们在程序中是通过Application对象的如
下属性实现:
.ActiveDocument.PageSetup.PaperSize=papType(“A3”)
‘设置试卷页面纸型
With Selection.PageSetup.TextColumns
‘对页面进行分栏
.SetCount numcolumns:=2
.EvenlySpaced=True
.LineBetween=False
.Width=CentimetersToPoints(5.84)
.Spacing=CentimetersToPoints(2.96)
End With
.Selection.Style=ActiveDocument.Styles(“标题1”)
‘设置为“标题1”
=“黑体” ‘字形
.Selection.ParagraphFormat.Alignment=wdAlignParagraphCenter
‘对标题居中对齐
.Selection.Font.Size=18 ‘标题字号18号
.Selection.TypeText “2013学年第二学期九年级第一次月考+Chr(10)” ‘设置一级标题,Chr(10)为换行
(2)试卷试题设置
该模块分为四大块:基本知识(选择题和填空题)、现代文、文言文(文言文阅读和古诗)和写作。
教师按照试卷的要求选择需要的题型,在对应题型下输入题数,若输入的题数大于系统库中的题数,则系统会有相应提示。
试题是从试题库中随机抽取的,并要求不能再次抽中,所以,在随机生成函数Rnd前加上Randomize函数,这样可以避免抽到的试题被重复抽中。
(3)试卷的卷面内容排版
试卷的排版主要包括试卷的标题、字体大小及段落格式等方面。
这些都可以利用Application对象中的以下性能来实现自动
排版。
.Selection.Style=ActiveDocument.Styles(“标题2”)
‘设置二级标题
.Selection.Font.Size=12
‘二级标题字号为12号
.Se =“黑体”
‘二级标题字体为宋体
.Selection.TypeText“一、基础知识”+Chr(10)
‘设置二级标题
以上代码主要是对二级标题设置
.Selection.Style=ActiveDocument.Styles(“正文”)‘设置正文
.Selection.Font.Size=10
‘设置正文字号为10号
.Sel =“宋体”
‘设置正文字体为宋体
With Selection.ParagraphFormat
.CharacterUnitLeftIndent=2
‘正文内容左缩进2字符
.CharacterUnitFirstLineIndent=-2
‘正文内容首行悬挂-2字符
End With
.Selection.TypeText num & "、" & rs(0)。
Value+Chr(10)
With Selection.ParagraphFormat
.CharacterUnitLeftIndent=4
‘正文内容左缩进4字符
.CharacterUnitFirstLineIndent=-2
End With
Word应用程序是目前应用最广泛的排版软件,但是大部分人只能使用它的常规功能来排版。
利用VBA for Word可以实现繁琐、机械的日常排版工作自动化。
用VBA扩展功能可以完成各种高级排版功能的软件开发。
参考文献:
[1]杨晓亮.Word VBA高效排版范例应用[M].北京:中国青年出版社,2005.
[2]Guy Hart-Davis.VBA从入门到精通[M].第二版.北京:电子工业出版社,2008.
[3]李政,海英梁,李昊.VBA应用基础与实例教程[M].北京:国防工业出版社,2009.
[4]卓宗雄.学用VBA提高Office效率[M].北京:人民邮电出版社,1996.
[5]徐国平.VBA中文版程序设计与应用[M].北京.清华大学出版社,1998.
|编辑温雪莲。
使用VBA实现Word文档内容提取的方法
使用VBA实现Word文档内容提取的方法VBA(Visual Basic for Applications)是一种宏语言,可以与Microsoft Office套件中的各种应用程序进行编程交互。
在Word文档中,使用VBA可以帮助我们快速提取所需的内容,并将其用于数据分析、报表生成等任务。
本文将介绍如何使用VBA实现Word文档内容提取的方法。
步骤一:启用开发人员选项卡在使用VBA之前,我们首先需要在Word中启用“开发人员”选项卡。
请按照下列步骤进行操作:1. 打开Word文档。
2. 点击顶部菜单栏中的“文件”选项。
3. 在打开的菜单中,选择“选项”。
4. 在弹出的选项窗口中,选择“自定义功能区”。
5. 在右侧的“主选项卡”列表中,找到“开发人员”。
如果其未启用,请勾选选项框以启用该选项卡。
6. 点击确定按钮以保存更改。
步骤二:打开VBA编辑器一旦“开发人员”选项卡被启用,我们可以打开VBA编辑器。
请按照以下步骤进行操作:1. 点击“开发人员”选项卡中的“Visual Basic”按钮。
2. 如果当前文档中已经存在宏,VBA编辑器将会自动打开。
如果没有,新建一个宏并打开编辑器。
步骤三:编写VBA代码下面是一个使用VBA提取Word文档内容的示例。
示例中的代码可将文档的每一段落提取并输出到一个新建的文档中。
你可以根据自己的需求进行修改和扩展。
```vbaSub ExtractContent()Dim originalDoc As DocumentDim newDoc As DocumentDim p As Paragraph' 打开原始文档Set originalDoc = ActiveDocument' 创建新文档Set newDoc = Documents.Add' 遍历原始文档中的每一段落For Each p In originalDoc.Paragraphs' 将每一段落的内容复制到新文档中newDoc.Content.InsertAfter p.Range.Text & vbCrLf Next p' 保存并关闭新文档newDoc.SaveAs "提取结果.docx"newDoc.Close' 释放对象Set newDoc = NothingSet originalDoc = NothingEnd Sub```步骤四:运行VBA代码完成步骤三后,你可以运行编写的VBA代码来提取文档内容。
VBA在Word中的实用编程技巧
VBA在Word中的实用编程技巧Microsoft Word是一款功能强大的文字处理程序,而VBA (Visual Basic for Applications)是一种用于自动化和自定义Office应用程序的编程语言。
结合VBA和Word,用户可以利用编程技巧来提高工作效率,优化文档生成和编辑过程。
本文将介绍一些在Word中使用VBA的实用编程技巧。
1. 自动化任务VBA可以帮助自动执行一些重复性的任务,如批量替换文本、创建目录、添加页眉和页脚等。
通过编写VBA宏,可以将这些任务自动化,节省大量时间和人力资源。
例如,您可以编写一个宏来自动替换指定文字,并在整个文档中应用相同的更改。
2. 自定义快速访问工具栏Word的快速访问工具栏(Quick Access Toolbar)是一个位于顶部的工具栏,用于快速访问最常用的命令。
使用VBA,您可以通过自定义快速访问工具栏来添加自定义按钮和命令。
这样,您可以根据自己的需求,将常用的功能一键点击,提高操作效率。
3. 格式化文本VBA可以帮助您快速格式化文本,例如设置字体、字号、颜色、对齐方式等。
通过编写宏,您可以选择指定的文本,并应用所需的格式。
这对于大量文本的处理非常有用,尤其是当您需要对多个文档进行一致的格式化时。
4. 创建自定义对话框VBA可以创建自定义对话框,以便用户输入信息或作出选择。
通过编写代码,您可以定义对话框的布局、控件和功能,并根据用户的选择执行相应的操作。
这使得您可以根据实际需要,创建个性化的交互界面,提高用户体验和操作流畅度。
5. 自动生成文档使用VBA,您可以编写宏来生成自定义的文档。
例如,您可以创建一个模板文件,其中包含常见的文档结构和格式,然后使用VBA宏根据特定的输入数据自动填充并生成新的文档。
如此一来,您无需手动创建每个文档的结构和格式,大大提高了文档生成的效率。
6. 处理图表和图形VBA可以帮助您处理Word中的图表和图形。
VBA中的集成与应用Word实例解析
VBA中的集成与应用Word实例解析VBA,即Visual Basic for Applications,是一种用于自动化操作Microsoft Office应用程序的编程语言。
在使用VBA时,与Word的集成和应用是非常常见的需求。
本文将从实例角度分析如何在VBA中实现Word的集成与应用。
首先,我们需要了解如何在VBA中引用和创建Word应用程序实例。
在VBA中,可以通过引用Microsoft Word的对象库来访问Word应用程序的各种功能。
下面是一个创建Word 应用程序实例的示例代码:```vbaDim wordApp As Word.ApplicationSet wordApp = New Word.Application```在上述代码中,我们首先声明一个Word应用程序对象的变量`wordApp`,然后使用`New`关键字创建一个新的Word应用程序实例,并将其赋值给变量`wordApp`。
接下来,我们可以在VBA中使用`wordApp`对象来操作Word应用程序的各种功能。
例如,我们可以打开一个现有的Word文档,或者创建一个新的Word文档。
下面是打开现有Word文档和创建新Word文档的示例代码:```vba' 打开现有的Word文档Dim wordDoc As Word.DocumentSet wordDoc =wordApp.Documents.Open("C:\Path\To\Existing.docx")' 创建新的Word文档Dim newDoc As Word.DocumentSet newDoc = wordApp.Documents.Add```在上述代码中,我们首先声明一个Word文档对象的变量`wordDoc`和`newDoc`,然后使用`Documents.Open`方法打开一个现有的Word文档,并将其赋值给变量`wordDoc`;使用`Documents.Add`方法创建一个新的Word文档,并将其赋值给变量`newDoc`。
VBA宏操作Word文档的常用技巧与函数解析
VBA宏操作Word文档的常用技巧与函数解析Word文档是办公工作中最常用的工具之一,它提供了丰富的功能和设计选项。
VBA(Visual Basic for Applications)是一种用于自动化任务和增强功能的编程语言,通过使用VBA宏,我们可以进一步扩展和自定义Word文档的功能。
本文将介绍一些VBA宏操作Word文档的常用技巧和函数,帮助您更高效地利用VBA宏完成各种任务。
一、了解VBA宏VBA宏是一种编程语言,可用于创建自定义的Word文档操作和功能。
使用VBA宏,您可以自动执行重复的任务,增加文档的互动性,并提高办公效率。
为了运行VBA宏,您需要在Word文档中打开VBA 编辑器,这样就可以编写和运行VBA代码了。
二、创建宏录制Word提供了宏录制功能,可以根据您在文档中的操作记录VBA宏代码。
这是学习和入门VBA宏的好方法。
1. 打开Word文档,点击"开发工具"选项卡,然后点击"宏"按钮。
2. 在出现的对话框中,输入宏的名称,并点击"创建"按钮。
3. 在宏录制器窗口中,开始执行您想要录制的操作,例如字体样式调整、插入图片、为文本设置格式等。
4. 完成操作后,点击宏录制器窗口中的"停止录制"按钮。
三、常用VBA宏技巧VBA宏提供了许多强大的功能和技巧,以下是一些常用的技巧,可以帮助您更好地利用VBA宏操作Word文档。
1. 循环和条件语句:使用循环和条件语句可以实现自动化任务,比如在文档中查找和替换特定文本。
2. 创建用户界面:通过使用VBA宏,您可以创建自定义的用户界面,以便用户输入参数或执行特定的功能。
3. 处理表格数据:VBA宏可以帮助您处理Word文档中的表格数据,例如自动计算和合并单元格。
4. 控制Word应用程序:使用VBA宏可以控制Word应用程序的各个方面,例如打开、关闭和保存文档,设置页面布局等。
巧用VBA自动处理Word表格
巧用VBA自动处理Word表格Word是一款功能强大的文字处理软件,而VBA(Visual Basic for Applications)是一种用于自动化操作Office软件的编程语言。
结合这两者,我们可以利用VBA编写一些简单的代码,实现自动处理Word表格的功能。
下面,我将介绍一些巧用VBA自动处理Word表格的方法。
一、自动添加表格在Word中,我们经常需要添加表格,并填写相关数据。
如果需要频繁添加相同格式的表格,手动操作就显得非常繁琐。
这时,我们可以利用VBA编写一个宏,实现自动添加表格的功能。
首先,打开Word,按下Alt+F11,进入VBA编辑器。
然后,选择“插入”菜单中的“模块”,在新建的模块中编写以下代码:```Sub AutoAddTable()Dim tbl As TableSet tbl = ActiveDocument.Tables.Add(Selection.Range, 3, 3)tbl.Borders.Enable = Truetbl.Cell(1, 1).Range.Text = "姓名"tbl.Cell(1, 2).Range.Text = "年龄"tbl.Cell(1, 3).Range.Text = "性别"End Sub```保存并关闭VBA编辑器。
现在,我们可以通过按下Alt+F8,选择“宏”并运行“AutoAddTable”来自动添加一个3行3列的表格,并填写姓名、年龄和性别。
二、自动合并单元格在Word表格中,有时我们需要合并某些单元格,以便更好地展示数据。
如果需要频繁合并相同位置的单元格,手动操作就会变得非常繁琐。
这时,我们可以利用VBA编写一个宏,实现自动合并单元格的功能。
同样地,打开VBA编辑器,选择“插入”菜单中的“模块”,编写以下代码:```Sub AutoMergeCells()Dim tbl As TableSet tbl = ActiveDocument.Tables(1)tbl.Cell(2, 2).Merge MergeTo:=tbl.Cell(3, 3)End Sub```保存并关闭VBA编辑器。
VBA语言在WORD文档中的应用示例
VBA语言在WORD文档中的应用示例随着教学的进行,资料的积累越来越多,将资料放在一个word文档中,用目录超链接的形式展现出来也是一种方法,不过缺点在于阅读不方便,内存占用大引起刷新速度很慢等。
所以本文介绍一种不需太多VBA知识就能整理好文档的方法,实现办公自动化。
一、准备工作1.建立模板打开word文档,点击文件→另存为,文件名为备课夹,文件类型为文档模板。
然后在当前文件夹中再建立一个文件夹,改名为运动的描述,点击进入该文件夹,建立新文档,改名为质点参考系和坐标系。
2.宏安全点击工具→宏→安全性,将安全等级改为中等以下。
二、制作备课夹1.建立工具栏打开备课夹模板,点击菜单上空白之处右击,弹出新的菜单,选择最下面自定义。
在命令栏的最下面有保存于,点击改成备课夹,再点击工具栏新建,将工具栏名称命名为高一物理,确定后在文档中就会出现高一物理这个工具栏。
2.插入新菜单关闭自定义界面,点击菜单上空白之处右击,弹出新的菜单,在命令栏的左边,拉到最下面,会看到新菜单,点击后在右边也会出现新菜单,点击再按住右键将其拖到上面刚建立的高一物理工具栏中,右击改名为运动的描述。
3.编写宏关闭自定义后,点击工具宏VB编辑器,弹出VB编辑器后选中Templateproject(备课夹)右击插入模块,选中模块1,点击,将下面的宏复制进去。
Sub 质点参考系和坐标系()On Error GoTo chucDocuments.Open FileName:=ActiveDocument.AttachedTemplate.Path & “\运动的描述\质点参考系和坐标系.doc”,AddToRecentFiles:=FalseExit Subchuc:MsgB ox “没有找到文件,请确定同一目录下有” + Chr(10) + “\运动的描述\质点参考系和坐标系.doc”End Sub第一句为错误提示,如果在运动的描述文件夹中找不到质点参考系和坐标系.doc这个文档,就会有提示。
VBA与Word的应用指南
VBA与Word的应用指南Word是微软公司开发的一款流行的文字处理软件,它通过提供丰富的格式化和排版工具来帮助用户创建专业的文档。
除了提供基本的功能,Word还允许用户使用VBA (Visual Basic for Applications)编程语言来自动化和定制化文档。
VBA是一种强大的编程语言,它可以与各种微软办公套件中的应用程序进行集成,包括Word、Excel和PowerPoint等。
通过编写VBA代码,用户可以根据自己的需求自定义Word的功能,实现自动化流程和高效的文档处理。
一、VBA的基础概念和入门指南1. VBA的基本概念:VBA是一种基于Visual Basic的编程语言,其语法结构类似于其他编程语言,如C++和Java。
VBA可以通过提供的对象模型来访问和操作Word文档的各个部分,例如段落、表格和图形等。
2. VBA的开发环境:在Word中使用VBA需要打开开发工具栏,通过点击“文件”菜单中的“选项”,然后选择“自定义功能区”来启用开发工具栏。
在开发工具栏中,用户可以打开VBA编辑器,编写和管理VBA代码。
3. VBA的编程基础:在学习VBA编程之前,用户应该了解基本的编程概念,例如变量、条件语句和循环结构等。
此外,熟悉Word对象模型和常用的VBA对象和方法也是必要的。
4. VBA代码的执行:在Word中,VBA代码可以通过宏和事件驱动来执行。
用户可以通过录制宏来生成代码,并将其应用于文档中相应的对象。
此外,用户还可以通过添加事件处理程序来响应特定的用户操作或文档事件。
二、常用的VBA技巧和实例演示1. 自动化文档处理:使用VBA可以轻松自动化一些繁琐的文档处理任务,例如批量替换文本、插入图片和创建目录等。
通过编写简单的代码,用户可以快速完成这些任务,提高工作效率。
2. 数据处理和分析:VBA可以与其他应用程序集成,例如Excel,使用户能够在Word中快速处理和分析数据。
如何在 VBA 中操作 Word 文档
如何在 VBA 中操作 Word 文档VBA(Visual Basic for Applications)作为一种用于自动化任务的编程语言,与Microsoft Office套件紧密结合,使用户能够使用宏和脚本来对Office应用程序进行编程操作。
在本文中,我们将重点介绍如何使用VBA来操作Word文档。
1. 创建和打开Word文档在VBA中,可以使用Application对象来创建和打开Word 文档。
下面是创建一个新文档和打开一个已存在的文档的示例代码:```vbaSub CreateAndOpenDocument()Dim WordApp As Object ' 创建一个Word应用程序对象Set WordApp = CreateObject("Word.Application")Dim WordDoc As Object ' 创建一个新文档Set WordDoc = WordApp.Documents.Add' 打开一个已存在的文档WordApp.Documents.Open("C:\Path\To\Your\Document.docx") ' 执行其他操作...' 关闭Word应用程序对象WordApp.QuitEnd Sub```2. 插入和编辑文本在Word文档中插入和编辑文本是VBA中的常见操作。
要在文档中插入文本,可以使用Selection对象的TypeText方法,如下所示:```vbaSub InsertText()Selection.TypeText Text:="这是要插入的文本。
"End Sub```要编辑已存在的文本,可以使用Selection对象的Text属性来访问和修改文本内容,如下所示:```vbaSub EditText()Selection.Text = "这是修改后的文本。
vba对word的常用操作
vba对word的常⽤操作 ⼀、选中某些字或段落 ActiveDocument.Words(3).Select ActiveDocument.Paragraphs(3).Range.Select⼆、选中红⾊⽂字所在的段落 Dim myRange As Range Set myRange = ActiveDocument.Content '定义myRange为主⽂档⽂章 With myRange.Find '在⾥⾯主⽂档⾥⾯查找东西.Format = True.Font.Color = wdColorBlue '字体为蓝⾊If .Execute = True Then myRange.Paragraphs(1).Range.Select'运⾏指定的查找操作,如果查找成功,则选取 End With1、打开导航菜单If Not aWord.ActiveWindow.DocumentMap ThenaWord.ActiveWindow.DocumentMap = TrueEnd If2、If aWord.Selection.Find.Execute(ftxt) Then ‘查找标题定位(查找内容包括chr(13))' myPar.Range.SelectSet rng = aWord.Selection.Bookmarks("\headinglevel").Range ’RNG选择标题及内容' For Each tb In rng.Tables' tb.Delete' Next tb'删除原有内容(rng设定除标题外的所有内容)rng.SetRange Start:=rng.Paragraphs(1).Range.End, End:=rng.Paragraphs(rng.Paragraphs.Count).Range.End rng.Selectrng.Delete' For n = rng.Paragraphs.Count To 2 Step -1'' rng.Paragraphs(n).Range.Delete' Next naWord.Selection.MoveLeftaWord.Selection.MoveUntil cset:=Chr(13) ‘移动光标到⾏尾回车处aWord.Selection.TypeParagraph '增加⼀⾏aWord.Selection.Style = aWord.ActiveDocument.Styles("正⽂")aWord.ActivateaWord.Selection.PasteCall JustEmptyClipboard ’清空剪贴板(过程见后)End If’清空剪贴板Private Declare PtrSafe Function OpenClipboard Lib "user32" (ByVal hWnd As Long) As LongPrivate Declare PtrSafe Function CloseClipboard Lib "user32" () As LongPrivate Declare PtrSafe Function EmptyClipboard Lib "user32" () As LongPublic Sub JustEmptyClipboard()OpenClipboard (0)EmptyClipboardCloseClipboardEnd Sub'获得指定表格的某个单元格内容Application.ActiveDocument.Tables(1).Cell(1, 1).Range.Text'获取指定表格所在页Application.ActiveDocument.Tables(2).Selectrmation(wdActiveEndPageNumber)'获取当前页⾯的开始字符数Application.ActiveDocument.Bookmarks("\page").Start'获取当前页⾯的结束字符数Application.ActiveDocument.Bookmarks("\page").End'获取当前页⾯中的图⽚数Application.ActiveDocument.Bookmarks("\page").Range.InlineShapes.Count Sub a格式化表格()Dim T As TableApplication.ScreenUpdating = FalseFor Each T In ActiveDocument.TablesT.SelectCall 加粗框线FarEast = "宋体" ' 改变表格字体为“⿊体”Selection.Font.Size = 9 ' 改变表格字号为9磅⼩五T.AutoFitBehavior (wdAutoFitWindow)With T.Cell(1, 1).Select.Borders(wdBorderDiagonalDown).LineStyle = wdLineStyleNone.Borders(wdBorderDiagonalUp).LineStyle = wdLineStyleNone.Borders.Shadow = FalseEnd WithWith Selection.SelectRow '选中当前⾏If .Cells.Count = 1 Then.Shading.BackgroundPatternColor = wdColorWhiteCall ⾸⾏是表名的表格线处理T.Cell(2, 1).Select.SelectRowEnd If' Selection.Rows.HeadingFormat = wdToggle '⾃动标题⾏重复' .Range.Font.Bold = True '表头加粗⿊体.Shading.ForegroundPatternColor = wdColorAutomatic '⾸⾏⾃动颜⾊.Shading.BackgroundPatternColor = wdColorGray10 '⾸⾏底纹填充End WithNextApplication.ScreenUpdating = TrueMsgBox ("调整结束!")End SubSub 加粗框线()With Selection.CellsWith .Borders(wdBorderLeft).LineStyle = wdLineStyleSingle.LineWidth = wdLineWidth150pt.Color = wdColorAutomaticEnd WithWith .Borders(wdBorderRight).LineStyle = wdLineStyleSingle.LineWidth = wdLineWidth150pt.Color = wdColorAutomaticEnd WithWith .Borders(wdBorderTop).LineStyle = wdLineStyleSingle.LineWidth = wdLineWidth150pt.Color = wdColorAutomaticEnd WithWith .Borders(wdBorderBottom).LineStyle = wdLineStyleSingle.LineWidth = wdLineWidth150pt.Color = wdColorAutomaticEnd WithWith .Borders(wdBorderHorizontal).LineStyle = wdLineStyleSingle.LineWidth = wdLineWidth075pt.Color = wdColorAutomaticEnd With.Borders(wdBorderDiagonalDown).LineStyle = wdLineStyleNone.Borders(wdBorderDiagonalUp).LineStyle = wdLineStyleNone.Borders.Shadow = FalseEnd WithEnd SubSub ⾸⾏是表名的表格线处理()'' 宏1 宏''Selection.Borders(wdBorderTop).LineStyle = wdLineStyleNone Selection.Borders(wdBorderLeft).LineStyle = wdLineStyleNone Selection.Borders(wdBorderBottom).LineStyle = wdLineStyleNone Selection.Borders(wdBorderRight).LineStyle = wdLineStyleNone Selection.Borders(wdBorderDiagonalDown).LineStyle = wdLineStyleNone Selection.Borders(wdBorderDiagonalUp).LineStyle = wdLineStyleNone With Selection.Borders(wdBorderBottom).LineStyle = Options.DefaultBorderLineStyle.LineWidth = Options.DefaultBorderLineWidth.Color = Options.DefaultBorderColorEnd WithEnd Sub⽤过的调整程序,记录备⽤!Sub 调整⾸⾏是表名的居中()Dim T As TableApplication.ScreenUpdating = FalseFor Each T In ActiveDocument.TablesT.SelectT.Cell(1, 1).SelectWith Selection.SelectRow '选中当前⾏If .Cells.Count = 1 Then.Font.Bold = wdToggle.ParagraphFormat.Alignment = wdAlignParagraphCenter.SelectRowEnd IfEnd WithNextApplication.ScreenUpdating = TrueMsgBox ("调整结束!")End SubSub 调整表格内⾸⾏表头居中加⿊()Dim T As TableApplication.ScreenUpdating = FalseFor Each T In ActiveDocument.TablesT.SelectT.Cell(1, 1).SelectWith Selection.SelectRow '选中当前⾏If .Cells.Count = 1 ThenT.Cell(2, 1).Select.SelectRowEnd If.Font.Bold = wdToggle.ParagraphFormat.Alignment = wdAlignParagraphCenterEnd WithNextApplication.ScreenUpdating = TrueMsgBox ("调整结束!")End SubSub Test()Dim myRange As RangeDim num As String, title As StringSelection.HomeKey wdStory '光标加到⽂⾸'Set ps = Selection.Bookmarks("\headinglevel").Range.ParagraphsSet ps = ActiveDocument.Bookmarks("\headinglevel").Range.Paragraphs' Set Rng = Selection.Bookmarks("headinglevel").RangeFor Each p In psSet myRange = p.RangeIf Len(myRange.ListFormat.ListString) > 0 Then num = myRange.ListFormat.ListString title = myRange.TextDebug.Print "编号:" & num & vbCrLf & "标题内容:" & titleIf num = "1.1.1.1" ThenmyRange.DeleteEnd IfNext p'Set myRange = Selection.Bookmarks("\headinglevel").Range.Paragraphs(1).Range'MsgBox "编号:" & myRange.ListFormat.ListString & vbCrLf & "标题内容:" & myRange.TextEnd SubSub 按章节提取保留⽂档()'⾃测题章节保留在⽂档中,与其同级的章节剪切成⼀个新⽂档,且⽤章节标题命名Dim Par As Paragraph, ParNum As IntegerDim NewDoc As Document, myDoc As DocumentDim FileName As String, Rng As Range, TitPar As ParagraphDim i As Integeri = 0Set myDoc = ActiveDocumentSelection.HomeKey wdStory '光标加到⽂⾸With Selection.Find.ClearFormatting.Replacement.ClearFormatting.Replacement.Text = "".Forward = True.Wrap = wdFindStop.MatchWildcards = TrueDo While .Execute(FindText:="总体情况") '⾃测题的标题特征为段末 “(附参考答案)”Set Par = Selection.Paragraphs(1) '获得⾃测题的标题ParNum = Par.OutlineLevel '获得标题的⼤纲级别'⾃测题⼤纲级别不会为1,不考虑为1级时的情况Selection.GoTo wdGoToHeading, wdGoToPrevious, 1 '去往上⼀个标题Do Until Selection.Paragraphs(1).OutlineLevel < ParNum '遇到上级⼤纲时停⽌循环Set TitPar = Selection.Paragraphs(1)If TitPar.OutlineLevel = ParNum Then '如果titpar的⼤纲级别与⾃测题标题的相等,则进⾏操作FileName = Mid(TitPar.Range, 2, Len(TitPar.Range) - 2) '获得标题⽂本,⽤作⽂件名。
VBA中关于WORD的基本应用比如批量改页眉页脚,从文件名取数字作为页眉等等。
VBA中关于WORD的基本应⽤⽐如批量改页眉页脚,从⽂件名取数字作为页眉等等。
VBA中关于WORD的基本应⽤⽐如批量改页眉页脚,从⽂件名取数字作为页眉等等。
以下是代码,直接在Word的VBA编辑器⾥粘贴上去就OK了。
Sub 批量转PDF()Dim i As VariantDim t As VariantDim str As String, n As Long, fd, Nam As StringOn Error GoTo err '如果程序执⾏错误 跳转执⾏ErrSet fd = Application.FileDialog(msoFileDialogFolderPicker) '允许⽤户选择⼀个⽂件夹With fd.Title = “选择⽬标⽂件夹”If .Show = -1 Then t = .SelectedItems(1) Else Exit SubEnd Withstr = Dir(t & “*.doc*”)While Len(str) > 0n = n + 1Documents.Open FileName:=t & IIf(Right(t, 1) = “”, “”, “”) & strNam = CreateObject(“Scripting.FileSystemObject”).getextensionname(str)ActiveDocument.ExportAsFixedFormat OutputFileName:=(t & IIf(Right(t, 1) = “”, “”, “”) & Replace(str, Nam, “pdf”)), _ExportFormat:=wdExportFormatPDF, OpenAfterExport:=False, OptimizeFor:= _wdExportOptimizeForPrint, Range:=wdExportAllDocument, From:=1, To:=1, _Item:=wdExportDocumentContent, IncludeDocProps:=True, KeepIRM:=True, _CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _BitmapMissingFonts:=TrueActiveDocument.Close Falsestr = Dir()WendSet fd = NothingMsgBox (“已完成全部转换”)err:End SubSub ⽂档保护()Dim myDialog As FileDialogDim oFile As VariantDim oDoc As DocumentDim myResult As VbMsgBoxResultDim myPassWord As StringOn Error Resume NextmyPassWord = “xyz” '此处双引号内设置⾃⼰的⽂档保护密码'定义⼀个⽂件夹选取对话框Set myDialog = Application.FileDialog(msoFileDialogFilePicker)With myDialog.Filters.Clear '清除所有⽂件筛选器中的项⽬.Filters.Add “所有 WORD ⽂件”, “.doc", 1 '增加筛选器的项⽬为所有WORD⽂件.AllowMultiSelect = True '允许多项选择If .Show <> -1 Then Exit SubmyResult = MsgBox(“选择是将进⾏对所选⽂件的设置⽂档保护,选择否将解除⽂档保护!”, vbYesNo)For Each oFile In .SelectedItems '在所有选取项⽬中循环Set oDoc = Documents.Open(FileName:=oFile, Visible:=False)Set oDoc = Documents.Open(FileName:=oFile, Visible:=False)With oDocIf myResult = vbYes Then '如果选择了进⾏⽂档保护'如果该⽂档未经过保护则使⽤保护窗体(⽂档)功能If .ProtectionType = wdNoProtection Then .Protect Type:=wdAllowOnlyComments, Password:=myPassWordElse '如果选择了取消⽂档保护'如果⽂档已使⽤了保护⽂档的功能,则解除⽂档保护If .ProtectionType <> wdNoProtection Then .Unprotect myPassWordEnd If.Close TrueEnd WithNextEnd WithEnd SubSub 批量操作WORD()Dim path As StringDim FileName As StringDim worddoc As DocumentDim MyDir As StringMyDir = “C:\Users\Administrator\Desktop\第⼆版 (2) (1)” '⽂件夹路径根据需要⾃⼰修改,需要处理的⽂件都放该⽂件夹内FileName = Dir(MyDir & "*.doc”, vbNormal)Do Until FileName = “”If FileName <> ThenSet worddoc = Documents.Open(MyDir & “” & FileName)worddoc.ActivateCall 宏4 '调⽤宏,换成你⾃⼰宏的名字’ 宏1() 改页边距和页眉页脚距离,不涉及页⾯⽅向’ 宏2() 去页脚,运⾏两次’ 宏3() 替换年⽉⽇,具体替换成什么,⾃⼰去设置’ 宏4() 加页码’ 宏5() 插⼊表格,在运⾏前,先把要插⼊的复制到剪切板’ 宏6() 刷新域,未完成’ 宏7() 变编号’ 宏8() ⽂档加密,密码为xyz’ 宏9() ⽂档保护,密码为xyzworddoc.Close TrueFileName = Dir()End IfLoopSet worddoc = NothingMsgBox “修改完毕!请查看!!”, vbInformationEnd SubSub 宏1() '页边距,我这个是窄页边距,页眉0.7,页脚0.8’’ 宏1 宏 改页边距和页眉页脚距离,不涉及页⾯⽅向’’Selection.WholeStoryWith ActiveDocument.Styles(wdStyleNormal).FontIf .NameFarEast = .NameAscii Then.NameAscii = “”End If.NameFarEast = “”End WithWith ActiveDocument.PageSetup.LineNumbering.Active = False.TopMargin = CentimetersToPoints(1.27).BottomMargin = CentimetersToPoints(1.27).LeftMargin = CentimetersToPoints(1.27).RightMargin = CentimetersToPoints(1.27).Gutter = CentimetersToPoints(0).HeaderDistance = CentimetersToPoints(0.7).FooterDistance = CentimetersToPoints(0.8).FirstPageTray = wdPrinterDefaultBin.OtherPagesTray = wdPrinterDefaultBin.SectionStart = wdSectionNewPage.OddAndEvenPagesHeaderFooter = False.DifferentFirstPageHeaderFooter = False.VerticalAlignment = wdAlignVerticalTop.SuppressEndnotes = False.MirrorMargins = False.TwoPagesOnOne = False.BookFoldPrinting = False.BookFoldRevPrinting = False.BookFoldPrintingSheets = 1.GutterPos = wdGutterPosLeft.LayoutMode = wdLayoutModeLineGridEnd WithActiveDocument.SaveEnd SubSub 宏2() '去页脚’’ 宏3 宏 只能去除⼀⾏页脚,可以重复运⾏⼀下’’If ActiveWindow.View.SplitSpecial <> wdPaneNone ThenActiveWindow.Panes(2).CloseEnd IfIf ActiveWindow.ActivePane.View.Type = wdNormalView Or ActiveWindow. _ ActivePane.View.Type = wdOutlineView ThenActiveWindow.ActivePane.View.Type = wdPrintViewEnd IfActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageFooter Selection.EndKey Unit:=wdLine, Extend:=wdExtendSelection.TypeBackspaceActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument ActiveDocument.SaveEnd SubSub 宏3() '替换年⽉⽇’’ 替换年⽉⽇ 宏’’Selection.find.ClearFormattingSelection.find.Replacement.ClearFormattingWith Selection.find.Text = “年⽉⽇”.Replacement.Text = “2019年4⽉18⽇”.Forward = True.Wrap = wdFindContinue.Format = False.MatchCase = False.MatchWholeWord = False.MatchByte = False.MatchAllWordForms = False.MatchSoundsLike = False.MatchWildcards = TrueEnd WithSelection.find.Execute Replace:=wdReplaceAllActiveDocument.SaveEnd SubSub 宏4() '加页码’’ 加页码 宏If ActiveWindow.View.SplitSpecial <> wdPaneNone ThenActiveWindow.Panes(2).CloseEnd IfIf ActiveWindow.ActivePane.View.Type = wdNormalView Or ActiveWindow. _ActivePane.View.Type = wdOutlineView ThenActiveWindow.ActivePane.View.Type = wdPrintViewEnd IfActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageFooterApplication.Templates( _“C:\Users\Administrator\AppData\Roaming\Microsoft\Document Building Blocks\2052\15\Built-In Building Blocks.dotx” _).BuildingBlockEntries(“加粗显⽰的数字 2”).Insert Where:=Selection.Range, _RichText:=TrueActiveDocument.SaveActiveWindow.ActivePane.View.SeekView = wdSeekMainDocumentActiveDocument.SaveEnd SubSub 宏5() '插⼊表格,插⼊的东西运⾏前要复制⼀下’’ 插⼊表格 宏’’Selection.EndKey Unit:=wdLineSelection.PasteAndFormat (wdFormatOriginalFormatting)Selection.WholeStorySelection.Fields.UpdateActiveDocument.SaveEnd SubSub 宏7() '变编号页眉编号变化Dim mysec As SectionFor Each mysec In ActiveDocument.Sectionsmysec.Headers(1).Range.Text = Replace(Replace(mysec.Headers(1).Range.Text, “-04/00-”, “-04/01-”), Chr(13), “”) mysec.Headers(1).Range.Text = Replace(Replace(mysec.Headers(1).Range.Text, “-03/03-”, “-04/00-”), Chr(13), “”) mysec.Headers(1).Range.Text = Replace(Replace(mysec.Headers(1).Range.Text, “-03/02-”, “-03/03-”), Chr(13), “”) mysec.Headers(1).Range.Text = Replace(Replace(mysec.Headers(1).Range.Text, “-03/01-”, “-03/02-”), Chr(13), “”) mysec.Headers(1).Range.Text = Replace(Replace(mysec.Headers(1).Range.Text, “-03/00-”, “-03/01-”), Chr(13), “”) mysec.Headers(1).Range.Text = Replace(Replace(mysec.Headers(1).Range.Text, “-02/03-”, “-03/00-”), Chr(13), “”) mysec.Headers(1).Range.Text = Replace(Replace(mysec.Headers(1).Range.Text, “-02/02-”, “-02/03-”), Chr(13), “”) mysec.Headers(1).Range.Text = Replace(Replace(mysec.Headers(1).Range.Text, “-02/01-”, “-02/02-”), Chr(13), “”) mysec.Headers(1).Range.Text = Replace(Replace(mysec.Headers(1).Range.Text, “-02/00-”, “-02/01-”), Chr(13), “”) mysec.Headers(1).Range.Text = Replace(Replace(mysec.Headers(1).Range.Text, “-01/03-”, “-02/00-”), Chr(13), “”) mysec.Headers(1).Range.Text = Replace(Replace(mysec.Headers(1).Range.Text, “-01/02-”, “-01/03-”), Chr(13), “”) mysec.Headers(1).Range.Text = Replace(Replace(mysec.Headers(1).Range.Text, “-01/01-”, “-01/02-”), Chr(13), “”) mysec.Headers(1).Range.Text = Replace(Replace(mysec.Headers(1).Range.Text, “-01/00-”, “-01/01-”), Chr(13), “”) NextActiveDocument.SaveEnd SubSub 宏8() '⽂档加密With OptionsAllowFastSave = TrueBackgroundSave = Truecreatbackup = FalseSavePropertiesPrompt = FalseSaveInterval = 10SaveNormalPrompt = FalseEnd WithWith ActiveDocument.ReadOnlyRecommended = False.SaveFormsData = False.SaveSubsetFonts = False'.Password = “123456”.WritePassword = “xyz”End WithApplication.DefaultSaveFormat = “”End SubSub 宏9() '⽂档保护’’ 宏11 宏’’ActiveDocument.Protect Password:=“xyz”, NoReset:=False, Type:= _wdAllowOnlyReading, UseIRM:=False, EnforceStyleLock:=FalseActiveDocument.SaveEnd Sub.Global = True.IgnoreCase = True.MultiLine = False.Pattern = “-JS-[0-9]” '匹配⼀个-JS-数字的字符串End WithDim mysec As SectionDim n As StringDim n1 As StringDim n2 As StringDim x As Stringn = ’提取⽂件名字符串到nn1 = str(Val(n))'提取字符串n的数字部分i = Len(n1)'计算n1的长度x = String(4 - i, “0”) & n1’n1在左边⽤0补⾜3位n2 = “-JS-” & xn2 = Replace(n2, " ", “”)'去掉字符串n2的空格For Each mysec In ActiveDocument.Sectionsmysec.Headers(1).Range.Text = Replace(reg.Replace(mysec.Headers(1).Range.Text, n2), Chr(13), “”) NextActiveDocument.SaveEnd SubWordBasic.ViewFooterOnlySelection.WholeStorySelection.Delete Unit:=wdCharacter, Count:=1Selection.TypeText Text:="************************ 技术部 编号:NFSK/QT-JS-120-01/00-****"ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocumentDim reg As New RegExpWith reg.Global = True.IgnoreCase = True.MultiLine = False.Pattern = “-JS-[0-9]” '匹配所有⾮汉字、⾮数字0-9、⾮字母End WithContent = reg.Replace(Content, “,”) '将匹配的内容⽤英⽂状态逗号替换Dim mysec As SectionDim n As StringDim n1 As StringDim n2 As StringDim x As Stringn =n1 = str(Val(n))i = Len(n1)x = String(4 - i, “0”) & n1n2 = “-JS-” & xn2 = Replace(n2, " ", “”)For Each mysec In ActiveDocument.Sectionsmysec.Headers(1).Range.Text = Replace(reg.Replace(mysec.Headers(1).Range.Text, n2), Chr(13), “”) NextActiveDocument.SaveEnd Sub。
