Что располагается Excel. Свойство Rows действительно делает?

Хорошо, я заканчиваю дополнительный проект для приложения Excel-VBA прежней версии, и я еще раз столкнулся с загадкой таинственного range.Rows (?) и worksheet.Rows свойства.

Кто-либо знает то, что действительно делают эти свойства и что они, как предполагается, предоставляют мне? (Отметьте: все это, вероятно, относится к соответствию *.Columns свойства также).

То, для чего я действительно хотел бы смочь использовать его, должно возвратить диапазон строк, как это:

   SET rng = wks.Rows(iStartRow, iEndRow)

Но я никогда не мог заставить это делать это, даже при том, что Intellisense показывает два аргумента в пользу него. Вместо этого я должен использовать один из двух или трех других (очень топорных) методов.

Справка очень бесполезна (обычно так для Office VBA), и гуглящий для "строк" не очень полезно, неважно, сколько других условий я добавляю к нему.

Единственными вещами, для которых я смог использовать его, является 1) возврат одна строка как диапазон ( rng.Rows(i) ) и 2) возвратите количество строк в диапазоне ( rng.Rows.Count ). Это - это? Нет ли действительно ничто иное, для чего это хорошо?

Разъяснение: Я знаю, что это возвращает диапазон и что существуют другие способы получить диапазон строк. То, что я прошу, конкретно, что делает мы добираемся от .Rows() то, что мы уже не добираемся от .Cells() и .Range()? Две вещи, которые я знаю, 1) более легкий способ возвратить диапазон одной строки и 2) способ считать количество строк в диапазоне.

Есть ли что-либо еще?

59
задан RBarryYoung 12 July 2019 в 16:16
поделиться

3 ответа

Range.Rows и Range.Columns возвращают по существу тот же диапазон, за исключением того факта, что новый диапазон имеет флаг, который указывает, что он представляет строки или столбцы . Это необходимо для некоторых свойств Excel, таких как Range.Count и Range.Hidden, и для некоторых методов, таких как Range.AutoFit () :

  • Range.Rows.Count возвращает количество строк in Range.
  • Range.Columns.Count возвращает количество столбцов в диапазоне.
  • Range.Rows.AutoFit () автоматически выравнивает строки в диапазоне.
  • Range.Columns.AutoFit ( ) автоматически подбирает столбцы в Range.

Вы можете обнаружить, что Range.EntireRow и Range.EntireColumn полезны, хотя они все еще не совсем то, что вы ищете . Они возвращают все возможные столбцы для CompleteRow и все возможные строки для CompleteColumn для представленного диапазона.

Я знаю это, потому что SpreadsheetGear для .NET поставляется с. NET API, которые очень похожи на API Excel. SpreadsheetGear API поставляется с несколькими строго типизированными перегрузками для индексатора IRange, включая ту, которую вы, вероятно, хотели бы иметь в Excel:

  • IRange this [int row1, int column1, int row2, int column2];

Отказ от ответственности: я владею SpreadsheetGear LLC

53
ответ дан 24 November 2019 в 18:30
поделиться

Два ваших примера - единственное, что я когда-либо использовал для свойств Rows и Columns , но теоретически вы могли бы сделать с ними все, что можно сделать с помощью объекта Range .

Тип возвращаемого значения этих свойств сам по себе является Range , поэтому вы можете делать такие вещи, как:

Dim myRange as Range
Set myRange = Sheet1.Range(Cells(2,2),Cells(8,8))
myRange.Rows(3).Select

Что выберет третью строку в myRange (Ячейки B4: H4 на Листе 1).

update: Чтобы делать то, что вы хотите, вы можете использовать:

Dim interestingRows as Range
Set interestingRows = Sheet1.Range(startRow & ":" & endRow)

update # 2: Или, чтобы получить подмножество строк из другого диапазона:

Dim someRange As Range
Dim interestingRows As Range

Set myRange = Sheet1.Range(Cells(2, 2), Cells(8, 8))

startRow = 3
endRow = 6

Set interestingRows = Range(myRange.Rows(startRow), myRange.Rows(endRow))
7
ответ дан 24 November 2019 в 18:30
поделиться

Я не уверен, но думаю, что второй параметр - отвлекающий маневр.

И .Rows, и .Columns принимают два необязательных параметра: RowIndex и ColumnIndex. Попробуйте использовать ColumnIndex, например Rows (ColumnIndex: = 2) , генерирует ошибку для как .Rows, так и .Columns .

По моему мнению, это в некотором смысле унаследовано от Cells (RowIndex, ColumnIndex) Свойство, но подходит только первый параметр.

2
ответ дан 24 November 2019 в 18:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: