如何批量取消word密碼?VBA簡單程式設計解決

weixin_34208283發表於2016-08-21

前些日子碰到一個問題,接手到一批資料。全部都是加密了的word文件,還好密碼是統一的。這些資料是要上傳到平臺上共享的,總不能說還要備註說密碼是多少,而且和平臺上其他不加密的檔案放在一起,有的是加密的,有的又是不加密的,多影響使用者體驗,你說是不是。

難道我們要一個一個開啟,然後選項-文件保護-取消密碼...?答案當然是NO。寫這一篇文章主要是因為網上並沒有很完善的解決方案,或者是方案過於久遠,對於目前的系統和軟體版本來說已經不適用。可能用到的場景不多,但是萬一遇到了呢?所以還是寫出來作為一個分享,以後我也會在這個專題裡寫一些有趣的工作小技巧,專治各種疑難雜症。開個玩笑,教程開始。

首先了解一下什麼是VBA。Visual Basic for Applications(VBA)是Visual Basic的一種巨集語言,是微軟開發出來在其桌面應用程式中執行通用的自動化(OLE)任務的程式語言。簡單的說,就是利用VBA,可以爆發出你office軟體的洪荒之力。你想不到word也能幫你批量去完成一系列的任務是吧?

一、如何啟動VBA

首先,啟動你的word

1333323-f6610ae88f5f3928.png
word2013啟動畫面

啟動完成後如果你和我一樣是2013版的會是這樣

1333323-86ab5d5275da3432.png
word2013首頁

嘿嘿,不小心看到了我的最近文件了是吧。最近在打算也做一套自己的編曲教程,如果有喜歡音樂的朋友可以關注。
好了,點選一下空白文件,進入熟悉的介面

1333323-d5d7dc6e1bb64ec4.png
熟悉的介面

這時候重點來了,按鍵盤的

ALT+F11

就可以進入VBA程式設計介面了

1333323-ed3cc651743e411b.png
VBA程式設計介面

如果對於VBA程式設計感興趣的話,我考慮要不要寫一套VBA入門系列,但是在這裡的話,我就直接提供了我的程式碼。各位無需知道具體的實現原理(其實原理也很簡單),複製我的程式碼,點選插入-模組,貼上即可。

1333323-7cf3ebc69e464c5a.png
插入模組
1333323-62168dcf8ebc16d7.png
貼上

其中有需要改動的引數如下

路徑:

把引號“C:\Users\斷夢霜丶躚塵\Desktop\新建資料夾”裡面的內容替換成你存放word文件的路徑(支援子目錄)

1333323-f5f33b2936eb45f0.png
子目錄

密碼

把 Const strPassword = "2009" 中引號2009改為這批word文件的密碼。

1333323-72f165d6ab2a474a.png
輸入密碼

最後一步

在程式碼視窗的右上角選中

UnProtectAllDocFiles

1333323-32737d18e215f80c.png
選中

這時候可以按鍵盤上的F5執行直到提示完成即可。是不是很方便呢?

注意

如果程式出現了未知的問題,按ctrl+pause break強行停止執行即可。

程式碼如下

Option Explicit

Sub UnProtectAllDocFiles()
On Error Resume Next
Const strRootPath = "C:\Users\斷夢霜丶躚塵\Desktop\新建資料夾"               ' 存放所有檔案的目錄,可以有子目錄
Dim fso, oFolder
Set fso = CreateObject("Scripting.FileSystemObject")
Set oFolder = fso.GetFolder(strRootPath)
UnProtectDocFilesUnderFolder oFolder
MsgBox "成功"
End Sub
Sub UnProtectDocFilesUnderFolder(oFolder)
On Error Resume Next
Dim oSubFolder, oFile
Dim oDoc As Document
Const strPassword = "2009"     ' 這裡輸入word密碼
For Each oSubFolder In oFolder.SubFolders
UnProtectDocFilesUnderFolder oSubFolder
For Each oFile In oSubFolder.Files
If InStr(oFile.Name, "doc") <> 0 Then
Set oDoc = Documents.Open(FileName:=oFile.Path, Visible:=False, PasswordDocument:=strPassword)
        With oDoc
            .ReadOnlyRecommended = False    '請勿省略
            .Password = ""
            .Close True   '關閉文件
        End With
    End If
Dim t
    t = DateAdd("s", 0.5, Now)
    Do Until Now > t
    DoEvents
    Loop
    Next
  Next
  
End Sub

相關文章