【发布时间】:2015-05-08 06:31:13
【问题描述】:
我试图捕捉用户在工作表上所做的更改。
我设置了 worksheet_change 事件,但问题是如果 Target.Range 大于单个单元格怎么办?
基本上,我需要评估每个单元格更改以使用函数测试有效性。我的问题是 Target.Range 当然可以是任何大小,并且测试有效性的功能会查看周围的单元格。
我试图使用类似这样的方法来捕获更改单元格的地址:
i = 1
j = 1
For Each aCell In Target
DiffAddys(i, j) = aCell.Address
NewValues(i, j) = aCell.Value2
If i < Target.Rows.Count Then i = i + 1
If j < Target.Columns.Count Then j = j + 1
Next
这样我可以捕获单元格的地址,然后使用 aCell.Row 或 aCell.Column 等,但如果 Target.Range 大于 2 列,则会失败,因为 i 索引的增长速度超过了应有的速度。
有没有在目标范围内找到“aCell”的位置,因为它是由 For Each 循环的?还是最好相信 For Each 总是 1,1 1,2 1,3 2,1 2,2 等等?
还有更好的方法吗?也许只需将每个 aCell 的地址复制到等于 Target.Range 的行*列的一维数组中,这样 i/j 索引就无关紧要了——然后处理这个一维数组而不是二维数组?
谢谢, 英国电信
【问题讨论】:
-
这不是你的问题,但你不能只是
if target.cells.count > 1 then ...吗?或使用worksheet_selectionchange(byval target as range -
要获得更准确的答案,请显示用于处理更改的单元格并测试有效性的函数代码。在分析它如何查看周围的单元格后,可以选择最合适的数组结构。