Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 调试用于工作簿密码保护的VBA_Excel_Vba - Fatal编程技术网

Excel 调试用于工作簿密码保护的VBA

Excel 调试用于工作簿密码保护的VBA,excel,vba,Excel,Vba,我正在尝试使用预定义的唯一密码对一个文件夹中的多个Excel工作簿进行密码保护,这些密码存储在另一个单独存储的不同工作簿中。请注意,为每个工作簿指定的密码是不同的 我已经编写了下面的代码,但出现了运行时错误1004-此扩展名不能与所选文件类型一起使用 Public Sub Protect_with_PWs() Dim FSO As Object Dim folder As Object, subfolder As Object Dim wb As Object Dim i As

我正在尝试使用预定义的唯一密码对一个文件夹中的多个Excel工作簿进行密码保护,这些密码存储在另一个单独存储的不同工作簿中。请注意,为每个工作簿指定的密码是不同的

我已经编写了下面的代码,但出现了运行时错误1004-此扩展名不能与所选文件类型一起使用

Public Sub Protect_with_PWs()

  Dim FSO As Object
  Dim folder As Object, subfolder As Object
  Dim wb As Object
  Dim i As Long, wbcontrol As Workbook, ws As Worksheet

  Set wbcontrol = ThisWorkbook
  Set ws = wbcontrol.ActiveSheet

  Set FSO = CreateObject("Scripting.FileSystemObject")
  folderPath = "C:\Users\sabrina\Documents\VBA-PW\VBA_Password protection"
  Set folder = FSO.GetFolder(folderPath)

  With Application
    .DisplayAlerts = False
    .ScreenUpdating = False
    .EnableEvents = False
    .AskToUpdateLinks = False

  End With

  For Each wb In folder.Files
    If Right(wb.Name, 3) = "xls" Or Right(wb.Name, 4) = "xlsx" Or Right(wb.Name, 4) = "xlsm" Then
      Set masterWB = Workbooks.Open(wb)
      i = 1
      While ws.Cells(i, 1) <> ""
        ActiveWorkbook.SaveAs ws.Cells(i, 1), Password:=ws.Cells(i, 2)
        ActiveWorkbook.Close
        i = i + 1
      Wend
      ActiveWorkbook.Close True

    End If

  Next

  With Application
    .DisplayAlerts = True
    .ScreenUpdating = True
    .EnableEvents = True
    .AskToUpdateLinks = True
  End With

End Sub
Public Sub Protect_with_PWs()
作为对象的Dim FSO
将文件夹变暗为对象,将子文件夹变暗为对象
作为对象的Dim wb
Dim i与工作簿一样长,wbcontrol与工作簿一样长,ws与工作表一样长
设置wbcontrol=ThisWorkbook
设置ws=wbcontrol.ActiveSheet
设置FSO=CreateObject(“Scripting.FileSystemObject”)
folderPath=“C:\Users\sabrina\Documents\VBA-PW\VBA\U密码保护”
Set folder=FSO.GetFolder(folderPath)
应用
.DisplayAlerts=False
.ScreenUpdate=False
.EnableEvents=False
.AskToUpdateLinks=False
以
对于文件夹.Files中的每个wb
如果Right(wb.Name,3)=“xls”或Right(wb.Name,4)=“xlsx”或Right(wb.Name,4)=“xlsm”,则
设置masterWB=工作簿。打开(wb)
i=1
而ws.Cells(i,1)”
ActiveWorkbook.SaveAs ws.Cells(i,1),密码:=ws.Cells(i,2)
活动工作簿。关闭
i=i+1
温德
ActiveWorkbook.Close为真
如果结束
下一个
应用
.DisplayAlerts=True
.ScreenUpdate=True
.EnableEvents=True
.AskToUpdateLinks=True
以
端接头

该错误与此行“ActiveWorkbook.SaveAs ws.Cells(i,1),密码:=ws.Cells(i,2)”特别相关。有人知道为什么会出现错误以及如何修复它吗?这里提到的单元格包含扩展名为.xlsx的文件名。非常感谢您的帮助。

您是否尝试过ActiveWorkbook.SaveAs ws.Cells(i,1),密码:=“Password”和字符串,是否有效?我知道这不是一个解决方案,但它会让我们知道问题所在。感谢您的回复!是的,我试过了。它给了我相同的错误消息…我相信您需要检查扩展名并使用相应的文件格式参数:
xlOpenXMLWorkbook
xlOpenXMLWorkbook
xlWorkbookNormal
,这取决于现有的扩展名而不是对您的问题的回答,但是,如果您不想轻易绕过密码,建议将其另存为.xlsb。不确定您想在这里实现什么。您正在关闭工作簿
active工作簿。是否在循环中关闭
,然后再次使用它?我建议使用对象,因为您声明了它们。例如
masterWB.SaveAs…
避免使用
Activeworkbook