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

时间:2015-03-04 22:22:13

标签: 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

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

Normal-Letter
Normal-SectionI
Normal-Appendices
Heading1-Letter
Heading1-SectionI
Heading1-Appendices 

这很快就会变得难以管理。

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

用户体验的目标是:

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

    1. 编写VBA代码(可能是一个类),使每个文档部分都有NormalHeading1等样式注册表。
    2. 编写样式应用程序子例程,该子例程遍历已注册的文档部分,选择具有每个注册样式的所有部件,并从样式注册表应用特定于部分的样式(保留任何与样式定义不同的样式)。
    3. 编写样式更新子例程,自动且透明地更新已注册的样式定义
    4. 样式应用程序子程序在任何一个注册部分的任何地方都应用样式执行(所以我需要在这里绑定事件)。
    5. 样式更新子程序在注册部分中的样式定义发生变化时执行(所以这是我需要监视的另一个事件)。
    6. 我以前asked a similar question关于超级用户的这个主题。我收到的反馈让我相信我只能用VBA完成我想要的行为,所以我现在在Stackoverflow上询问一个后续问题。

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

1 个答案:

答案 0 :(得分:5)

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

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

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

我的建议:

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

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

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

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

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