Исправить удаление строки, если строка соответствует в каждом листе - PullRequest
1 голос
/ 15 апреля 2019

Я устанавливаю систему управления Diesel Record в Excel для молочной фермы. Он будет функционировать как примитивная система реляционных баз данных. Водители, транспортные средства и подрядчики будут иметь свой собственный лист.

Я пытаюсь добавить подпункт, чтобы удалить запись, если была допущена ошибка. Каждая запись имеет уникальный идентификатор в столбце 1 соответствующих таблиц.

My Sub должен пройти по всем листам, определить, существует ли идентификатор в столбце 1 листа, и удалить строку, в которой находится идентификатор, если он существует на листе.

Он не делает то, что я пытаюсь, и я понятия не имею, почему. Любая помощь будет оценена по достоинству.

Я также пытался выбрать Целый ряд вместо его удаления - просто чтобы посмотреть, выбрал ли он неправильную строку и удалял, однако мой код возвращает ошибку RunTime 1004: «Выбор метода класса Range не удался».

'Sub Delete_2()

Dim r As Integer
Dim To_Delete As String

To_Delete = InputBox("Input Entry ID to delete", "Delete Record", 
"Entry_ID")
For Each sht In Worksheets
    For r = sht.UsedRange.Rows.Count To 1 Step -1
        If Cells(r, "A").Value = To_Delete Then
            sht.Rows(r).EntireRow.Delete
        End If
    Next r
Next sht

End Sub'

Код выполняется без ошибок, но не удаляет строки. Я подозреваю, что ошибка связана с ActiveSheet или Outer For Loop («Для каждого sht в WorkSheets»). Макрос активируется нажатием кнопки. Если я добавлю идентификатор в столбец 1 листа, где находится кнопка, будет удалена правильная строка. Если этот же идентификатор находится в столбце 1 нескольких других листов, строки не будут удалены. Если макрос запускается нажатием кнопки без идентификатора в ActiveSheet, строки не удаляются.

1 Ответ

0 голосов
/ 15 апреля 2019

Я немного изменил ваш код, сделав ссылки полностью квалифицированными.

Это работает на моем конце.Посмотрите, работает ли это для вас.

Dim r As Integer
Dim To_Delete As String
To_Delete = InputBox("Input Entry ID to delete", "Delete Record", "Entry_ID")
Application.ScreenUpdating = False
For Each sht In ThisWorkbook.Worksheets
    For r = sht.UsedRange.Rows.Count To 1 Step -1
        If sht.Cells(r, "A").Value = To_Delete Then
            sht.Cells(r, "A").EntireRow.Delete
        End If
    Next r
Next sht
Application.ScreenUpdating = True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...