我在残疾人服务办公室工作,我们经常做的一件事是放大从PDF转换的Word文档。为了简化流程,我一直在“编写”宏(主要实际上是从其他位置或从宏记录器复制和粘贴位)以执行诸如删除多余的段落分隔符或“标准化”字体样式/大小/间距的操作。 / etc。
通常,当我们将PDF文件转换为Word文件时,最终会在文本框中输入一些文本。我希望能够从所有文本框中删除文本并将其替换为纯文本。我根本不在乎保留文本的任何格式,也不会保留装饰性的线条,而不是什么。我在搜索中发现了一些代码,这些代码适用于未分组的文本框,但是我有一个文档将文本框分组。
我找到了一个宏,该宏应该取消对形状的分组,包括文本框。但是,当我运行宏时,取消组合行会引发错误消息。 “运行时错误'-2147024891(80070005)':组已锁定,无法取消分组”我可以手动选择和取消分组文本框,除非我已手动将它们设置为文档中的内联,此时“取消分组”选项在该标签中显示为灰色。如果我仅将文本框复制到新文档并运行ungroup宏,则它会按预期工作,但只有在我手动将组设置为嵌入式以外的其他功能之后才能使用。如果我将其保留为嵌入式,则宏会引发相同的错误消息。
相关代码:
Sub Ungroup
Dim xNmbr As Integer
Dim strText As String
With ActiveDocument
For xNmbr = .Shapes.Count To 1 Step -1
.Shapes(xNmbr).Select
.Shapes(xNmbr).ConvertToInlineShape
.Shapes(xNmbr).Ungroup
Next
End With
End Sub
有人知道这是怎么回事吗?我知道这里还有另一个问题,询问同样的错误消息,但是它们正在使用非文本形状,因此其解决方案对我不起作用。
这是一个示例文件,与我尝试编辑的文件相同(我只是更改了文本;结构相同)。
https://www.dropbox.com/s/z6ovashu3qv43i9/Fake%20Book.docx?dl=0
谢谢!
ETA-这是一些可以完美地在我的示例文档中运行的代码,但是在其他文档中,我尝试将其删除而不是取消分组。
Sub Ungroup()
Dim xNmbr As Integer
With ActiveDocument
For xNmbr = .Shapes.Count To 1 Step -1
.Shapes(xNmbr).Select
Set thisshape = .Shapes(xNmbr)
With thisshape.WrapFormat
.Type = wdWrapSquare
End With
Next
End With
Dim mydocument As Document
Set mydocument = ActiveDocument
Dim shp As Shape
For Each shp In mydocument.Shapes
If shp.Type = msoGroup Then shp.Ungroup
Next shp
End Sub
答案 0 :(得分:0)
最后更新:我知道了!我不知道是什么引起了问题,但只是简化了一些代码,它才能正常工作。
Sub Ungroup()
Dim xNmbr As Integer
With ActiveDocument
For xNmbr = .Shapes.Count To 1 Step -1
.Shapes(xNmbr).Select
Set thisshape = .Shapes(xNmbr)
With thisshape.WrapFormat
.Type = wdWrapSquare
If thisshape.Type = msoGroup Then thisshape.Ungroup
End With
Next
End With
End Sub