我似乎陷入了困境。我有一个 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/