【问题标题】:Excel VBA Macro to Open, Protect, Save and Close Multiple Files in a FolderExcel VBA 宏用于打开、保护、保存和关闭文件夹中的多个文件
【发布时间】:2021-10-29 03:32:46
【问题描述】:

那里。

我需要运行一个 Excel VBA 宏,它将在单个文件夹中打开 50 个 .xlsx 文件,我想一个一个地打开,保护工作表,保存并关闭。

我希望有一个对话框告诉我找到了多少文件,以首先确认文件夹中的文件数量。

这是建议我打开、保护、保存和关闭单个文件的代码(不过,我再次希望对 50 个左右的多个文件执行此操作)。

Sub Macro1()
'
' Macro1 Macro
'

'
    ChDir "G:\Folder\Subfolder\Projects"
    Workbooks.Open Filename:= _
        "G:\Folder\Subfolder\Projects\Filename.xlsx"
            ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowFormattingCells:=True
    ActiveWorkbook.Save
    ActiveWindow.Close
End Sub

这可以修改,还是我需要新代码?有人可以帮我吗?

谢谢!

【问题讨论】:

  • 你从哪里得到这个大约 50 个文件的列表?您当然可以将宏代码包装在一个循环中,依次打开和关闭每个文件,但具体取决于您如何识别正确的一组。 Xlsx 文件。 ChDir 也是不必要的,最后一条语句应该是 ActiveWorkbook,而不是 ActiveWindow。

标签: excel vba


【解决方案1】:

这应该可以解决问题。

Sub protect_excel_files_sheets_in_folder()

Dim wb As Workbook
Dim sheet As Worksheet
Dim file_path As String, work_file As String, file_types As String
Dim work_folder As String

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

With Application.FileDialog(msoFileDialogFolderPicker)
    .AllowMultiSelect = False
    .ButtonName = "Select"
    .Show

    If .SelectedItems.Count <> 1 Then
        GoTo CleanExit
    End If

    work_folder = .SelectedItems(1) & "\"
End With

file_types = "*.xls*"

work_file = Dir(work_folder & file_types)

Do While work_file <> ""
    Set wb = Workbooks.Open(Filename:=work_folder & work_file)
        For Each sheet In wb.Sheets
            sheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFormattingCells:=True
        Next
        Sheets(0).Activate
    wb.Close SaveChanges:=True
    work_file = Dir
Loop
CleanExit:
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

End Sub

我碰巧有类似的东西,密码保护和取消保护我的库中的所有文件和工作表。我取出了密码部分,它应该对你有用。

【讨论】:

  • 嗨,哈利。你很快就会成为我今天的英雄。调试时出现错误。 Do While work_file "" Set wb = Workbooks.Open(Filename:=work_folder & work_file) HERE>>> For Each sheet In wb.Sheets sheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFormattingCells:=True Next Sheets(0).Activate wb.Close SaveChanges:=True work_file = Dir Loop
  • 你遇到了什么错误?我认为在“sheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFormattingCells:=True”行上粘贴代码时可能弄乱了 CR。我已经修复了代码。
  • @HarryLee 我建议将Exit Sub 行更改为GoTo CleanExit,这样您就可以避免将Excel 留在Application.ScreenUpdating = False 状态引起的任何问题
  • @Glenn G 你是对的!我错过了那个。
猜你喜欢
  • 2019-08-13
  • 2020-06-03
  • 2021-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多