Excel vba:限制Excel工作表中的编辑区域

时间:2010-12-16 05:22:03

标签: vba excel-vba excel-2003 excel

我想限制用户在Excel表格中编辑范围。

Scenario:

  | A | B | C | D | E | F | G | H | I | J | ... IV
-------------------------------------------
1 |   |   |   |   |   |   |   |   |   |   |
-------------------------------------------
2 |   |   |   |   |   |   |   |   |   |   |
-------------------------------------------
3 |   |   |   |   |   |   |   |   |   |   |
-------------------------------------------
4 |   |   |   |   |   |   |   |   |   |   |
-------------------------------------------
...
65536

在上面的电子表格中,用户应该有权将Column A范围编辑为Column HColumn I to IV用户不应允许编辑任何文字或任何内容。对行数没有限制。

谢谢:)

5 个答案:

答案 0 :(得分:2)

分三步

1)选择整张纸。格式化 - >锁定单元格 - >删除所有单元格的锁定。 (默认情况下,所有单元格最初都“锁定”)

2)选择所需的锁定列。格式化 - >锁定单元格 - >应用锁定(这是声明性的,你没有锁定任何东西,只是声明你将在下一步中锁定什么)

3)格式 - >保护工作表。 (这触发真正的保护)

你已经完成了。

HTH

答案 1 :(得分:2)

要以编程方式执行此操作,请在模块中尝试此操作(并根据您的需要进行调整):

Sub ProtectAToH()
Dim ws as Worksheet
For each ws In ActiveWorkbook.Worksheets
  ws.Columns("A:H").Locked = False
  ws.Protect Contents:=True, Password:="myPassword"
Next ws
End Sub

答案 2 :(得分:0)

sasfrog和belisarius提案的一些替代方案(仅为了丰富您的选择):

a)您也可以隐藏K:IV列,并保护工作表以防止取消隐藏 b)使用工具,保护,“允许用户编辑范围”选项,为属于Everyone组的用户定义范围$ a:$ h为可编辑而无密码,然后保护工作表。我喜欢那个。

不要忘记任何涉及Excel内置保护的解决方案都会阻止用户插入/删除行。

c)使用VBA(不会阻止删除/插入行):

Private Sub Worksheet_Change(ByVal Target As Range)
  If Not (Intersect(Target, Range("$h:$iv")) Is Nothing) Then
    Target.Value = ""  'or something else'
  End If
End Sub

答案 3 :(得分:0)

ActiveSheet.ScrollArea = "$A:$H"

将限制用户可以选择的单元格。

答案 4 :(得分:0)

iDevlop的选项c)应该被修改以防止无限循环:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Not Intersect(Target, Target.Worksheet.Range("A1:G25")) Is Nothing Then
        If Not Target.Cells.Count > 1 Then                  'Prevent Error on Row Insert or Delete
            If Not Target.Value = "" Then Target.Value = "" 'Prevent infinite loop
        End If
    End If
End Sub

这仍然允许用户将多单元格复制粘贴到指定的Intersect范围内。没想出那一个。