我已经创建了一个宏用于切换两个单元格之间的内容。虽然它有效,但我认为它可以用更优雅的方式书写。开关单元宏 - 奇怪的行为
考虑如下因素例如:
Supose,在前面的图片选择前两个单元格(“杰克”和“”)。在运行宏之后,切换所选单元格的内容。
工作代码是这样的:
Sub SwitchCells()
Dim R As Range
Set R = Range(Selection.Address)
Dim Temp As String
If R.Count = 2 Then
Temp = R(1).Value
R(1) = R(2)
R(2) = Temp
End If
End Sub
虽然是工作,我想临时变量也将是一个Range对象(而不是像前面例子中的String),从而使宏只会在对象之间切换位置。我愿做这样的事情
Sub SwitchCells()
Dim R As Range
Set R = Range(Selection.Address)
Dim Temp As Range
If R.Count = 2 Then
Set Temp = R(1)
R(1) = R(2)
R(2) = Temp
End If
End Sub
在宏的第二个版本的问题是,当R(1)
得到的R(2)
价值,所以做临时变量Temp
似乎Temp
不一个变量,但是指向变量地址的指针。
我不太明白为什么会发生这种情况。你能解释一下这个行为的原因吗?
谢谢你的时间。
爱德华多。
我觉得既然'Range.Value'是一个'Variant',它被认为是一个值类型,因此在你的第一种情况下它被值传递给'Temp'。 'Range'是一个引用类型,因此在你的第二种情况下(或者换句话说就像你提到的指针)一样被ref传递。阅读[本文](https://msdn.microsoft.com/en-us/library/t63sy5hs.aspx)以获得进一步解释。 – Mike