如何用Excel VBA批量打开、保护、保存并关闭文件夹内多个xlsx文件
Excel VBA 批量保护同文件夹下xlsx文件工作表实现方案
功能特性
- 支持手动选择目标文件夹,无需硬编码修改路径
- 扫描完成后先弹出对话框显示匹配到的
.xlsx文件总数,确认后再执行批量操作 - 自动跳过已在Excel中打开的文件,避免冲突报错
- 保留原有工作表保护配置,可自行修改保护参数
Sub BatchProtectWorksheets() Dim targetFolder As String Dim fileName As String Dim wb As Workbook Dim fileCount As Long Dim i As Long ' 弹出文件夹选择对话框 With Application.FileDialog(msoFileDialogFolderPicker) .Title = "请选择存放.xlsx文件的目标文件夹" If .Show <> -1 Then Exit Sub ' 用户点击取消直接退出程序 targetFolder = .SelectedItems(1) & "\" End With ' 统计文件夹下所有.xlsx文件总数 fileName = Dir(targetFolder & "*.xlsx") Do While fileName <> "" fileCount = fileCount + 1 fileName = Dir Loop ' 总数提示与确认 If fileCount = 0 Then MsgBox "目标文件夹下未找到任何.xlsx文件,程序退出。", vbExclamation Exit Sub End If If MsgBox("共查找到 " & fileCount & " 个.xlsx文件,是否确认开始执行工作表保护操作?", vbYesNo + vbQuestion) = vbNo Then Exit Sub End If ' 关闭屏幕更新和提示提升运行效率 Application.ScreenUpdating = False Application.DisplayAlerts = False ' 遍历文件执行保护操作 fileName = Dir(targetFolder & "*.xlsx") i = 1 Do While fileName <> "" ' 跳过已打开的文件 On Error Resume Next Set wb = Workbooks(fileName) On Error GoTo 0 If wb Is Nothing Then Set wb = Workbooks.Open(targetFolder & fileName) End If ' 工作表保护规则和原参考代码一致,可按需修改参数 wb.ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFormattingCells:=True wb.Save wb.Close SaveChanges:=False Set wb = Nothing ' 显示处理进度,不需要可删除本行 Application.StatusBar = "处理进度:" & i & "/" & fileCount i = i + 1 fileName = Dir Loop ' 恢复Excel默认设置 Application.ScreenUpdating = True Application.DisplayAlerts = True Application.StatusBar = "" MsgBox "批量操作完成,共处理 " & fileCount & " 个文件。", vbInformation End Sub
使用步骤
- 打开Excel按下
Alt+F11进入VBA编辑器,右键点击当前工作簿→插入→模块,把上述代码粘贴到模块窗口中 - 按下
F5运行代码,按照弹窗提示选择目标文件夹即可 - 如果需要调整工作表保护权限,直接修改
wb.ActiveSheet.Protect后的参数即可
内容的提问来源于stack exchange,提问作者ttootell
相关产品推荐
相关产品推荐

