Код VBA: «выбрать строки для удаления, кроме заголовков» (не работает) - PullRequest
0 голосов
/ 14 июня 2019

У меня есть следующий код, который должен просто выбрать диапазон строк и удалить их.К сожалению, он также удаляет заголовки, независимо от того, как я изменяю диапазон.

Я безуспешно пытался изменить параметр "rng".

Спасибо за отзыв, который вы можете предоставить.

Sub delete_rows_range()

'Application.ScreenUpdating = False
Dim rng, Rng_del As Range
Dim leg As Range

Set leg = Worksheets("Sheet1").Range("aB1")
Set rng = Worksheets("Sheet1").Range("b1")

If Worksheets("Sheet1").AutoFilterMode = True Then
Worksheets("Sheet1").AutoFilter.ShowAllData
End If
rng.Select

rng.AutoFilter Field:=2, Criteria1:=leg

'rng.Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.delete
rng.Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Select

Worksheets("Sheet1").AutoFilterMode = False


End Sub

Ответы [ 2 ]

1 голос
/ 14 июня 2019

Ваша проблема в том, что вы используете одну ячейку в качестве диапазона.

Когда вы .Offset используете один диапазон ячеек, используйте `xlCelTypeVisible.EntireRow.Delete

Excel выбирает каждую ячейку на листе и удаляет их.

Вы действительно должны уточнить свой диапазон с помощью правильно определенного объекта диапазона. например, * +1008 *

Dim ws As Worksheet, lRow As Long, rng As Range

Set ws = Worksheets("Sheet1")
lRow = ws.Cells(Rows.Count, 1).End(xlUp).Row
Set rng = ws.Range("A1:AB" & lRow)

Но если вы хотите использовать B1 в качестве rng, вы можете заменить свою строку, rng.Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Select этой строкой ...

rng.Range(Cells(2, 2), Cells(rng.Rows.Count, 2)).SpecialCells(xlCellTypeVisible).EntireRow.Delete
1 голос
/ 14 июня 2019

Вы пытаетесь выбрать из одного диапазона ячеек.

Вы должны сделать вместо:

Sub delete_rows_range()

'Application.ScreenUpdating = False
Dim rng, Rng_del As Range
Dim leg As Range

Set leg = Worksheets("Sheet1").Range("AB1")
Set rng = Worksheets("Sheet1").Range("B1")

If Worksheets("Sheet1").AutoFilterMode = True Then
        Worksheets("Sheet1").AutoFilter.ShowAllData
End If

rng.Select

rng.AutoFilter Field:=2, Criteria1:=leg

'rng.Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.delete

Worksheets("Sheet1").UsedRange.SpecialCells(xlCellTypeVisible).Rows(2).Select

Worksheets("Sheet1").AutoFilterMode = False


End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...