使用 VBA 管理同一 Word 文档中的多个样式定义
Using VBA to manage multiple styles definitions in the same Word document
TL/DR:我在下面有一个关于如何做到这一点的游戏计划;但是,我想知道我的计划是否会被证明太复杂,以及在开始构建这个项目之前我需要考虑哪些额外的考虑因素。虽然我不是经验丰富的程序员,但我不是要代码;我正在征求经验丰富的 Word VBA 程序员的反馈,以了解我的整个 idea/approach 是否是一个巨大的错误。
我有一份报告文档 "template"(还不是模板文件类型 - 我希望按如下所述创建它)。该报告分为不同的部分:
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)具有不同的样式和格式。这可以通过为每个 metasection 设置多种样式来实现,例如:
Normal-Letter
Normal-SectionI
Normal-Appendices
Heading1-Letter
Heading1-SectionI
Heading1-Appendices
这很快就会变得难以管理。
为了避免用户费力地从大量样式中找到正确的样式(值得注意的是,如果此报告的用户必须这样做,他们很可能不会使用样式 AT ALL),如果我可以使用相同的样式名称(例如,Normal
)根据它在文档的哪个部分找到而有所不同,那就太好了。或者说另一种方式,我希望文档根据部分具有多个样式集。
用户体验的目标是:
- 用户只需根据需要应用
Normal
样式、Heading1
样式等。
- 当通过
Modify Style
对话框或其他方式编辑样式时,注册的特定于部分的样式定义会更新。
- 更改样式时,或打开、保存或打印文档时,会自动且透明地应用样式。
- 备选方案:如果 automatic/transparent 样式应用程序证明太难,请使用简单的命令按钮执行样式应用程序例程。
我关于如何在 VBA 中执行此操作的初步想法是:
- 编写VBA代码(可能是class),使得每个文档部分都有一个
Normal
s和Heading1
s等的样式注册表.
- 编写一个样式应用程序子例程,它遍历已注册的文档部分,选择每个已注册样式的所有部分,并应用样式注册表中的特定于部分的样式(保留任何偏离样式定义的样式) .
- 编写一个样式更新子例程,自动透明地更新已注册的样式定义
- 样式应用程序子例程在任何时候在已注册部分之一的任何位置应用样式时执行(因此我需要在此处绑定到事件)。
- 只要已注册部分中的样式定义发生更改,样式更新子例程就会执行(因此这是我需要监视的另一个事件)。
我之前 asked a similar question 关于超级用户的这个话题。我收到的反馈让我相信我只能使用 VBA 完成我想要的行为,所以我现在在 Whosebug 上问一个后续问题。
我的问题是:我在这里犯错了吗?我觉得有比这更好的方法来解决这个问题(也许使用 VBA,也许不使用)。
是的,在我看来,你犯了一个错误。
我最近刚刚完成了一个项目,我为一家公司创建了一个文档模板。我的经历:
- 用户的知识水平各不相同(很明显)
- 高级用户不喜欢 over-engineered 文件,因为他们不能使用自己的宏,因为它们可能与文件自己的宏冲突,他们不能使用他们的文档属性或他们自己的建筑块等,因为这些可能与宏不兼容(或者至少他们认为它们不会工作,并且 fiddle 直到他们真正设法破坏它们)
- 低级别用户被自动化所吓倒,并尽可能地避免它们(这意味着只要他们的老板不命令他们使用该文件),之后他们开始讨厌该文件和作品
- 像这样的复杂解决方案通常会在几年后被放弃。例如。原来的开发人员换了工作,或者调到另一个部门,没有人对代码有足够的了解来继续管理它(特别是如果它不是 well-documented、well-written 代码,它不会是,因为你不是一个有经验的 VBA 程序员)。
- 开发人员(您)将被(有时是错误的)错误报告和问题以及微小的更改请求所淹没,这在几周后变得非常烦人(相信我:))。如果不咨询您,他们甚至不敢更改字体大小,最后,他们会要求您这样做。或者,更糟糕的是,他们试图更改某些内容,破坏它,然后告诉您修复错误。
- 您的用户必须记住使用路段制动器或其他类型的指示器来指示下一路段。这对某些人来说似乎太多了,太复杂了,如果他们不小心删除了一个部分指示器(他们不可避免地会这样做),所有的地狱刹车都会失去,最糟糕的是:
- 撤消功能将在每个宏 运行 后被禁用。这对大多数用户来说是一场灾难。您不会对您的用户这样做。
所以我会说不要走宏观路线。 不要使用 Doc 属性,这在我工作的公司不起作用。 (实际上是一家 IT 公司,主要有 high-level 用户 :) ) high-level 用户将创建和使用自己的文档属性,对于其他人来说,这只是一个麻烦。 书签经常被删除,所以no-go要么。
我的建议:
- 使用样式。用户将很快学会使用它们。
- 获得体面的文档设计。在一个文档中有 4 套不同的 title、heading 和 normal styles 真的很不专业。 一致性 很重要,尤其是因为这似乎是给客户的一封信。 (是的,我知道,你的公司是不同的,你的老板很笨,这是一个特例,而且......只是说,和设计师谈谈,让你的模板看起来更专业。)
- 您可以基于模板管理样式库(“主页”选项卡,居中)下拉列表 - 这样您的模板就会将使用过的样式加载到顶部的下拉列表中,并删除其他所有内容。这真的很好用,甚至多达 20 种样式也是可以管理的,如果它们是 well-named.
- 使用构建基块:标题页、表格、pre-written 和格式化的快速部分(法律 mumbo-jumbo、公司介绍、联系人等)、headers 和页脚...
而且,如果你想happy-happy和合作用户:
- 创建空白模板后,创建完整模板:
- 用文本、pre-written 段落、pre-written 标题填充文档模板,因此他们只需单击并重写,无需格式化或为样式和封面而烦恼,很多
- 教育用户:2 个 1.5 小时的会话 class 可以大有帮助。这是必须的。
长post。最后一件事:创建一个复杂的 Word 模板,您将在 Word 错误和烦恼的海洋中航行。即使不编写宏,这也不是在公园散步。 (例如,我放弃了让我的目录在 Office 2013 中工作,因为在 3 天和 10 个版本之后,它仍然会在插入时继续创建最大尺寸的额外段落。仅在 W2013 中。仍然不知道为什么,但我让它开始了。)
无论您决定做什么,祝您好运,并保持耐心! :)
TL/DR:我在下面有一个关于如何做到这一点的游戏计划;但是,我想知道我的计划是否会被证明太复杂,以及在开始构建这个项目之前我需要考虑哪些额外的考虑因素。虽然我不是经验丰富的程序员,但我不是要代码;我正在征求经验丰富的 Word VBA 程序员的反馈,以了解我的整个 idea/approach 是否是一个巨大的错误。
我有一份报告文档 "template"(还不是模板文件类型 - 我希望按如下所述创建它)。该报告分为不同的部分:
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)具有不同的样式和格式。这可以通过为每个 metasection 设置多种样式来实现,例如:
Normal-Letter
Normal-SectionI
Normal-Appendices
Heading1-Letter
Heading1-SectionI
Heading1-Appendices
这很快就会变得难以管理。
为了避免用户费力地从大量样式中找到正确的样式(值得注意的是,如果此报告的用户必须这样做,他们很可能不会使用样式 AT ALL),如果我可以使用相同的样式名称(例如,Normal
)根据它在文档的哪个部分找到而有所不同,那就太好了。或者说另一种方式,我希望文档根据部分具有多个样式集。
用户体验的目标是:
- 用户只需根据需要应用
Normal
样式、Heading1
样式等。 - 当通过
Modify Style
对话框或其他方式编辑样式时,注册的特定于部分的样式定义会更新。 - 更改样式时,或打开、保存或打印文档时,会自动且透明地应用样式。
- 备选方案:如果 automatic/transparent 样式应用程序证明太难,请使用简单的命令按钮执行样式应用程序例程。
我关于如何在 VBA 中执行此操作的初步想法是:
- 编写VBA代码(可能是class),使得每个文档部分都有一个
Normal
s和Heading1
s等的样式注册表. - 编写一个样式应用程序子例程,它遍历已注册的文档部分,选择每个已注册样式的所有部分,并应用样式注册表中的特定于部分的样式(保留任何偏离样式定义的样式) .
- 编写一个样式更新子例程,自动透明地更新已注册的样式定义
- 样式应用程序子例程在任何时候在已注册部分之一的任何位置应用样式时执行(因此我需要在此处绑定到事件)。
- 只要已注册部分中的样式定义发生更改,样式更新子例程就会执行(因此这是我需要监视的另一个事件)。
我之前 asked a similar question 关于超级用户的这个话题。我收到的反馈让我相信我只能使用 VBA 完成我想要的行为,所以我现在在 Whosebug 上问一个后续问题。
我的问题是:我在这里犯错了吗?我觉得有比这更好的方法来解决这个问题(也许使用 VBA,也许不使用)。
是的,在我看来,你犯了一个错误。 我最近刚刚完成了一个项目,我为一家公司创建了一个文档模板。我的经历:
- 用户的知识水平各不相同(很明显)
- 高级用户不喜欢 over-engineered 文件,因为他们不能使用自己的宏,因为它们可能与文件自己的宏冲突,他们不能使用他们的文档属性或他们自己的建筑块等,因为这些可能与宏不兼容(或者至少他们认为它们不会工作,并且 fiddle 直到他们真正设法破坏它们)
- 低级别用户被自动化所吓倒,并尽可能地避免它们(这意味着只要他们的老板不命令他们使用该文件),之后他们开始讨厌该文件和作品
- 像这样的复杂解决方案通常会在几年后被放弃。例如。原来的开发人员换了工作,或者调到另一个部门,没有人对代码有足够的了解来继续管理它(特别是如果它不是 well-documented、well-written 代码,它不会是,因为你不是一个有经验的 VBA 程序员)。
- 开发人员(您)将被(有时是错误的)错误报告和问题以及微小的更改请求所淹没,这在几周后变得非常烦人(相信我:))。如果不咨询您,他们甚至不敢更改字体大小,最后,他们会要求您这样做。或者,更糟糕的是,他们试图更改某些内容,破坏它,然后告诉您修复错误。
- 您的用户必须记住使用路段制动器或其他类型的指示器来指示下一路段。这对某些人来说似乎太多了,太复杂了,如果他们不小心删除了一个部分指示器(他们不可避免地会这样做),所有的地狱刹车都会失去,最糟糕的是:
- 撤消功能将在每个宏 运行 后被禁用。这对大多数用户来说是一场灾难。您不会对您的用户这样做。
所以我会说不要走宏观路线。 不要使用 Doc 属性,这在我工作的公司不起作用。 (实际上是一家 IT 公司,主要有 high-level 用户 :) ) high-level 用户将创建和使用自己的文档属性,对于其他人来说,这只是一个麻烦。 书签经常被删除,所以no-go要么。
我的建议:
- 使用样式。用户将很快学会使用它们。
- 获得体面的文档设计。在一个文档中有 4 套不同的 title、heading 和 normal styles 真的很不专业。 一致性 很重要,尤其是因为这似乎是给客户的一封信。 (是的,我知道,你的公司是不同的,你的老板很笨,这是一个特例,而且......只是说,和设计师谈谈,让你的模板看起来更专业。)
- 您可以基于模板管理样式库(“主页”选项卡,居中)下拉列表 - 这样您的模板就会将使用过的样式加载到顶部的下拉列表中,并删除其他所有内容。这真的很好用,甚至多达 20 种样式也是可以管理的,如果它们是 well-named.
- 使用构建基块:标题页、表格、pre-written 和格式化的快速部分(法律 mumbo-jumbo、公司介绍、联系人等)、headers 和页脚...
而且,如果你想happy-happy和合作用户:
- 创建空白模板后,创建完整模板:
- 用文本、pre-written 段落、pre-written 标题填充文档模板,因此他们只需单击并重写,无需格式化或为样式和封面而烦恼,很多
- 教育用户:2 个 1.5 小时的会话 class 可以大有帮助。这是必须的。
长post。最后一件事:创建一个复杂的 Word 模板,您将在 Word 错误和烦恼的海洋中航行。即使不编写宏,这也不是在公园散步。 (例如,我放弃了让我的目录在 Office 2013 中工作,因为在 3 天和 10 个版本之后,它仍然会在插入时继续创建最大尺寸的额外段落。仅在 W2013 中。仍然不知道为什么,但我让它开始了。)
无论您决定做什么,祝您好运,并保持耐心! :)