如何防止选择/编辑未锁定的单元格? (VBA)

时间:2016-02-04 23:49:44

标签: excel vba excel-vba sorting

我有一个非常具体的问题,我正在寻求帮助回答。我一直在研究几个小时,我觉得我无法找到我想要的东西。以下是我的文档必须遵循的标准的快速概述:

  • 我正在使用Excel 2013
  • 我将使用行进行数据输入(而不是excel对象) 表)。
  • 最上面/第一行将作为我的"列标题"。
  • 此第一行将启用AutoFilter。
  • 文件必须受到保护(必备)!
  • 我将使用VBA代码

现在,我完成本文件的最后一个问题是我必须具备的最后两个标准要点:

  • 第一行/第一行(列标题)必须不可编辑
  • 每列必须能够排序和过滤

现在,在一个完美的世界里,我只会"锁定细胞"对于作为我的列标题的整个第一行,当我保护工作表时,我会确保检查"排序"和"使用AutoFilter"框。

但是,此选项不起作用,因为在尝试对数据进行排序时似乎存在问题。如果我只是过滤数据没有问题,但是当我尝试按升序/降序对列进行排序时,我会收到错误通知我在保护模式下我无法对锁定的单元格进行排序。这是因为当excel使用Sort函数时,它将头部计为正在排序的数据的一部分(我通过我的研究发现了这一点),即使我真的只是希望对它下面的数据进行排序。

我一直在努力集思广益,讨论如何解决这个问题,以及研究不同的方法,我无法得出最终的结论。但是,我已将其缩小到2种可能的解决方案:

  1. 我希望能够将第一行中的单元格保持正式解锁,以允许AutoFilter的排序命令按预期工作,但使其成为"表现为&#34 ;当用户尝试对其进行更改时,单元格已锁定(AKA,使整行不可编辑或无法选择)。
  2. 另一种选择是保持第一行锁定,但不知何故在VBA中有一个事件可以告诉用户何时尝试"排序"该列将暂时取消保护工作表,按照预期的排序命令进行操作,然后再次保护工作表(显然,根据我的研究,没有可以单独触发AutoFilter排序命令的此类事件)
  3. 根据我的研究,这两个解决方案是我能想到的最合理的解决方案,但如果有人有Excel天才并且知道另一种方式我愿意接受建议。

    提前感谢您的帮助/建议,

    特拉沃

1 个答案:

答案 0 :(得分:0)

考虑使用两个标题行。顶行将受到保护,第二行将有助于过滤和排序第3行及以下的数据。