Это почти тот же вопрос, размещенный здесь:
Excel VBA - Как очистить динамический диапазон (от нижнего заголовка до последней строки)
Однако, учитывая, что это старая ветка И предоставленные решения не работают, я отправляю вопрос так, как пытаюсь решить мою проблему.
Здесь найдено два решения для поиска правильного столбца:
VBA - Найти столбец с определенным заголовком и найти сумму всех строк в этом столбце
https://www.extendoffice.com/documents/excel/4879-excel-select-column-by-header-name.html
Решение для очистки Содержимое, найденное здесь:
Excel VBA - Как очистить динамический диапазон (от нижнего заголовка до последней строки)
Вот что я пытался заставить работать:
With ActiveSheet
xStr = "Product Folder"
Set aCell = .Range("B2:J2").Find(What:=xStr, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False, SearchFormat:=False)
'If Found
If Not aCell Is Nothing Then
col = aCell.Column
colName = Split(.Cells(, col).Address, "$")(1)
lRow = .Range(colName & .Rows.count).End(xlUp).Row
'This is your range
Set Rng = .Range(colName & "2" & lRow)
'If not found
Else
MsgBox "Column Not Found"
End If
Range(Rng).Resize(Rows.count - 1, Columns.count).Offset(1, 0).ClearContents
End With
Я могу получить ВСЕ необходимую информацию (столбец, заголовок, диапазон и т. Д.), Но не могу найти способ очистки содержимого.
С кодом, как указано выше, я получаю ошибку:
Метод 'Range' объекта '_Global' завершился ошибкой
Я пытался изменить
lRow = .Range(colName & .Rows.count).End(xlUp).Row
'This is your range
Set Rng = .Range(colName & "2" & lRow)
На это:
lRow = Range(colName & .Rows.count).End(xlUp).Row
'This is your range
Set Rng = Range(colName & "2" & lRow)
И эта строка:
Range(Rng).Resize(Rows.count - 1, Columns.count).Offset(1, 0).ClearContents
На это:
Rng.Resize(Rows.count - 1, Columns.count).Offset(1, 0).ClearContents
Но тогда я получаю эту ошибку:
Ошибка приложения или объекта
Попытка изменить это:
'If Found
If Not aCell Is Nothing Then
col = aCell.Column
colName = Split(.Cells(, col).Address, "$")(1)
lRow = .Range(colName & .Rows.count).End(xlUp).Row
'This is your range
Set Rng = .Range(colName & "2" & lRow)
'If not found
Else
MsgBox "Column Not Found"
End If
Range(Rng).Resize(Rows.count - 1, Columns.count).Offset(1, 0).ClearContents
К этому:
'If Found
If Not aCell Is Nothing Then
col = aCell.Column
colName = Split(.Cells(, col).Address, "$")(1)
lRow = Range(colName & .Rows.count).End(xlUp).Row + 1
Set myCol = Range(colName & "2")
'This is your range
Set Rng = Range(myCol & ":" & colName & lRow)
'If not found
Else
MsgBox "Column Not Found"
End If
Rng.Clear
Затем я получаю сообщение об ошибке в строке Set Rng
:
Метод 'Range' объекта '_Global' не выполнен
Я знаю, что сама строка не совсем корректна (очевидно), но я просто не знаю, как еще получить код, который будет читаться как Range("A2:A" & Lastrow).Clear