Vba MS Word中隐藏文本框的未知状态

Vba MS Word中隐藏文本框的未知状态,vba,ms-word,Vba,Ms Word,我正在创建一组宏来清理和重新格式化特定的MS Word文档。当我遇到一个隐藏的文本框时,我开始循环浏览Word文档标题中的文本框,我无法通过任何其他方式在文档中找到该文本框 该文本框在文档中不可见,我无法将其与VBA中的其他文本框区分开来,除了文档中的位置、内容和顺序稍有不同之外。我可以读写它的属性,甚至可以“选择”它,但我在文档中看不到它,也无法通过VBA将它与其他文本框区分开来 我想做的是能够通过VBA确定这个神秘文本框和其他可见文本框之间的区别,除了位置、内容和顺序属性。我想能够找到“隐藏

我正在创建一组宏来清理和重新格式化特定的MS Word文档。当我遇到一个隐藏的文本框时,我开始循环浏览Word文档标题中的文本框,我无法通过任何其他方式在文档中找到该文本框

该文本框在文档中不可见,我无法将其与VBA中的其他文本框区分开来,除了文档中的位置、内容和顺序稍有不同之外。我可以读写它的属性,甚至可以“选择”它,但我在文档中看不到它,也无法通过VBA将它与其他文本框区分开来

我想做的是能够通过VBA确定这个神秘文本框和其他可见文本框之间的区别,除了位置、内容和顺序属性。我想能够找到“隐藏”文本框并将其删除,问题是我无法确定哪一个是“隐藏”文本框

我创建了一个缩小版本的文档,其中只有神秘文本框和一个常规文本框,并上传了它,它的标题中有两个文本框,并且使用以下代码启用了宏:

Option Explicit

Sub findTextBox()

    Dim objShapeCount As Integer
    Dim objShapes As Shapes
    Dim state As MsoTriState
    Dim i As Integer

    Set objShapes = ActiveDocument.Sections(1).Headers(wdHeaderFooterFirstPage).Shapes
    objShapeCount = objShapes.Count
    Debug.Print "Number of shapes: " + CStr(objShapeCount)

        For i = objShapeCount To 1 Step -1
        If objShapes(i).Type = msoTextBox Then
            'Texbox found
            objShapes(i).Select
            MsgBox objShapes(i).TextFrame.TextRange
            'Debug everything
            Debug.Print "Type: " + CStr(objShapes(i).Type)
            Debug.Print "Name: " + CStr(objShapes(i).Name)
            Debug.Print "Height: " + CStr(objShapes(i).Height)
            Debug.Print "Width: " + CStr(objShapes(i).Width)
            Debug.Print "Left: " + CStr(objShapes(i).Left)
            Debug.Print "Top: " + CStr(objShapes(i).Top)
            Debug.Print "Id: " + CStr(objShapes(i).ID)
            objShapes(i).Visible = 1 'C'mon! Show me!
            Debug.Print "Invisible: " + CStr(state = objShapes(i).Visible) 'Crap
            Debug.Print "Z Order: " + CStr(objShapes(i).ZOrderPosition)
            Debug.Print "Background: " + CStr(objShapes(i).BackgroundStyle)
        End If

    Next i

End Sub
有人能通过VBA找到区分它们的方法吗?提前谢谢

更新:

在花了几天的时间试图弄清楚这个乱七八糟的东西之后,我得出结论,这个神秘的文本框要么是一个旧的腐败文本框,要么是一些没有从其他软件正确导入的东西

基于这个前提,我使用Z顺序来分隔任意两个具有相同属性的文本框,其逻辑是最近添加的文本框(Z顺序较高的文本框)就是客户机想要使用的文本框

到目前为止,这已经解决了,这不是傻瓜证明,但这是所有我必须继续下去。宏运行后,所有文档都将进行校对,因此应捕获任何错误


我仍然愿意接受其他建议,但我将暂时使用它。

我没有Word 2007,因此无法在Word中查看它。但是2007文件是zip文件。因此,将文件重命名为zip并将其作为文件夹打开。在Header2.xml和header3.xml中有一个名为MysteryTextBox的形状,它是二进制数据。只需备份并删除xml即可


如果你想解码,请看这里

这是一个奇怪的问题。看起来您的神秘文本框属于第一个页眉(在您的文档中并不存在,除非是潜在的)

因此,要检查它,请尝试以下方法:

ActiveDocument.Sections(1).Headers(wdHeaderFooterFirstPage).Shapes(2).Anchor.Information(wdHeaderFooterType)
我不确定您将如何处理这些信息,但神秘框的值为4(或第一页页眉),而不是1(奇数页眉)。有关可能值的说明,请参见本页:

请注意,您可以选择锚定,而不是框本身(无论其在标题中的位置如何,它都位于Textframe故事中)。

我最终(意外地)找到了丢失的文本框。它存在于第一页标题中。可以通过更改布局选项卡上的页面设置并选中“不同的第一页”来查看


即使此文档没有首页标题,文本和文本框仍然可以存在,并且在设置更改时不会被删除

谢谢,不过我想通过VBA自动化这个过程,并将其分发给其他人使用。当我收到文档时,该文本框可以被称为任何名称,我需要一种方法来区分VBA中的可见框和隐藏框。它给了我一个想法,用红线标出2个XML文件的属性差异,所以我会尝试一下。我有一些RTF知识和工具(但Word的RTF大多是胡言乱语)。作为RTF,它可以加载到富文本框中,并通过窗口或富文本框的对象模型通过文本对象模型(TOM)访问。通过Dropbox访问该文件。谢谢。是的,很奇怪。原始文件的第一页页眉中有两个文本框,我在缩小文档时没有更新代码。因此,两个框的.anchor.information(wdHeaderFooterType)值相同?很抱歉,在原始文件中,两个文本框都位于第一页页眉中,值为4。创建示例时,我必须更改文本框的位置。谢谢你的意见。