我正在创建一组宏来清理和重新格式化特定的MS Word文档。当我遇到一个隐藏的文本框时,我通过循环访问Word文档标题中的文本框,但无法通过任何其他方式在文档中找到该框。MS Word中隐藏文本框的未知状态
问题中的文本框在文档中不可见,除了文档中的位置差异,内容和顺序之外,我无法从VBA中的其他文本框中区分出它。我可以阅读和写入其属性,甚至“选择”它,但我无法在文档中看到它,并且无法通过VBA与其他文本框区分开来。
我想要做的是能够通过VBA除了位置,内容和订单属性之外,确定这个神秘文本框和其他可见文本框之间的区别。我希望能够找到“隐藏”文本框并将其删除,问题是我无法确定哪一个是“隐藏”文本框。
我创建的文档的缩小版,只有神秘的文本框和另外一个普通的文本框,并上载here on Dropbox,它在头两个文本框,并用下面的代码启用宏:
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顺序的文本框)为文本客户想要使用的框。
到目前为止,这已经解决了,这不是傻瓜式的,但这是我必须继续。一旦宏运行,所有文档都会被校对,因此应该捕获任何错误。
我仍然愿意接受其他建议,但我暂时还是会这样做。
谢谢,不过我正在试图通过VBA自动化这个过程并将它分发给其他人使用。当我收到文档时,该文本框可以被调用,我需要一种方法来区分VBA中隐藏的可见框。它给了我这个想法,以便为2个XML文件重新划分属性差异,所以我会尝试。 – Iridium52 2014-09-23 21:46:18
建立文档的RTF格式。我有一些RTF知识和工具(但Word的RTF大多是乱码)。作为RTF,它可以加载到richtext文本框中,并通过文本对象模型(TOM)通过窗口或通过Rich Text Box的对象模型进行访问。 – Noodles 2014-09-23 22:20:23
[这是一个RTF版本](https://www.dropbox.com/s/2z8temdycdyoatp/Mystery_Text_Box.rtf?dl=0)通过Dropbox的文件。谢谢。 – Iridium52 2014-09-23 23:38:46