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

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

難道我們要一個一個打開,然后選項-文檔保護(hù)-取消密碼...?答案當(dāng)然是NO。寫這一篇文章主要是因為網(wǎng)上并沒有很完善的解決方案,或者是方案過于久遠(yuǎn),對于目前的系統(tǒng)和軟件版本來說已經(jīng)不適用??赡苡玫降膱鼍安欢啵侨f一遇到了呢?所以還是寫出來作為一個分享,以后我也會在這個專題里寫一些有趣的工作小技巧,專治各種疑難雜癥。開個玩笑,教程開始。

首先了解一下什么是VBA。Visual Basic for Applications(VBA)是Visual Basic的一種宏語言,是微軟開發(fā)出來在其桌面應(yīng)用程序中執(zhí)行通用的自動化(OLE)任務(wù)的編程語言。簡單的說,就是利用VBA,可以爆發(fā)出你office軟件的洪荒之力。你想不到word也能幫你批量去完成一系列的任務(wù)是吧?

一、如何啟動VBA

首先,啟動你的word

word2013啟動畫面

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

word2013首頁

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

熟悉的界面

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

ALT+F11

就可以進(jìn)入VBA編程界面了

VBA編程界面

如果對于VBA編程感興趣的話,我考慮要不要寫一套VBA入門系列,但是在這里的話,我就直接提供了我的代碼。各位無需知道具體的實現(xiàn)原理(其實原理也很簡單),復(fù)制我的代碼,點擊插入-模塊,粘貼即可。

插入模塊
粘貼

其中有需要改動的參數(shù)如下

路徑:

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

子目錄

密碼

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

輸入密碼

最后一步

在代碼窗口的右上角選中

UnProtectAllDocFiles

選中

這時候可以按鍵盤上的F5運(yùn)行直到提示完成即可。是不是很方便呢?

注意

如果程序出現(xiàn)了未知的問題,按ctrl+pause break強(qiáng)行停止運(yùn)行即可。

代碼如下

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   '關(guān)閉文檔
        End With
    End If
Dim t
    t = DateAdd("s", 0.5, Now)
    Do Until Now > t
    DoEvents
    Loop
    Next
  Next
  
End Sub
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 1.1 VBA是什么 直到90年代早期,使應(yīng)用程序自動化還是充滿挑戰(zhàn)性的領(lǐng)域.對每個需要自動化的應(yīng)用程序,人們不得...
    浮浮塵塵閱讀 21,825評論 6 49
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,837評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,813評論 25 708
  • 我有時候會喪得無可救藥。工作不想做,因為我知道毫無疑義,我也知道應(yīng)該離開一個賬目如同虛構(gòu)小說般的地方。社交不想維持...
    少女S閱讀 315評論 0 0
  • 哈雷彗星 借用哈雷 從天空劃過 本,高不可及 怎奈沖我墜來 只覺得霎時熱浪逼近 壓力陡增,從我身上掠過, 蹭壞了我...
    旱陽閱讀 331評論 0 0