![ef5bc20211640850efd3a7dd5b988068.png](https://i-blog.csdnimg.cn/blog_migrate/4fbc6f05398606873e75281f6c49cf9b.jpeg)
word批量去除文本框保留文本
文本框一般以浮动的形式(即文字环绕方式为四周环绕、紧密环绕、衬于文字上方等)存在于文档中,选中文本框时可以看到在它的左侧有一个锚定标记,锚标总是在某一个段落的开头位置,表示浮动的文本框锁定于该段落,如图。
![e0c04255b09ab171fb6f14a440539a54.png](https://i-blog.csdnimg.cn/blog_migrate/2ccd0efae1bf99179904c6d63ebcaa1d.jpeg)
如果一个文档中存在大量文体框,需要去除文本框而保留其中的文字的话,在编写代码时,可以根据文本框存在锚定标记这一特点,把文本框内的文本放于锁定段落的后面,再删除文本框。
利用VBA代码批量去除文本框保留文本,不能保证文本的顺序是正确的,所以事后需要检查。下面是代码。
Sub 批量去除文本框()
'批量去除文本框,保留文本。嵌入式或浮动式的文本框都可以处理,但存在组合的文本框时无法处理。
Dim oshap As Shape, i&
Application.ScreenUpdating = False
If ActiveDocument.Shapes.Count > 0 Then
For i = ActiveDocument.Shapes.Count To 1 Step -1 '从最后一个开始往前处理,因为文本框一般为浮动式的,从前往后处理,会引起后面文本框位置的变化。
Set oshap = ActiveDocument.Shapes(i)
If oshap.TextFrame.HasText Then '存在文本时处理。因为shapes不仅包含文本框,也包含其他形状、图片等对象,所以需要判断。
oshap.Anchor.Paragraphs(1).Range.InsertAfter oshap.TextFrame.TextRange '在文本框锁定段落的后面插入文本框中的文本。
oshap.Anchor.Paragraphs(1).Next.Range.Font.ColorIndex = wdDarkRed '把文本设置为红色,以便后面检查。因为可能存在错乱。
oshap.Delete '删除文本框
End If
Next i
End If
Application.ScreenUpdating = True
End Sub