2017-11-17 417 views
0

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

将文档打开为可编辑状态,或者在文档打开时将其切换为可编辑文档将足以满足我的需求。

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

背景信息: 我还遇到了关闭文档默认打开的“读取模式”的问题。我已发布此问题并回答here

+1

您需要打开文件“只读”和“另存为”一个可编辑的文档。使用'Kill'​​命令删除原始文件。 – Variatus

+0

@Variatus,请您详细说明我需要执行另存为可编辑文档的命令吗?这里是我曾尝试过的,没有工作(新文档也以只读方式打开): 'Set oWd = Documents.Open(origFile)' 'oWd.SaveAs2 FileName:=newFile, ReadOnlyRecommended:=False' 'oWd.Close' 'Set oWd = Documents.Open(newFile)' user3617389

+0

另外,对不起,我无法弄清楚我的评论linebreaks :(。 – user3617389

回答

0

下面的代码将根据提供给过程的参数,更改已关闭文件的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脚本运行时DLL。通过从VBE窗口中的Tools> References选中Miscrosoft Scripting Runtime框来启用此访问。以下是如何调用该函数的示例。请注意,如果提供的文件不存在,则会导致错误。

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

感谢澄清@Variatus 。 您可以评论所有启用此引用的危险吗?即,当我发布我的工具时,其他引用中没有其他引用的工作时,我已经获得了一些信息,我相信一些运行我的工具的工作站更紧密安全策略也会禁用某些DLL(尽我所知)...因此,实际上,与“基准”2010/2013 MS Office部署相比,实际上可能需要的引用较少... – user3617389

+0

我不是权威人士但是我相信所有的Microsoft DLL都是安全的,其中一些默认情况下是不加载的,以加快加载速度。'Scripting Runtime'有一些对象不包括在内d在其他VBA DLL中,你甚至不会问。这是当你来到自定义DLL,你应该小心。顺便说一句,我认为对脚本运行时的引用是与文档一起保存的,而DLL本身是Office安装的一部分。因此,您不必在每台计算机上启用参考。 – Variatus