2017-11-17 441 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