Excel 调试用于工作簿密码保护的VBA
我正在尝试使用预定义的唯一密码对一个文件夹中的多个Excel工作簿进行密码保护,这些密码存储在另一个单独存储的不同工作簿中。请注意,为每个工作簿指定的密码是不同的 我已经编写了下面的代码,但出现了运行时错误1004-此扩展名不能与所选文件类型一起使用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
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