我认为以下代码应产生数字的对角线,我想知道为什么此代码无法按预期工作:
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重新分配为这个新范围,分配一个值,然后继续。
答案 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