Я написал следующий код и хочу отформатировать строку Grand Total
. Я хочу сделать это динамическим, потому что ячейки итоговой строки меняются каждый месяц.
Sub ReportData()
Application.ScreenUpdating = False
Dim Report As Worksheet
Set Report = WBNew.Worksheets("Report")
Report.UsedRange.Copy
With Sheets("Report").UsedRange
.PasteSpecial xlPasteFormats
.PasteSpecial xlPasteValues
.Columns("A:Q").EntireColumn.Delete
Set Rng = .FIND(What: = "Grand Total", LookAt:=xlWhole, LookIn:=xlValues)
Rng.Resize(, 18).Interior.ColorIndex = 20
End With
Application.ScreenUpdating = True
End Sub
Например, если я найду «Общий итог» в ячейке A20, я хочу расширить до последней использованной ячейки, например, X20. Но это моя проблема это не всегда Х20 меняет.
Я хочу изменить Rng.Resize(, 18).Interior.ColorIndex = 20 на динамический, это не всегда 18 ячеек, это может быть 20 или 15 ячеек из общей ячейки, которую я нахожу в столбце A
Так что, по сути, «Общая сумма» — это заголовок строки? Вы ищете его, и когда вы его найдете, вы хотите назначить rng
все непустые ячейки? Другими словами, это последняя использованная ячейка в строке «Общий итог», которая определяет длину диапазона?
Да, например, я нахожу общую сумму в ячейке A20, и я хочу расширить ее до последней используемой ячейки, например, X20, но это моя проблема, это не всегда X20, это меняется
Ваггелис, в этом случае вам, вероятно, будет полезно изучить свойство .End(xlToRight) диапазона. @SJR вы, вероятно, выиграете от stackoverflow.blog/2018/04/26/…
Используйте .Cells(Rng.Row, .Columns.Count).End(xlToLeft)
, чтобы найти последнюю использованную ячейку в строке, где вы нашли Grand Total
, и используйте ее, чтобы раскрасить диапазон.
Set Rng = .FIND(What: = "Grand Total", LookAt:=xlWhole, LookIn:=xlValues)
If Not Rng Is Nothing Then
With Sheets("Report")
.Range(Rng, .Cells(Rng.Row, .Columns.Count).End(xlToLeft)).Interior.ColorIndex = 20
End With
Else
MsgBox "Grand Total was not found."
End If
Обратите внимание, что вам нужно проверить If Not Rng Is Nothing Then
, иначе вы столкнетесь с ошибкой, если Grand Total
не существует.
Это работало нормально, но если я хочу пойти дальше и хочу удалить все строки ниже общей строки, как это сделать?
.Rows(Rng.Row + 1 & ":" & .Rows.Count).Delete
Так что вы спрашиваете?