Word宏可取消对文本框的分组

时间:2018-07-02 18:21:00

标签: ms-word word-vba

我在残疾人服务办公室工作,我们经常做的一件事是放大从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

1 个答案:

答案 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