防止用户手动编辑单元格范围(但允许 VBA 这样做)
Prevent User to edit range of cells manual (but allowing VBA to do)
我想阻止用户编辑特定范围的单元格。但是 VBA 应该保留这样做的能力。因此,当按下 Excel 中的按钮时,VBA 应该能够修改 Cell 的值,而用户不能手动执行此操作。
刚刚在另一个主题中找到了一个非常符合我要求的解决方案: How to protect cells in Excel but allow these to be modified by VBA script
唯一我还在质疑的是这是否也适用于某个范围而不是整个工作簿?
用VBA保护sheet:
Dim sh As Worksheet
Dim myPassword As String
myPassword = "password"
For Each sh In ActiveWorkbook.Worksheets
sh.Protect Password:=myPassword
Next sh
现在,如果您想使用 VBA 修改某些内容,您可以使用以下方法取消保护:
Dim sh As Worksheet
Dim myPassword As String
myPassword = "password"
For Each sh In ActiveWorkbook.Worksheets
sh.Unprotect Password:=myPassword
Next sh
之后再保护他们。
解决方案
Worksheet.Protect“密码”,UserInterfaceOnly := True
应用于特定范围(我猜下面的代码应该可以工作...?):
Worksheet.Sheets("ControlSheet").Range("M5:N19").Protect "Password", UserInterfaceOnly :=True
我想阻止用户编辑特定范围的单元格。但是 VBA 应该保留这样做的能力。因此,当按下 Excel 中的按钮时,VBA 应该能够修改 Cell 的值,而用户不能手动执行此操作。
刚刚在另一个主题中找到了一个非常符合我要求的解决方案: How to protect cells in Excel but allow these to be modified by VBA script
唯一我还在质疑的是这是否也适用于某个范围而不是整个工作簿?
用VBA保护sheet:
Dim sh As Worksheet
Dim myPassword As String
myPassword = "password"
For Each sh In ActiveWorkbook.Worksheets
sh.Protect Password:=myPassword
Next sh
现在,如果您想使用 VBA 修改某些内容,您可以使用以下方法取消保护:
Dim sh As Worksheet
Dim myPassword As String
myPassword = "password"
For Each sh In ActiveWorkbook.Worksheets
sh.Unprotect Password:=myPassword
Next sh
之后再保护他们。
解决方案
Worksheet.Protect“密码”,UserInterfaceOnly := True
应用于特定范围(我猜下面的代码应该可以工作...?):
Worksheet.Sheets("ControlSheet").Range("M5:N19").Protect "Password", UserInterfaceOnly :=True