Как дополнительная деталь: есть разница между использованием Rows(somerow)
и Range(somerange)
.
Это можно проверить на простом примере:
Sub Test()
Dim rng As Range
Set rng = Sheet1.Range("1:1")
Debug.Print rng(1, 1).Address ' returns $A$1
Dim rng2 As Range
Set rng2 = Sheet1.Rows(1)
Debug.Print rng2(1).Address ' succeeds, returns $1:$1
Debug.Print rng2(1, 1).Address ' fails
End Sub
Решение - использовать Rows(myRow).Cells
- уже было предложено.
EDIT:
В попытке отразить и обобщить некоторые из комментариев, Row
, будь то Range.Rows(somerow)
или Sheet.Rows(somerow)
, ссылается на единицу как строку , а не как отдельные клетки.
Например, Range("A1:E10").Rows
будет означать 10 строк , а не 50 ячеек .
Аналогично, Sheet1.Rows(1)
относится к 1 строке , а не 16384 ячейкам . Строка является «наименьшей единицей рассмотрения» из-за отсутствия лучшего термина. Одна строка не может иметь индекс столбца - это всего лишь одна строка, а не коллекция всех ячеек, составляющих эту строку, каждая из которых имеет свой собственный индекс столбца.
Так что вам нужно будет использовать Cells
, если вы хотите индексировать ячейки в определенной строке.