【问题标题】:Word Shapes corruption when opening HTML document打开 HTML 文档时 Word 形状损坏
【发布时间】:2014-07-09 19:38:52
【问题描述】:

here 可用的 HTML 文档似乎破坏了 VBA - 它会使 Word 2003 崩溃,而 Word 2010 的行为似乎很奇怪。

如果您在 Word 中打开 HTML 文档,在 VBA 编辑器中按 ALT+F11,添加一个类并粘贴以下代码:

Sub Test()
    Dim obj As Document
    Set obj = Application.ActiveDocument

    MsgBox (obj.Shapes.Count)

    For Each a In obj.Shapes
        MsgBox (a) 'THIS NEVER GETS HIT - w00t
    Next

End Sub

在第二个消息框上添加断点 - 它不会被命中。

这没有道理。 Word中的错误?损坏的 HTML?

【问题讨论】:

  • 我在 Word 2010 中尝试过,但也无法进入循环。我还尝试将内容复制到普通的word文档中,同样的故事。另一件事:obj.shapes.selectall 给出“内存不足”错误。恐怕不能再帮你了。
  • 我无法将您的 HTML 加载到我的 Word (2013) 中...无论如何,尝试将您的代码添加到模块,而不是类。接下来尝试以这种方式循环InlineShapesFor Each a in obj.InlineShapes
  • 我认为html文件与Word不兼容,查看html源代码,关于形状的细节太少(或仅特定于某些程序)。特别是path="m@4@5l@4@11@9@11@9@5xe"。你能确认这个html文件是在哪里生成的吗?
  • Shape 集合中的Shapes 对象似乎无效。如果你尝试访问单个对象(例如Debug.Print(obj.Shapes(1).Name)),你会得到invalid procedure call or argument,但是当你尝试一个不存在的索引值时,比如obj.Shapes(9).Name,你会得到index into the specified collection is out of bounds

标签: vba interop ms-word shapes


【解决方案1】:

感谢帕特里克

形状元素的路径属性似乎已损坏。我们需要仔细研究原始消息及其来源。

“原始”味精文件中的路径:

path="m@4@5l@4@11@9@11@9@5xe"

一旦静音(到 path="")问题就解决了。

http://msdn.microsoft.com/en-us/library/bb263871%28v=vs.85%29.aspx

我认为路径的逗号在某些时候被转换为 (@) 符号,因为如果我们替换它们将是有效的,查看上面链接中的路径规范。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-29
    相关资源
    最近更新 更多