在MSExcel中创build一个特定的单元格只读

我需要转换一个单元格只读,如果某些条件适用。

例:

如果在单元格L中有一个选项列表(例如Android或Java),并且用户select其中一个选项(例如android),那么单元格M应该是只读的。

如果用户select其他选项(例如Java),那么单元M不应该是只读的,因为M还包含与所选用户选项(例如Javatypes)相关的选项列表。

这是为细胞L1M1

在工作表代码区域中input以下事件macros:

Private Sub Worksheet_Change(ByVal Target As Range) Dim L As Range, M As Range Set L = Range("L1") Set M = Range("M1") If Intersect(Target, L) Is Nothing Then Exit Sub ActiveSheet.Unprotect M.Locked = False If L.Value = "Android" Then M.Locked = True End If ActiveSheet.Protect End Sub 

因为它是工作表代码,所以安装和自动使用非常简单:

  1. 右键单击Excel窗口底部附近的选项卡名称
  2. select查看代码 – 这会popup一个VBE窗口
  3. 粘贴东西,closuresVBE窗口

如果您有任何疑问,请先在试用工作表上尝试。

如果您保存该工作簿,该macros将与它一起保存。 如果您在2003年以后使用的是Excel版本,则必须将该文件另存为.xlsm而不是.xlsx

要删除macros:

  1. 调出上面的VBE窗口
  2. 清除代码
  3. closuresVBE窗口

要了解有关macros的更多信息,请参阅:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

要了解有关事件macros(工作表代码)的更多信息,请参阅:

http://www.mvps.org/dmcritchie/excel/event.htm

macros必须启用这个工作!

EDIT1:

在工作表中:

在这里输入图像描述

然后在VBA窗口中:

在这里输入图像说明

编辑#2:

这是一个将处理一个单元块的版本:

 Private Sub Worksheet_Change(ByVal Target As Range) Dim L As Range, M As Range Set L = Range("L1:L10") Set M = Range("M1") If Intersect(Target, L) Is Nothing Then Exit Sub ActiveSheet.Unprotect For p = 1 To 10 Range("M" & p).Locked = False If Range("L" & p).Value = "Android" Then Range("M" & p).Locked = True End If Next p ActiveSheet.Protect End Sub