Что делает диапазон Excel.Свойство Rows действительно делает?
хорошо, я заканчиваю проект надстройки для устаревшего приложения Excel-VBA, и я снова столкнулся с загадкой таинственного диапазона.Строки (?) и рабочий лист.Свойства строк.
кто-нибудь знает, что эти свойства действительно и что они должны предоставить мне? (Примечание: все это, вероятно, относится к соответствующему *.Свойства столбцов).
Мне как чтобы иметь возможность использовать его для того, чтобы вернуть диапазон строк, например:
SET rng = wks.Rows(iStartRow, iEndRow)
но я никогда не мог заставить его сделать это, хотя Intellisense показывает два аргумента для этого. Вместо этого я должен использовать один из двух или трех других (очень запутано) методов.
справка очень бесполезна (как правило, для Office VBA), и поиск в гугле для "строк" не очень полезен, независимо от того, сколько других терминов я добавляю к нему.
единственное, для чего я смог его использовать, это 1) вернуть одну строку как диапазон (rng.Строки(я) ) и 2) возвращает количество строк в диапазоне ( rng.Строки.Граф!--15--> ). Это все? Неужели это больше ни на что не годится?
пояснение: Я знаю, что он возвращает диапазон и что есть другие способы получить диапазон строк. То, что я прошу, - это конкретно то, что мы получаем .Rows (), которые мы еще не получаем .Элементы и. Range()? Две вещи, которые я знаю, это 1) более простой способ чтобы вернуть диапазон одной строки и 2) способ подсчета количества строк в диапазоне.
что-нибудь еще?
9 ответов
Range.Rows
и Range.Columns
возвращает практически тот же диапазон, за исключением того, что новый диапазон имеет флаг, который указывает, что он представляет строки или столбцы. Это необходимо для некоторых свойств Excel, такие как выбор.Подсчет и дальность.Скрытые и для некоторых методов, таких как Range.AutoFit()
:
-
Range.Rows.Count
возвращает количество строк в диапазоне. -
Range.Columns.Count
возвращает количество столбцов в диапазоне. -
Range.Rows.AutoFit()
autofits строк Диапазон. -
Range.Columns.AutoFit()
autofits столбцы в диапазоне.
вы можете найти Range.EntireRow
и Range.EntireColumn
полезны, хотя они еще не совсем то, что вы ищете. Они возвращают все возможные столбцы для EntireRow
и все возможные строки EntireColumn
для представленного диапазона.
я знаю это, потому что SpreadsheetGear для .NET поставляется с .NET API, которые очень похожи на API Excel. API SpreadsheetGear поставляется с несколько строго типизированных перегрузок в индексатор IRange, включая ту, которую вы, вероятно, хотите, чтобы Excel:
IRange this[int row1, int column1, int row2, int column2];
отказ от ответственности: я владею SpreadsheetGear LLC
ваши два примера-единственные вещи, которые я когда-либо использовал Rows
и Columns
свойства Для, но теоретически вы можете сделать с ними все, что можно сделать с помощью
Так .Результат строк помечается как состоящий из строк, вы можете" для каждого " его обрабатывать каждую строку индивидуально, например:
Function Attendance(rng As Range) As Long
Attendance = 0
For Each rRow In rng.Rows
If WorksheetFunction.Sum(rRow) > 0 Then
Attendance = Attendance + 1
End If
Next
End Function
Я использую это для проверки посещаемости в любой из нескольких категорий (разные столбцы) для списка людей (разные строки).
(и, конечно, вы можете использовать .Столбцы, чтобы сделать "для каждого" над столбцами в диапазоне.)
Я не уверен, но я думаю, что второй параметр-это отвлекающий маневр.
оба .Строки и. Столбцы принимают два необязательных параметра: RowIndex и ColumnIndex. Попробуйте использовать ColumnIndex, например Rows(ColumnIndex:=2)
, генерирует ошибку оба .Строки и. Колонки.
мое чувство это унаследовано в некотором смысле от Cells(RowIndex,ColumnIndex)
свойство, но подходит только первый параметр.
Я обнаружил, что использую range.Строки для его эффектов в методе Copy. Он копирует высоту строк из источника в пункт назначения,что является поведением, которое я хочу.
rngLastRecord.Rows.Copy Destination:=Sheets("Availability").Range("a" & insertRow)
Если бы я использовал rngLastRecord.Копировать вместо rngLastRecord.Строки.Скопируй, высота ряда будет тем, что было до копии.
это, возможно, немного kludge, но следующий код делает то, что вы, похоже, хотите сделать:
Set rng = wks.Range(wks.Rows(iStartRow), wks.Rows(iEndRow)).Rows
есть другой способ, возьмите это в качестве примера
Dim sr As String
sr = "6:10"
Rows(sr).Select
все, что вам нужно сделать, это конвертировать ваши переменные iStartRow
, iEndRow
в строку.