我在理解一些奇怪的行为时遇到了一些麻烦。范围类的.address属性以“Cell:Cell”格式返回一个单元格。 (1)和(2)都以“$ A $ 1:$ A $ 1”的形式给出地址,而不仅仅是“$ A $ 1”。下面列出了一段代码:
With Sheet1
Set r = .Range("MyRange")
'(1)*
Debug.Print r.Address
r.Formula = "= 1 + 1"
For i = 1 To 47
Set r = r.Offset(0, 1)
'above
r1 = r.Offset(-1, 0).Address(True, False)
'above to the left
r2 = r.Offset(-1, -1).Address(True, False)
'to the left
r3 = r.Offset(0, -1).Address(False, False)
'(2)*
Debug.Print r.Address & "gets: " & r1 & "+" & r2 & "+" r3
Next
End With
任何一种情况下的Debug.Print都以以下格式打印:
"$D$10:$D$10 gets: $D$9:$D$9 + $C$8:$C$8 + ... " and so on.
注意: 我不是说(1)和(2)打印相同的东西......它们都按预期打印,只是打印的格式重复两次作为一个单元格的范围。
任何想法都会非常感激 - B
编辑:当我保存并关闭工作簿时,行为会停止并按预期返回打印地址“$ D $ 10获取:...”
答案 0 :(得分:1)
请尝试以下方法:
Sub dural()
Dim r As Range
Set r = Range("A1")
s = r.Address
s = s & vbCrLf & r.Address(1, 1)
s = s & vbCrLf & r.Address(1, 0)
s = s & vbCrLf & r.Address(0, 1)
s = s & vbCrLf & r.Address(0, 0)
MsgBox s
End Sub
你应该看不到冒号。