Excel VBA:如何只允许macros进行单元格input
我目前正在做一个工作表,它应该使用不同的用户表单来执行任务和计算。 用户表单通过button调用。
所以用户的所有input都应该通过这些用户表单来完成; 实际的工作表应该只包含应该是只读的结果(对于用户)。
问题:
- 保护工作表也将阻止macros进行更改。
-
以下代码与保护工作表的问题相同。
Private Sub Worksheet_Change(ByVal Target As Range) If Not IsEmpty(Target) Then Target.Clear MsgBox "SomeAlertMSG" End If End Sub
任何build议如何做到这一点,而不使用自制的布尔标志?
您在这里查找的是UserInterfaceOnly:=True
标志,用于保护VBA中的表单。
通过以下行保护VBA中的工作表:
ActiveWorkbook.Sheets("YourSheet").Protect Password:="123", UserInterfaceOnly:=True
这将保护工作表,并防止用户手动进行编辑,但任何macros仍然可以更改工作表! 显然你可以select不同的密码,或者把它作为一个input,所以它不会在你的代码中被显示。
文档: https : //msdn.microsoft.com/en-us/library/office/ff840611.aspx
UserInterfaceOnly – True保护用户界面,但不保留macros。 如果省略此参数,则保护适用于macros和用户界面。
调用另一个子写入范围,并处理事件如下:
Sub WriteToCell(ByVal cell As Excel.Range, ByVal cellValue) Application.EnableEvents = False cell.Value = cellValue Application.EnableEvents = True End Sub
然后在你的用户表单中,当你想写一些东西到一个范围只写:
WriteToCell Sheets("someSheet").Range("A1"), "I can stay here!"
您可以通过使用代码中的下面的代码来保护您的工作表不受macros保护。
Sheet1.Protect Password:="Secret"
代码执行后,表单将再次被locking。