我是使用Excel在某些领域都允许用户输入和其他细胞都得到保护。我已经使用的工具保护片,但是这样做之后,我不能改变价值观在VBA脚本。我需要限制片停止用户输入,同时允许载>>>情绪改变该单元价值的基础上某些计算。

有帮助吗?

解决方案

尝试使用

Worksheet.Protect "Password", UserInterfaceOnly := True

如果UserInterfaceOnly参数设置为true,则VBA代码可以修改受保护的单元格。

其他提示

你可以修改一片通过代码通过采取这些行动

  • 取消保护
  • 修改
  • 保护

在代码这将是:

Sub UnProtect_Modify_Protect()

  ThisWorkbook.Worksheets("Sheet1").Unprotect Password:="Password"
'Unprotect

  ThisWorkbook.ActiveSheet.Range("A1").FormulaR1C1 = "Changed"
'Modify

  ThisWorkbook.Worksheets("Sheet1").Protect Password:="Password"
'Protect

End Sub

弱点 这种方法是,如果代码被中断和错误的处理没有捕捉到它的工作表可以处于一种不受保护的状态。

代码可以 改进 通过采取这些行动

  • 重新保护
  • 修改

代码这样做将是:

Sub Re-Protect_Modify()

ThisWorkbook.Worksheets("Sheet1").Protect Password:="Password", _
 UserInterfaceOnly:=True
'Protect, even if already protected

  ThisWorkbook.ActiveSheet.Range("A1").FormulaR1C1 = "Changed"
'Modify

End Sub

这个代码更新的保护工作表上,而是与'UserInterfaceOnly'设定为真实的。这允许载>>>情绪修改的工作表,同时保持工作表保护用户输入可通过用户界面,即使执行被中断。

这一定是 失去了 工作簿时关闭和重新开放。工作表的保护仍然是保持。

所以'Re-保护'的代码需要被包括在启动任何程序,试图修改的工作表或可以只是运行一次工作簿时打开。

我认为您不能将表单的任何部分设置为仅可由VBA 进行编辑,但您可以执行具有基本相同效果的操作 - 您可以在VBA中取消保护工作表在您需要进行更改之前:

wksht.Unprotect()

并在完成后重新保护它:

wksht.Protect()

编辑:看起来这种解决方法可能已经解决了Dheer的直接问题,但是对于后来遇到这个问题/答案的人来说,我错误地回答了我的答案的第一部分,正如Joe在下面指出的那样。您可以保护工作表仅通过VBA进行编辑,但它显示为“UserInterfaceOnly”。选项只能在调用“Worksheet.Protect”时设置。在代码中。

基本但简单易懂的答案:

Sub Example()
    ActiveSheet.Unprotect
    Program logic...
    ActiveSheet.Protect
End Sub

作为一种变通方法,您可以创建一个隐藏工作表,它将保存更改后的值。可见受保护工作表上的单元格应使用简单公式显示隐藏工作表中的值。

您将能够通过隐藏的工作表更改显示的值,而您的用户将无法对其进行编辑。

我在sheet1中选择了我想要锁定的单元格,并将建议的代码放在open_workbook()函数中,并像魅力一样工作。

ThisWorkbook.Worksheets("Sheet1").Protect Password:="Password", _
UserInterfaceOnly:=True
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top