Элемент массива не имеет .Value
, оно должно быть arrAccSof(j, 3) = 0
. Если вы читаете значения в массив как
arrAccSof = .Range(.Cells(3, 1), .Cells(MaxRowAccSof, 4))
это то же самое, что и
arrAccSof = .Range(.Cells(3, 1), .Cells(MaxRowAccSof, 4)).Value
и массив представляет только значения диапазона, но не объект диапазона.
Обратите внимание, что если вы измените значения в массиве, они не будут автоматически изменены в ячейках, если вы не напишите значения массива обратно в ячейки в конце:
.Range(.Cells(3, 1), .Cells(MaxRowAccSof, 4)).Value = arrAccSof
Для сравнения, если вы делаете
Dim AccSof As Range
Set AccSof = .Range(.Cells(3, 1), .Cells(MaxRowAccSof, 4))
затем AccSof
является ссылкой на фактический объект диапазона, который может использоваться как сам диапазон:
AccSof(j, 3).Value = 0
Это немедленно изменяет значение ячейки .
Но обратите внимание, что первый подход с использованием массива быстрее. Я добавил это только для того, чтобы объяснить разницу.