Вы должны определить их как Range
, а не Integer
.
Следующие 2 строки одинаковы.
StartA = wsi.Range("In_StartA")
StartA = wsi.Range("In_StartA").Value
Если вы опустите .Value
, это все еще дефолт. Но во второй строке вы ясно видите, что происходит: значение диапазона In_StartA
записывается в переменную StartA
(ссылка на диапазон отсутствует, поскольку StartA
является цифрой c значение Integer
, а не объект диапазона).
Но если вы объявите переменные как диапазоны…
Dim StartA As Range
Dim StartB As Range
… и установите переменные в диапазон…
Set StartA = wsi.Range("In_StartA")
Set StartB = wsi.Range("In_StartB")
… тогда следующая строка изменит значение в ячейке In_StartA
…
StartA = StartB
… потому что оно на самом деле совпадает с
StartA.Value = StartB.Value
… где вы можете четко видим, что обе переменные являются объектами диапазона.
Таким образом, должно работать следующее:
Sub Test1()
Application.CutCopyMode = False
Dim wsi As Worksheet
Set wsi = ThisWorksheet.Worksheets("Input")
Dim StartA As Range
Set StartA = wsi.Range("In_StartA")
Dim StartB As Range
Set StartB = wsi.Range("In_StartB")
StartA.Value = StartB.Value
End Sub