VBA如何使用偏移量来更改范围变量

时间:2019-09-25 21:25:18

标签: excel vba

我认为以下代码应产生数字的对角线,我想知道为什么此代码无法按预期工作:

Sub RangeExample()

Dim a As Range

Set a = Sheets(1).Range("a1")

a.Value = 0

Dim i As Integer


    For i = 1 To 100

        a = a.Offset(1, 1)
        a.Value = i

    Next i

End Sub

我知道有很多产生对角线数字的方法,我不问如何做到。
我要问的是如何将范围变量a更改为其他范围,然后反复进行。在我看来,a.offset(1,1)返回的范围对象是一个上下一个的对象,我应该能够将a重新分配为这个新范围,分配一个值,然后继续。

3 个答案:

答案 0 :(得分:2)

您当前的问题是您缺少Set

Set a = a.Offset(1, 1)  

请注意,您也可以只使用i而不是Set

a.Offset(i, i).Value = i

另一种选择是使用Cells,例如

Sheets(1).Cells(i + 1, i + 1).Value = i

有多种方法可以给猫咪剥皮-选择对您未来最简单,最直观的方法。

答案 1 :(得分:0)

感谢您的回答,我不知道在这种情况下需要set。我正在寻找的特定答案现在可以在以下位置找到:

What does the keyword Set actually do in VBA?

具体地说,以下是LeppyR64的答案。 “ Set用于设置对象引用,而不是赋值。”

我不知道单独的平等只会影响范围对象a的值。要实际更改a所引用的范围,我需要set,因为a应该引用一个新的范围对象。

答案 2 :(得分:0)

@BigBen已经解决了该问题

但是您可以避免通过With...End With

在每次迭代中重新设置范围
Option Explicit

Sub RangeExample()
    Dim i As Long

    With Sheets(1).Range("a1") ' reference topleftmost cell
        .Value = 0 ' write referenced cell value
        For i = 1 To 100
            .Offset(i, i).Value = i 'write referenced cell current offset value
        Next
    End With
End Sub