Удаление строки листа на основе значения, привязанного к таблице - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть рабочий лист с двумя таблицами, который начинается в столбце B. В столбце A есть формула COUNTA, связанная с кнопкой удаления пустых строк. Мой код прекрасно работает для удаления строки таблицы, но мне нужно удалить всю строку рабочего листа, чтобы он также удалял формулу в столбце A вместо того, чтобы непрерывно смещаться вниз при добавлении или удалении строк.

Проблема в том, что у меня есть две таблицы на листе, поэтому мне нужно, чтобы действие строки удаления относилось только к таблице Local_1, а цикл останавливался, когда он достигал конца этой таблицы.

Любые предложения о том, как удалить всю строку, а не только строку таблицы?

Dim i As Long
Application.ScreenUpdating = False
ActiveSheet.Unprotect Password:=pswStr
Rows.EntireRow.Hidden = False
With ActiveSheet.ListObjects("Local_1")
For i = .ListRows.Count To 1 Step -1
        If .ListRows(i).Range.Cells(0) <= 0 Then
            .ListRows(i).Delete                
        End If
    Next i
End With

1 Ответ

0 голосов
/ 02 ноября 2018

Список всей строки

Чтобы не ограничивать свой стиль, просто замените

If .ListRows(i).Range.Cells(0) <= 0 Then
    .ListRows(i).Delete                
End If

с

If .ListRows(i).Range.Cells(1) <= 0 Then 'as Tim Williams mentioned
    '.ListRows(i).Delete
    ActiveSheet.Rows(Range(.DataBodyRange.Address).Row + i - 1).Delete
End If

Но (чтобы ограничить ваш стиль) я настоятельно рекомендую вам использовать (объявлять) переменные следующим образом:

Sub ListEntireRow()

  Dim i As Long
  Dim oWs As Worksheet
  Dim oList As ListObject

  Application.ScreenUpdating = False

  Set oWs = ActiveSheet
  Set oList = oWs.ListObjects("Local_1")

  oWs.Unprotect Password:=pswStr
  Rows.EntireRow.Hidden = False

  With oList
    For i = .ListRows.Count To 1 Step -1
      If .ListRows(i).Range.Cells(1) <= 0 Then
'        .ListRows(i).Delete
        oWs.Rows(Range(.DataBodyRange.Address).Row + i - 1).Delete
      End If
    Next i
  End With

  Application.ScreenUpdating = True

End Sub

Теперь у вас есть Intellisense для рабочего листа (oWs) и ListObject (oList), работающие на вас, то есть вы можете видеть их свойства и методы.

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