我正在创建一组宏,以清理和重新格式化特定的MS Word文档。当我遇到一个隐藏的文本框时,我通过循环遍历Word文档标题中的文本框开始,尽管我通过其他任何方式都无法在该文档中找到该文本框。
问题中的文本框在文档中不可见,除了文档中的位置,内容和顺序略有差异外,我无法将其与VBA中的其他文本框区分开。我可以读取和写入其属性,甚至可以“选择”它,但是我无法在文档中看到它,也无法通过VBA将其与其他文本框区分开。
我想做的是能够通过VBA来确定此神秘文本框与其他可见文本框之间的区别,除了位置,内容和顺序属性。我希望能够找到“隐藏”文本框并将其删除,问题是我无法确定哪个是“隐藏”文本框。
我创建了仅具有神秘文本框和一个其他常规文本框的文档的按比例缩小版本,并将其上传到此处的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顺序的文本框)是客户端所需的文本框的逻辑,我正在使用Z顺序分隔具有相同属性的任意两个文本框。使用。
到目前为止,这已经解决了,虽然不是万无一失,但是这就是我要做的所有事情。宏运行后,所有文档都经过校对,因此应捕获所有错误。
我仍然愿意接受其他建议,但是暂时将继续讨论。
我终于(不小心)找到了缺少的文本框。它存在于第一页标题中。可以通过更改布局标签上的页面设置并选中“第一页不同”来看到
即使此文档没有首页标题,文本和文本框仍可以在那里存在,并且在设置更改时不会被删除。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句