如何编辑只读 Word 文档 (VBA)

Posted

技术标签:

【中文标题】如何编辑只读 Word 文档 (VBA)【英文标题】:How to Edit a Read-Only Word Document (VBA) 【发布时间】:2017-11-17 23:32:13 【问题描述】:

我会定期从各种客户那里获取 Word 文档,有时他们会以“只读”模式将它们发送给我。虽然手动转到“查看 > 编辑文档”并不是什么大不了的事,但我似乎无法在我的 VBA 代码中找到如何执行此操作。

将文档打开为可编辑或在打开后将其切换为可编辑就足以满足我的需求。

请注意,我无法使用“readOnly = false”打开文档,因为它看起来被设置为“推荐只读”(基于我阅读 Document.Open 上的 MS 手册页)。

在上下文中: 我也遇到了关闭文档默认打开的“读取模式”的问题。我已经发布了这个问题和答案here。

【问题讨论】:

您需要打开文档Read OnlySaveAs 一个可编辑的文档。使用Kill命令删除原文件。 @Variatus,您能否详细说明我需要哪些命令来执行 SaveAs 到可编辑文档?这是我尝试过但不起作用的方法(新文档也以只读方式打开): Set oWd = Documents.Open(origFile) oWd.SaveAs2 FileName:=newFile, ReadOnlyRecommended:=False oWd.Close Set oWd = Documents.Open(newFile) 另外,对不起,我无法为我的评论找出换行符:(。 【参考方案1】:

下面的代码将更改已关闭文件的 ReadOnly 属性,根据提供给过程的参数将其 ReadOnly 属性设置为 True 或 False。

Private Sub SetReadOnlyProperty(Fn As String, _
                                ByVal ReadOnly As Boolean)
    ' 21 Nov 2017

    Dim Fso As Object
    Dim Doc As Object

    Set Fso = CreateObject("Scripting.FileSystemObject")
    Set Doc = Fso.GetFile(Fn)

    If (Doc.Attributes And vbReadOnly) <> Abs(Int(ReadOnly)) Then
        Doc.Attributes = Doc.Attributes Xor vbReadOnly
    End If
End Sub

此过程需要访问 MS Scripting Runtime DLL。通过在 VBE 窗口中的工具 > 参考中选中 Miscrosoft Scripting Runtime 复选框来启用此访问。下面是如何调用该函数的示例。请注意,如果提供的文件不存在,则会导致错误。

Private Sub TestReadOnly()
    SetReadOnlyProperty "H:\Test Folder\Test File.docx", False
End Sub

【讨论】:

感谢@Variatus 的澄清。你能评论一下启用这个参考有什么危险吗? IE。当我发布我的工具时,我已经了解了其他参考资料在其他工作站上不起作用。我相信我运行我的工具的一些工作站也有更严格的安全策略,可以禁用一些 DLL(据我所知)......所以我实际上可能比“基线”2010/2013 MS 使用的参考更少办公室部署... 我不是这个主题的权威。但是我相信所有 Microsoft DLL 都是安全的。其中一些默认情况下不加载,以实现更快的加载。 Scripting Runtime 有一些不包含在其他 VBA DLL 中的对象,您甚至不会询问。当您使用自定义 DLL 时,您应该小心。顺便说一句,我认为对 Scripting Runtime 的引用与文档一起保存,并且 DLL 本身是 Office 安装的一部分。因此,您不必在每台计算机上启用引用。

以上是关于如何编辑只读 Word 文档 (VBA)的主要内容,如果未能解决你的问题,请参考以下文章

Word 只读模式修改

excel中使用vba以只读方式打开工作薄的操作方法

Airflow 中文文档:使用测试模式配置

el-input-number设置只读属性

ue4蓝图类的事件图标是只读,无法编辑怎么办 只看楼主收藏回复

C#中XML文档的读取编写方法?