繁体   English   中英

MS Word 宏的权限被拒绝

[英]Permission denied on MS Word macro

我有一个包含大量图像的 MS Word 文档(Office 365 版本 1803)。 我需要选择文档中的所有图像,但是手动完成的图像太多了。 在网上查看,似乎唯一的方法是使用我没有经验的宏。 我写了以下非常简单的宏:

Sub SelectAllImages()
    ActiveDocument.Shapes.SelectAll
End Sub

当我保存文档时,我被迫将其更改为启用宏的 Word 文档 (.docm),我也这样做了。 但是,每当我尝试运行宏时,都会出现以下错误:

Run-time error '70': Permission denied

我在谷歌上搜索了这个错误,但没有任何帮助我解决它。 任何人都知道我做错了什么?

编辑:作为附加数据,我想要做的是删除大部分但不是所有的图像。 我有一个 200 多页长的文档,平均每页大约有 1 张图像。 我需要发布此文档的 2 个版本:第一个包含所有图像,第二个删除了大约 12 个图像之外的所有图像。 该文档会定期更新,我不想一直更新 2 个单独的版本,并确保它们除了包含图像之外是相同的。 因此,我希望能够只维护一个版本,其中包括所有图像。 然后在每次更新后,我希望能够选择所有图像,手动取消选择我想要保留的 12 个图像,然后删除其他图像。

如果有一种方法可以以某种方式“标记”我想要保留的图像,并使用宏删除所有标记的图像,这将是一个更好的解决方案。

如果文档中有任何 InlineShapes,您将收到该错误。 只需要一个,该命令就会出错。 您必须从带有换行文本的形状中分别选择 InlineShapes。 请参阅下面的代码。

关于你关于标签的问题。 要“标记”图像,请在图像的替代文本中放置一个独特的短语,例如“请勿删除”。 然后,您可以使用如下代码删除所有图像,但已标记的图像除外。

对于内嵌图像,此代码可能会在文档中留下一个空白段落,我会将其留给您来确定您希望最终文档的外观。

Sub RemoveAllImagesWithExceptions()
Dim doc As Word.Document, iShp As Word.InlineShape
Dim shp As Word.Shape, i As Long, rng As Word.Range
Set doc = ActiveDocument
Set rng = doc.Content
For i = rng.InlineShapes.Count To 1 Step -1
    Set iShp = rng.InlineShapes(i)
    Select Case iShp.Type
        Case wdInlineShapeLinkedPicture, wdInlineShapePicture
            If InStr(1, iShp.AlternativeText, "Do Not Delete") = 0 Then
                iShp.Delete
            End If
    End Select
Next
For i = rng.ShapeRange.Count To 1 Step -1
    Set shp = rng.ShapeRange(i)
    Select Case shp.Type
        Case msoLinkedPicture, msoPicture
            If InStr(1, shp.AlternativeText, "Do Not Delete") = 0 Then
                shp.Delete
            End If
    End Select
Next
End Sub

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM