Удалить несколько выбранных строк с помощью переключателя - PullRequest
0 голосов
/ 08 марта 2019

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

То, что я ищу, это функция, при которой, если я нажимаю escape на клавиатуре или 'x' во всплывающем окне, она не удаляет строку

Вот что у меня есть:

Sub DeleteRow()
    Dim rng As Range
    Dim iRowCount As Integer
    Dim iForCount As Integer

    On Error Resume Next

    Set selectedRng = Application.Selection
    Set selectedRng = Application.InputBox("Range", , selectedRng.Address, Type:=8)

    iRowCount = selectedRng.Rows.Count
    For iForCount = iRowCount To 1 Step -1
    If Application.WorksheetFunction.CountA(selectedRng.Rows(iForCount)) = 0 Then
    selectedRng.Rows(iForCount).EntireRow.Delete
    selectedRnd.Rows(iForCount).Delete
    End If
    Next

    Application.ScreenUpdating = True
End Sub

Ответы [ 2 ]

0 голосов
/ 11 марта 2019

Спасибо, ребята,

Я решил полностью упростить код, и теперь он отлично работает

Sub DeleteRow()
 Dim Rng As Range, Num As String
On Error Resume Next
Set Rng = Application.InputBox(prompt:="Please Select Start Row ", Title:="Delete Rows", Type:=8)
    If Split(Rng.Address, "$")(2) < 1 Then
        'MsgBox "Please choose a Number Greater than 1"
        Exit Sub
    End If
    Num = Application.InputBox(prompt:="Please Insert Number of Rows", Title:="Delete Rows", Type:=1)
        If Num = False Then Exit Sub
             Rng.Resize(Num).EntireRow.Delete
End Sub
0 голосов
/ 08 марта 2019

Функция InputBox возвращает строку, поэтому использование SET для присвоения результата вашей переменной selectedRng (которая не была объявлена, поэтому будет считаться вариантом) будет просто пропущена, когда пользователь отменит поле ввода.Следовательно, переменная будет продолжать хранить Application.Selection, который вы присвоили ей в предыдущей строке.

Поле ввода возвращает «Ложь», если пользователь нажимает кнопку «Отмена» или «X» или нажимает клавишу Escape.

Я бы попытался объявить строковую переменную для захвата результата ввода, как в

dim strResult as string

strResult = Application.InputBox("Range", , selectedRng.Address)
if strResult <> "False" then
   set selectedRng = Range(strResult)
  'delete the rows now...
end if
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...