各位网友,大家好。
今天给大家介绍如何用vba批量给excel工作簿设置添加打开密码。
今天的内容主要分为以下三个部分:
一、手动设置添加打开密码
在excel中,如果想要给某个工作簿添加打开密码,可以在“另存为”对话框中的“工具”按钮内的“常规选项”中进行设置,如下图所示:

二、在vba中用工作簿Workbook对象的SaveAs方法设置添加打开密码
在vba中可以直接使用Workbook对象的SaveAs方法在将某个工作簿另存为时,设置添加打开密码。
它的语法如下:
expression.SaveAs (FileName, FileFormat, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup, AccessMode, ConflictResolution, AddToMru, TextCodepage, TextVisualLayout, Local)
其中参数Password表示打开密码。
以下是一个将当前excel工作簿另存为具有打开密码”abc”的vba代码:
Sub QQ1722187970()
Dim oWB As Workbook
Set oWB = Excel.ThisWorkbook
oWB.SaveAs "d:\test.xlsm", xlOpenXMLWorkbookMacroEnabled, "abc"
End Sub
执行上述代码后保存关闭,重新打开excel工作簿会弹出输入打开密码的提示,如下图所示:
三、在vba中用工作簿Workbook对象的Password属性的方式设置添加打开密码
除了可以用Workbook对象的SaveAs方法在将某个工作簿另存为时,设置添加打开密码外,还可以通过直接设置Workbook对象的Password属性值的方式给excel工作簿设置打开密码。
以下是为当前excel工作簿设置打开密码”abc”的vba代码:
Sub QQ1722187970()
Dim oWB As Workbook
Set oWB = Excel.ThisWorkbook
oWB.Password = "abc"
End Sub
用这种方法设置打开密码,不仅可以为尚未设置打开密码的excel工作簿添加打开密码,还可以修改已经有打开密码的excel工作簿的密码为其它密码。
四、批量给同一文件夹下的所有Excel工作簿添加打开密码
如果要批量给同一文件夹下的所有Excel工作簿添加打开密码,可以使用如下的代码:
Sub QQ1722187970()
Excel.Application.Calculation = xlCalculationManual
Excel.Application.DisplayAlerts = False
Dim oWB As Workbook
Dim sPath As String
sPath = GetPath
Dim sResult As String
'查找第一个文件,第一次使用dir函数
sResult = Dir(sPath & "\*.xls*")
If Len(sResult) Then
Set oWB = Excel.Workbooks.Open(sPath & "\" & sResult)
oWB.SaveAs sPath & "\" & sResult, , "test"
oWB.Close
Debug.Print sResult
Do
'重复使用dir函数,此时不用输入任何参数
sResult = Dir
Debug.Print sResult
If Len(sResult) Then
Set oWB = Excel.Workbooks.Open(sPath & "\" & sResult)
oWB.SaveAs sPath & "\" & sResult, , "test"
oWB.Close
End If
'直到返回的字符串为空字符串,表示遍历结束
Loop Until Len(sResult) = 0
End If
Excel.Application.DisplayAlerts = True
Excel.Application.Calculation = xlCalculationAutomatic
End Sub
Function GetPath() As String
'声明一个FileDialog对象变量
Dim oFD As FileDialog
' '创建一个选择文件对话框
' Set oFD = Application.FileDialog(msoFileDialogFilePicker)
'创建一个选择文件夹对话框
Set oFD = Application.FileDialog(msoFileDialogFolderPicker)
'声明一个变量用来存储选择的文件名或者文件夹名称
Dim vrtSelectedItem As Variant
With oFD
'允许选择多个文件
.AllowMultiSelect = True
'使用Show方法显示对话框,如果单击了确定按钮则返回-1。
If .Show = -1 Then
'遍历所有选择的文件
For Each vrtSelectedItem In .SelectedItems
'获取所有选择的文件的完整路径,用于各种操作
GetPath = vrtSelectedItem
Next
'如果单击了取消按钮则返回0
Else
End If
End With
'释放对象变量
Set oFD = Nothing
End Function


