gpt4 book ai didi

arrays - 使用 For Each (Excel VBA) 在目标数组中定位

转载 作者:行者123 更新时间:2023-12-04 21:04:03 26 4
gpt4 key购买 nike

我试图捕捉用户在工作表上所做的更改。

我有我的 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 索引就无关紧要了——然后处理这个一维数组而不是二维数组?

谢谢,
英国电信

最佳答案

有关您需要对阵列做什么以及如何操作的更多信息会有所帮助。但是至于您发布的内容...像您建议的那样,使用一维数组应该可以解决问题:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim DiffAddys() As String, NewValues() As Variant

Application.EnableEvents = False

ReDim DiffAddys(Target.Cells.Count)
ReDim NewValues(Target.Cells.Count)

i = 1 'it is generaly not recommended to start array indexes on 1

For Each aCell In Target.Cells

DiffAddys(i) = aCell.Address
NewValues(i) = aCell.Value2
i = i + 1

Next aCell

Application.EnableEvents = True

End Sub

或者您可以将 aCell.Address 和 aCell.Value2 放入一个二维数组中。

关于arrays - 使用 For Each (Excel VBA) 在目标数组中定位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28902405/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com