我的VBA加载项将一些工作表复制到新工作簿中。虽然我的加载项是按密码生成的,但新工作簿在生成时不受密码保护。因此用户可以读取其中的代码。
我正在尝试使用受保护的属性来隐藏代码,但它看起来没有用。
生成新工作簿的代码:
Sub CreateNewWorkbook()
On Error GoTo LabelErro
Application.ScreenUpdating = False
Set NewWorkBook = Workbooks.Add
Dim currentSheet As Worksheet
Dim sheetIndex As Integer
sheetIndex = 1
With ThisWorkbook
.IsAddin = False
.Sheets("Ajuda").Copy Before:=NewWorkBook.Sheets(sheetIndex)
.Sheets("Fronteira").Copy Before:=NewWorkBook.Sheets(sheetIndex)
.Sheets("Correl").Copy Before:=NewWorkBook.Sheets(sheetIndex)
.Sheets("Atributos").Visible = True
.Sheets("Atributos").Copy Before:=NewWorkBook.Sheets(sheetIndex)
.Sheets("Atributos").Visible = xlVeryHidden
.Sheets("Pesos").Copy Before:=NewWorkBook.Sheets(sheetIndex)
.Sheets("Calculos").Copy Before:=NewWorkBook.Sheets(sheetIndex)
.Sheets("Hidden").Visible = True
.Sheets("Hidden").Copy Before:=NewWorkBook.Sheets(sheetIndex)
.Sheets("Hidden").Visible = xlVeryHidden
.IsAddin = True
End With
With NewWorkBook
.Sheets("Hidden").Visible = xlVeryHidden
.Sheets("Calculos").Visible = xlVeryHidden
.Sheets("Pesos").Range("C1").Formula = "=INDIRECT(""D"" & Hidden!B1+Hidden!B4+1)"
.Sheets("Pesos").Range("C2").Formula = "=INDIRECT(""E"" & Hidden!B1+Hidden!B4+1)"
.Protect Password:="teste", Structure:=True, Windows:=True
End With
Exit Sub
LabelErro:
ThisWorkbook.IsAddin = True
End Sub
答案 0 :(得分:1)
正如roryap所说,一个简单的Google" Excel VBA设置工作簿密码"返回了很多结果。这是我看过的第一个。
ActiveWorkbook.Protect Password:="test", Structure:=True, Windows:=True
expression.Protect(密码,结构,Windows) 表达式必需。一个返回Workbook对象的表达式。
密码可选变体。一个字符串,它指定工作表或工作簿的区分大小写的密码。如果省略此参数,则可以在不使用密码的情况下取消保护工作表或工作簿。否则,您必须指定密码以取消保护工作表或工作簿。如果忘记密码,则无法取消保护工作表或工作簿。最好将密码及其相应文档名称列表保存在安全的地方。
结构可选变体。为了保护工作簿的结构(表单的相对位置),则为True。默认值为False。
Windows可选Variant。是的,以保护工作簿窗口。如果省略此参数,则窗口不受保护。