Excel - 复杂验证的策略

标签 excel vba

我似乎陷入了困境。我有一个 EXCEL 2003 模板,用户应该使用它来填写表格信息。我对各种单元格进行了验证,并且每一行都会根据更改和选择更改事件进行相当复杂的 VBA 验证。该工作表受到保护,禁止进行格式化事件、插入和删除行和列等。

只要用户逐行填写表格,一切就都很好。如果我想允许用户将数据复制/粘贴到该工作表中(在本例中这是合法的用户需求),事情会变得更糟,因为单元格验证将不允许粘贴操作。

因此,我尝试允许用户关闭保护和剪切/粘贴,VBA 标记该工作表以表明它包含未经验证的条目。我创建了一个“批量验证”,可以一次验证所有非空行。仍然复制/粘贴效果不太好(必须直接从源工作表跳转到目标,无法从文本文件粘贴等)

从插入行的角度来看,单元格验证也不好,因为根据插入行的位置,单元格验证可能会完全丢失。如果我将单元格验证复制到第 65k 行,则空工作表的大小将超过 2M——这是另一个最不希望出现的副作用。

所以我认为避免麻烦的一种方法是完全忘记单元格验证并仅使用 VBA。然后,我会牺牲用户在某些列中提供下拉列表的舒适度 - 其中一些列表也会根据其他列中的条目而变化。

以前有没有人遇到过同样的情况,可以给我一些(通用)战术建议(VBA 编码不是问题)?

亲切的问候 迈克D

最佳答案

我相信捕获“粘贴”事件是可能的。我不记得语法,但它会给您一个要复制的“单元格数组”,以及要复制单元格的左上角单元格。

如果您在 VBA 中修改单元格的值,则根本不需要停用验证 - 所以我要做的是(抱歉,伪代码,我的 VBA 有点生疏)

OnPaste(cells, x, y)
  for each cell in cells do
    obtain the destinationCell (using the coordinates of cell on Cells, plus x and y)
    check if the value in cell is "valid" with destinationCell's validations
    if not valid, alert a message
    if valid, destinationCell.value = cell.value
  end
end

关于Excel - 复杂验证的策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2265524/

相关文章:

excel - 在 VBA 中循环合并单元格

vba - 如何将小数转换为分数?

vba - Excel/VBA - 如何在字符串中每 N 个字符插入一个字符

java - 从 Java 代码调用 VB 宏

SQL 开发人员导入数据向导显示为空白

excel - 如何在一张表中获得两个 Wocksheet_Changes 以在下拉列表中进行多项选择

excel - 将模块注入(inject)excel并运行

asp.net - 作为 ASP.Net 报告生成器替代 Excel

excel - xmlhttprequest 导致的 Unicode 字符

c# - 我想在通过 C# 创建 Excel 工作簿后只添加一张工作表