正确保存内存中的引用而不是激活

你如何正确地保存对某个单元格的引用,比如

Dim x As WHAT_TYPE_? x = location_of_cell_in_memory 

而不是激活它?

我不想通过激活单元格( .Select.Activate )来迭代,然后使用偏移量向上或向下移动。 这应该在屏幕上没有发生任何事情的情况下完成,只需在后台检索和分配值,这样用户就不能在屏幕上的某处点击并毁坏脚本。

要么

我真的必须自己定义一些Pair-Datatype(x,y)并将其用作单元表示吗?

要么

作为三重(单,x,y)?

我甚至不确定在VBA中甚至可能,我来自Java。

您不必激活或select一个单元格来分配一个值。 给定正确的对象( RangeCell等),可以直接读取或写入value属性。 您可以初始化一个Rangevariables,并让它保存稍后想要访问的单元格地址。

上面说过,如果你只是想在单元迭代中赋值,那么就不需要真正分配dynamic范围引用和使用偏移量。 一个简单的循环会做。 请参阅以下代码和示例。

 Sub IterateExample() 'Initialize variables. Dim wb As Workbook Dim ws As Worksheet Dim x As Integer, y As Integer, i As Integer, j As Integer ' Assign to object. Set wb = ThisWorkbook Set ws = wb.Sheets("Sheet1") ' Assign values. x = 10 y = 10 Application.ScreenUpdating = False 'Hide updates from viewer/user. ' Simple iteration. For i = 1 To x For j = 1 To y 'i is row index, j is column index. ws.Cells(i, j).Value = i * j 'Use .Value directly, no need to .Select or .Activate Next Next Application.ScreenUpdating = True 'Return to original setting. End Sub 

结果很简单:

在这里输入图像说明

但是,如果您确实需要更新范围引用,则循环也可以解决该问题,只需在循环内重新分配对象即可。

 Sub OffsetExample() 'Initialize variables. Dim wb As Workbook Dim ws As Worksheet Dim r As Range, i As Integer 'Assign to object. Set wb = ThisWorkbook Set ws = wb.Sheets("Sheet1") 'Assign range. Set r = ws.Range("A1") Application.ScreenUpdating = False 'Hide updates from viewer/user. 'Iteration of offset. For i = 1 To 10 r.Value = i * i Set r = r.Offset(1, 1) 'Move range reference 1 row down, 1 column right Next Application.ScreenUpdating = True 'Return to original setting. End Sub 

结果如下:

在这里输入图像说明