我正在创建一组宏来清理和重新格式化特定的MS Word文档。当我遇到一个隐藏的文本框时,我开始循环浏览Word文档标题中的文本框,但是我在文档中找不到任何其他方法。
有问题的文本框在文档中不可见,除了文档中的轻微位置差异,内容和顺序之外,我无法将其与VBA中的其他文本框区分开来。我可以读写它的属性甚至"选择"它但我无法在文档中看到它,并且无法通过VBA将其与其他文本框分开。
我想要做的是除了位置,内容和顺序属性之外,能够通过VBA确定此神秘文本框与其他可见文本框之间的区别。我希望能够找到隐藏的"文本框并删除它,问题是我无法确定哪一个是"隐藏"文本框。
我创建了一个缩小版本的文档,只有神秘文本框和另一个常规文本框并上传了here on Dropbox,它在标题中有2个文本框,并且启用了宏以下功能代码:
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顺序分隔任何具有相同属性的2个文本框,其逻辑是最近添加的文本框(具有较高Z顺序的文本框)是文本框客户想要使用。
到目前为止,这已经成功了,但这不是万无一失的,但是我必须继续下去。一旦宏运行,所有文档都会被证明,因此应该捕获任何错误。
我仍然愿意接受其他建议,但我会暂时继续这样做。
答案 0 :(得分:2)
这很奇怪。看起来你的神秘文本框属于第一页标题(除了潜在的内容之外,它在你的文档中并不存在)。
因此,要检查它,请尝试以下方法:
ActiveDocument.Sections(1).Headers(wdHeaderFooterFirstPage).Shapes(2).Anchor.Information(wdHeaderFooterType)
我不确定你将如何处理这些信息,但是神秘框的值为4(或第一页标题),而不是1(奇数页标题)。有关可能值的说明,请参阅此页面:http://www.rosetech.in/word_vba_category_document_informatoin.html
请注意,您检查了锚点,而不是框本身(无论文本框架中的文件位置如何,都在文本框架中。)
答案 1 :(得分:1)
我没有Word 2007,因此无法在Word中查看它。但2007文件是zip文件。因此,将文件重命名为zip并将其作为文件夹打开。在Header2.xml和header3.xml中有一个名为MysteryTextBox的形状及其二进制数据。只需进行备份并删除xml。
如果要解码,请在此处查看。 http://officeopenxml.com/drwShape.php
答案 2 :(得分:0)
我终于(不小心)找到了丢失的文本框。它存在于第一页标题中。通过更改布局选项卡上的页面设置并选中“不同的第一页”
可以看到它即使此文档没有第一页标题,文本和文本框仍然可以存在,并且在设置更改时不会被删除。