使用VBA管理同一Word文档中的多个样式定义

Ric*_*ica 3 vba ms-word word-vba office-2013

TL/DR:我有一个关于如何在下面执行此操作的游戏计划; 但是,我想知道我的计划是否会被证明过于复杂,以及在开始构建这个项目之前需要考虑哪些额外的考虑因素.虽然我不是一个经验丰富的程序员,但我不是要求代码; 我要求有经验的Word VBA程序员反馈我的整个想法/方法是否是一个巨大的错误.

我有一个文档"模板"(还不是模板文件类型 - 我希望如下所述创建它)用于报告.该报告分为不同部分:

Letter to the Client
Table of Contents
Section I
    Title Page
    Body
        1.0
        2.0
Section II
    Title Page
    Body
        1.0
        2.0
Appendix A
    Title Page
    Body
Appendix B
    Title Page
    Body
Run Code Online (Sandbox Code Playgroud)

我希望每个主要的"metasection"(例如Letter,Section I,Section II,Appendices)具有不同的样式和格式.这可以通过为每个元集具有多个样式来实现,例如:

Normal-Letter
Normal-SectionI
Normal-Appendices
Heading1-Letter
Heading1-SectionI
Heading1-Appendices 
Run Code Online (Sandbox Code Playgroud)

这很快就会变得无法管理.

为了避免用户不得不通过大量的样式来找到正确的样式(并且值得注意的是,如果这个报告的用户必须这样做,他们可能不会使用样式AT ALL),这将是不错的如果我可以有相同的样式名称(例如,Normal)取决于它找到的文档的哪个部分.或者换句话说,我希望文档具有多个样式集,具体取决于部分.

用户体验的目标是:

  1. 用户只需根据需要应用Normal样式,Heading1样式等.
  2. 通过Modify Style对话框或其他方式编辑样式时,将更新已注册的特定于部分的样式定义.
  3. 更改样式或打开,保存或打印文档时,样式将自动且透明地应用.
  4. 替代方法:如果自动/透明样式应用程序证明太困难,请使用简单的命令按钮执行样式应用程序.

我在VBA中如何做到这一点的初步想法是:

  1. 编写VBA代码(可能是一个类),使得每个文档部分都有Normals和Heading1s等样式注册表.
  2. 编写样式应用程序子例程,该子例程遍历已注册的文档部分,选择具有每个注册样式的所有部分,并从样式注册表应用特定于部分的样式(保留任何与样式定义不同的样式).
  3. 编写样式更新子例程,自动并透明地更新已注册的样式定义
  4. 样式应用程序子例程执行任何时候样式应用于其中一个注册部分(所以我需要绑定到事件).
  5. 样式更新子例程在注册部分中的样式定义发生更改时执行(所以这是我需要监视的另一个事件).

我以前在超级用户上问了一个关于这个话题的类似问题.我收到的反馈让我相信我只能用VBA完成我想要的行为,所以我现在在Stackoverflow上询问一个后续问题.

我的问题是:我在这里犯了错误吗?我觉得有一种更好的方法可以解决这个问题(也许使用VBA,也许不是).

vac*_*cip 5

是的,在我看来,你犯了一个错误.我刚刚完成了一个项目,我为公司创建了一个文档模板.我的经历:

  • 用户知识水平各不相同(显然)
  • 高级用户不喜欢过度设计的文件,因为他们不能使用他们自己的宏,因为他们可能与文件自己的宏冲突,他们不能使用他们的doc属性或他们自己的构建块等,因为这些可能将与宏不兼容(或者至少他们认为它们不起作用,并且在实际设法打破它们之前摆弄它们)
  • 低级别用户会被自动化所吓倒,并且只要他们可以继续避免它们(这意味着只要他们的老板不命令他们使用该文件),之后他们开始讨厌文件和工作
  • 像这样的复杂解决方案通常会在几年后被废弃.例如.原始开发人员更改作业,或转移到另一个部门,没有人理解代码足以继续管理它(特别是如果它不是一个记录良好,编写良好的代码,它不会,因为你不是经验丰富的VBA程序员).
  • 开发人员(你)将被淹没(有时是错误的)错误报告和问题以及微小的变更请求,几周之后会变得非常烦人(相信我:).在没有咨询你的情况下,他们不敢改变字体大小,最后,他们会要求你这样做.或者,更糟糕的是,他们试图改变某些东西,打破它,然后告诉你修复你的错误.
  • 您的用户必须记住使用分段制动器或其他类型的指示器来指示下一部分.这对某些人来说似乎太过分了,太复杂了,如果他们不小心删除了一个部分指示器(他们不可避免地会这样做),所有地狱刹车都会失去,最糟糕的是:
  • 每次宏运行后,将禁用撤消功能.对大多数用户来说,这是一场灾难.您不会对您的用户这样做.

所以我想说不要走宏观路线.不要使用在我正在使用的公司工作的Doc属性.(实际上是一家IT公司,主要是高级用户:))高级用户将创建和使用他们自己的doc属性,对于其他人来说,这只是一个麻烦.书签不断删除,所以也不要删除.

我的建议:

  • 使用样式.用户将学习快速使用它们.
    • 获得一个体面的文档设计.在一个文档中有4组不同的标题,标题和正常样式是非常不专业的.一致性很重要,特别是因为这似乎是给客户的一封信.(是的,我知道,你的公司是不同的,你的老板是愚蠢的,这是一个特殊情况,而且......只是说,与设计师交谈,并获得专业的模板外观.)
    • 您可以在模板的基础上管理样式库(主页选项卡,中心)下拉列表 - 因此您的模板会将使用的样式加载到顶部的下拉列表中,并删除其他所有内容.这非常有效,如果它们的名字很好,甚至可以管理多达20种样式.
  • 使用构建基块:标题页,表格,预先编写和格式化的快速部分(合法的mumbo-jumbo,公司介绍,联系人等),页眉和页脚......

而且,如果你想要幸福快乐和合作的用户:

  • 创建空白模板后,创建完整模板:
    • 用文本,预先写好的段落,预先写好的标题填写文档模板,这样他们只需要点击和重写,而无需格式化或打扰样式和封面页面和批次
  • 教育用户:2节1.5小时的Word课程可以有很长的路要走.这是必须的.

很长的帖子.最后一件事:创建一个复杂的Word模板,你将航行一堆Word错误和烦恼.即使没有编写宏,也不会在公园散步.(例如,我放弃了在Office 2013中进行TOC工作,因为在3天和10个版本之后,它仍然会在插入时继续创建一个最大尺寸的额外段落.仅在W2013中.仍然不知道为什么,但我让它走了.)

无论你决定做什么,祝你好运,并且有很大的耐心!:)

  • 哦,我刚刚阅读了关于你的薪水以上的人的评论,决定了许多风格的需要.听着,IT借口是最好的借口.告诉他多种风格的方式会变得多么复杂和无法使用.责怪Word,并编写有关限制的数字.向他解释说,让他的想法工作将耗资10亿美元和5年,以及闪亮的宝石和龙的肝脏.如果你坚持基本的格式,它便宜又快捷.继续指责Word和微软.请记住,您是开发人员.这意味着你是一个巫师.你不与巫师争论. (3认同)
  • 我过去有类似的项目,我不得不说几句忠告.1)期望许多用户如此愚蠢,他们永远不会学习使用风格,无论多么容易,如果奇迹仍然存在,他们仍然无法在正确的地方使用它们.2)稳健的设计是指用户不需要决定事物的外观,更多事情可以预先定义得更好.用户只需要担心内容,而不是外观.3)锁定 - 锁定可能被锁定的所有内容以免编辑.可能被编辑的每个小部分都将被滥用. (2认同)
  • 4)说他/她知道并且熟悉单词的普通用户通常具有书写,加粗,大小文本和保存文档的能力.许多用户甚至没有意识到样式不仅仅是外观,他们也不了解它们.正如@vacip所说,教育他们所有人使用并专门使用这个单一文件非常重要.5)向您的上级解释管理复杂文档的更新和更改是多么困难,不仅仅是您创建了一个文档,您还必须不时地对其进行更改. (2认同)