Я создал макрос с целью переключения содержимого между двумя ячейками. Хотя это работает, я думаю, что это можно было бы написать более элегантным способом.Коммутационные ячейки Макро - Странное поведение
Рассмотрим на следующие пример:
Supose, что в предыдущей картине вы выбрали первые две ячейки ("Джек" и "The"). После запуска макроса содержимое выбранных ячеек переключается.
Рабочий код заключается в следующем:
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 Object (а не строка, как и в предыдущем примере), так что макрос будет просто переключаться между объектами. Я хотел бы сделать что-то вроде этого
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
не является переменная, но указатель на адрес переменной.
Я не совсем понимаю, почему это происходит. Не могли бы вы объяснить или указать какое-то направление по причине этого поведения?
Спасибо за ваше время.
Eduardo.
Я думаю, что поскольку «Range.Value» является «Variant», он считается типом значения и поэтому передается значением в «Temp» в вашем первом случае. 'Range' является ссылочным типом и поэтому передается ref в вашем втором случае (или, другими словами, как указатель, как вы упомянули). Прочтите [эту статью] (https://msdn.microsoft.com/en-us/library/t63sy5hs.aspx) для дальнейшего объяснения. – Mike