ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 守柔

[原创] 守柔WORD-VBA讲座[2005-9-13日更新]

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2005-7-30 09:54 | 显示全部楼层

学了老大的三课

我试做了一个常用的排版事例,可第三段,运行不了,帮我看看,好吗?

Sub 三课试做() Dim firstrange As Range, centrange As Range, endrange As Range, n As Integer, b As Integer Set firstrange = ActiveDocument.Paragraphs(1).Range '设置第一段的区域为firstrange With firstrange .Font.Size = 22 .Font.Bold = True .Font.Name = "黑体" .ParagraphFormat.Alignment = wdAlignParagraphCenter '居中对齐 .ParagraphFormat.LineUnitBefore = 0.5 '段前0.5行距 .ParagraphFormat.LineUnitAfter = 1.5 '段前1.5行距 End With '--------------------- For n = 2 To ActiveDocument.Paragraphs.Count - 1 '在第二段与倒数第二段中循环 Set centrange = ActiveDocument.Paragraphs(n).Range With centrange .Font.Size = 14 .Font.Name = "仿宋_GB2312" .ParagraphFormat.CharacterUnitFirstLineIndent = 2 '首行缩进二个字符 .ParagraphFormat.LineSpacingRule = wdLineSpaceSingle '单倍行距 .ParagraphFormat.Alignment = wdAlignParagraphJustify '对齐方式两端对齐 End With Next '--------------------- Set endrange = activdedocument.Paragraphs(ActiveDocument.Paragraphs.Count).Range '设置最后一段的区域为endrange With endrange .Font.Size = 14 .Font.Name = "宋体" .ParagraphFormat.Alignment = wdAlignParagraphRight '对齐方式右对齐 .ParagraphFormat.LineUnitBefore = 3 '段前距3行距 End With End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-7-30 15:44 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

TO 孔兄,请参:

'* +++++++++++++++++++++++++++++ '* Created By I Love You_Word!@ExcelHome 2005-7-30 15:47:17 '仅测试于System: Windows NT Word: 10.0 Language: 2052 '^The Code CopyIn [ThisDocument-ThisDocument]^' '* -----------------------------

Sub 三课试做() Dim FirstRange As Range, CentRange As Range, LastRange As Range With ActiveDocument Set FirstRange = .Paragraphs.First.Range '设置第一段的区域为firstrange '等同Set FirstRange = .Paragraphs(1).Range With FirstRange .Font.Size = 22 .Font.Bold = True .Font.Name = "黑体" .ParagraphFormat.Alignment = wdAlignParagraphCenter '居中对齐 .ParagraphFormat.LineUnitBefore = 0.5 '段前0.5行距 .ParagraphFormat.LineUnitAfter = 1.5 '段前1.5行距 End With Set CentRange = .Range(.Paragraphs(2).Range.Start, .Paragraphs.Last.Range.Start) With CentRange .Font.Size = 14 .Font.Name = "仿宋_GB2312" .ParagraphFormat.CharacterUnitFirstLineIndent = 2 '首行缩进二个字符 .ParagraphFormat.LineSpacingRule = wdLineSpaceSingle '单倍行距 .ParagraphFormat.Alignment = wdAlignParagraphJustify '对齐方式两端对齐 End With Set LastRange = .Paragraphs.Last.Range '设置最后一段的区域为LastRange With LastRange .Font.Size = 14 .Font.Name = "宋体" .ParagraphFormat.Alignment = wdAlignParagraphRight '对齐方式右对齐 .ParagraphFormat.LineUnitBefore = 3 '段前距3行距 End With End With End Sub '----------------------

'可以使用样式更好,另外,象这样的对象变量,通常定义一个MyRange 就可以了,每次刷新其Range对象范围,可以减少内存调用(三个变量与一个变量,所占内存是不一样的)

[此贴子已经被作者于2005-7-30 15:46:15编辑过]

TA的精华主题

TA的得分主题

发表于 2005-7-30 16:20 | 显示全部楼层

再问:“.Paragraphs.Last.Range.Start”这个的字面意思是最后段落的开始。从运行来看则是倒数第二段的未尾?

一个是开始,一个是未尾?我不能理解?老大,指点一下!

还有一个疑问,放在附件中!这个问题我已想了很久,就是想不通。请老大,明示。

gKBQPLAf.rar (52.86 KB, 下载次数: 89)
[此贴子已经被作者于2005-7-30 16:36:02编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-7-30 18:29 | 显示全部楼层
答复孔兄:

"我们进入WORD DOCUMNT对象的三个重要事件: 注意,DOCUMENT对象仅隶属于THISDOCUMENT类模块中,也就是当前工程下的"THISDOCUMENT"模块,它是一个类模块.而我们通常录制宏时,WORD会自动新建一个模块,它是标准模块."

第一个问题:

1、“它是一个类模块”?是否就是箭头指的thisdocument。底下不是有类模块吗?

这个类模块同底下的类模块同属类模块,但Thisdocument类模块是WORD自带的,而插入/模块/类模块,是用户向VBE工程添加的,两者不同.THISDOCUMENT类模块也可以用EXCEL中的SHEET和WORKBOOK的类模块同样理解.这是<守柔WORD编程代码集>中关于该模块的类型数据:

Select Case Avs.Type

Case 1

ComType = "标准模块"

Case 2

ComType = "类模块"

Case 3

ComType = "用户窗体"

Case 100

ComType = "ThisDocument"

Case Else

ComType = "未知模块"

End Select

2、“隶属于thisdocument类模块”,是否就是箭头指的类模块。

标准模块又是何意?

由于目前我也没有找到更适合的解释理论依据,以下是一些

模块基本上是由声明、语句和过程组成的集合,它们作为一个已命名的单元存储在一起,对 Microsoft Visual Basic代码进行组织。Microsoft标准模块 (标准模块:在该模块中,可以放置希望供WORD文档的其他过程使用的 Sub 和 Function 过程。)和类模块 (类模块:可以包含新对象的定义的模块。一个类的每个实例都新建一个对象。在模块中定义的过程成为该对象的属性和方法。类模块可以单独存在,也可以与窗体和报表一起存在。)。

关于这些情况的探讨,可以参见:http://club.excelhome.net/dispbbs.asp?boardid=2&star=2&replyid=47630&id=22237&skin=0&page=1

3、“自动新建一个模块,它是标准模块”,是否就是箭头指的newmacros,还是上一层次的“模块”。

上层次的“模块”相当于一个集合对象,而每个NewMacros,则是一个标准模块,也就是“模块”的一个元素。

4:“.Paragraphs.Last.Range.Start”这个的字面意思是最后段落的开始。从运行来看则是倒数第二段的未尾?

一个是开始,一个是未尾?我不能理解?老大,指点一下!

在下一讲中,我会详细讲述RANGE对象。这里简单说一下,RANGE对象是一个连续对象,有起始位置和结束位置构成一个区域,在这个区域中的由每一个字构成,它是在运行状态下存在的一个对象。比如说,光标位置,其SELECTION.START=SELECTION.END,对于段落而言,回车(段落标记)意味着旧段落的终止和新段落的开始,旧段落终止于段落标记之后,而新旧段则开始于段落标记之后,两者的值是一致的.

TA的精华主题

TA的得分主题

发表于 2005-7-30 18:36 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

谢谢老大的回复,看来我又要好好研究研究了。有问题再请教。

有时候,我是不是很烦?(别的会员不问,就我问。)[em24]

是的话,请老大原谅![em27]

TA的精华主题

TA的得分主题

发表于 2005-8-2 19:38 | 显示全部楼层

真是不好意思,这么好的教程,小弟居然才看到.柔兄辛苦了,虽然我WORD用的少,但是VBA是一定要学的,谢谢!

我也希望能用使用word格式做说明,方便打印.

支持柔兄版主!

TA的精华主题

TA的得分主题

发表于 2005-8-9 00:20 | 显示全部楼层

我也想好好学学,不知WORD能否做成这种形式,比如说,我输入产品的名称,就把该产品的工序过程自动生成.

不知可行吗?

TA的精华主题

TA的得分主题

发表于 2005-8-10 12:46 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2005-8-11 11:54 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2005-8-12 21:54 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

守柔版主,我想了解WORD里里关于表格的VBA,即菜单表格里的主要功能,你能讲讲吗?

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-24 07:19 , Processed in 0.038656 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表