我在 Word 2013 中定义了一个多级列表。
它的第 4 级已损坏并且看起来很奇怪(所有其他级别都很好):
(应该是“1.1. 4 级列表项”,但“1.1.”被掩盖了)
在“定义新的多级列表”窗口中,它的示例已经很奇怪,它只是显示为文本框左上角的一条小线(参见“字体”左侧的文本框),而列表中的示例看起来很好:
从“定义新的多级列表”窗口打开“字体”属性,我可以看到它的字体大小为 0。
但是,即使在修复字体大小之后(并且为了确保万无一失还重新选择所有值),我还是无法通过按“确定”来批准更改,也无法转到高级选项卡,因为我收到此错误消息:
我只能通过按“取消”来关闭窗口。由于这是一个多级列表,我无法轻松选择其中的一部分,根据需要设置格式,然后更改样式以匹配格式。
我也尝试过使用宏:
Font.reset
没有帮助Font.Size
为 0;.Position
、.Scaling
&.Spacing
均为 9999999,但将它们设置为有效值(分别为 12、0、100、1)根本不会产生任何效果(没有错误消息,但也没有任何改进)。
我怎样才能修复该字体而不重新创建整个列表样式?
答案1
快速上下文
在 Word 等应用程序中,有很多全局设置用于处理布局和外观等问题。这不是通过在文档内容本身的每个相关位置嵌入控制字符来实现的。相反,用户的选择被存储为集中设置,并根据规则以编程方式应用于整个文档。
该应用程序为您提供了一个漂亮的图形用户界面来处理设置,例如问题中显示的菜单和设置选择工具。但是,这并不是文档中存储的内容。该软件根据以有效方式存储在文档中的设置值生成该显示。
驱动这些规则的设置与文档内容分开存储。我将其称为文档基础结构。
由于设置可以以紧凑形式存储,少量损坏可能会影响许多不同的规则和文档的许多不同部分。但是,错误症状可以进行诊断。
诊断
有几个特征表明存在损坏,而不是不正确的用户设置,只需在菜单中输入正确的值即可修复。
您可能会看到多个毫无意义的问题,特别是在相关的设置集合中。
您无法更改设置,或者更改设置不起作用。
用户界面强制您从预设值中选择或输入符合验证规则的值。因此,您无法手动输入不符合规则的值。在此示例中,您会看到诸如 0 磅字体大小之类的内容(无法从列表中选择)。数字格式输入框中的符号不是您输入的。更能说明问题的是,这是否是您无法直接操作或删除的内容。更能说明问题的是,它是否不是标准键盘字符的符号。
修复腐败
您正在处理的是一些存储值的创建表示,而不是直接操作文档内容。因此,您只能更改用户界面允许您更改的内容。如果用户界面无法理解损坏的值,您就无法直接修复它们。
处理损坏时,用户界面的行为可能不符合所显示内容的逻辑。
您可能没有看到所有的问题。用户界面在编程限制内显示它能显示的内容。一些损坏的值可能会显示为异常。其他值可能不会显示或无法显示。还有一些可能是其他东西的产物。因此,无法知道损坏的程度(您不知道您不知道什么)。
安全的解决方案是清除它并重做,而不是尝试修复看起来像特定显示的问题。
文档基础结构单独存储这一事实对修复来说是一个好处。如果损坏发生在基础结构中,而文档内容完好无损,您可能能够替换基础结构。
使用与损坏的文档相同的模板创建一个新的(空)文档。进入损坏的文档,选择整个文档并复制。将其粘贴到新文档中。如果文档很大,您可能需要分几部分进行操作,而不是一次复制/粘贴。
这通常会再次为您提供一个工作文档。验证所有设置是否都已转移到新文档。您可能需要重新输入一些设置,但至少您将拥有一个正常运行的用户界面,并且能够执行这些操作。
答案2
我找到了一个解决方案,非常简单。
- 步骤1:按“Ctrl + f11”(此步骤是打开VBA)
- 步骤2:删除“Option Explicit”(此步骤很重要,如果保留“Option Explicit”,则按“F5”时会出错)
- 步骤 3:复制并粘贴代码至此处:
Sub ResetFontFormatsForLists() For Each templ In ActiveDocument.ListTemplates For Each lev In templ.ListLevels lev.Font.Reset Next lev Next templ End Sub
步骤 4:按“F5”运行代码。
第五步:享受并微笑。
我从这个来源了解到了这一点: https://answers.microsoft.com/en-us/msoffice/forum/all/word-2013-multilevel-list-error/c606fc3e-bc30-4590-8e4b-9bfea7312d67
答案3
感谢@Anh Chau 的回答,我可以保存我的文档。我的 3 级文件损坏了,数字字体设置为“Times New Roman”,无法修复。我按下Alt + f11
,单击文档并粘贴以下内容:
Sub ResetFontFormatsForLists()
For Each templ In ActiveDocument.ListTemplates
For Each lev In templ.ListLevels
If lev.Index = 3 Then
lev.Font.Reset
End If
Next lev
Next templ
End Sub
按下运行按钮,问题就解决了!请注意,这就像他的答案,但过滤了特定级别。否则,它会弄乱我的其他一些风格。