Обработка ошибки «13» в Excel VBA (переменные и текст на испанском sh) - PullRequest
1 голос
/ 20 февраля 2020

Я создаю макрос, чтобы помочь пользователю удалить строку через textBox. Пользователь должен нажать на кнопку Eliminar hallaz go (Удалить результаты) .

Delete Finding

Затем форма с появляется пустое текстовое поле для ввода пользователем номера строки, которая будет удалена.

Delete Form

Если пользователь пишет Int, макрос работает нормально (понятия не имею, как его оптимизировать). Но когда пользователь пишет что-то другое, макрос вылетает.

Я хотел бы, чтобы всплывающее окно MsgBox сообщало что-то вроде «Пожалуйста, введите правильный номер» всякий раз, когда пользователь пишет что-то другое.

Пока это мой код:

Private Sub AceptarButton_Click()

Dim row2Empty As Integer, rangoDel As Range

' Asignar valor escrito por usuario a Variable

row2Empty = TextFila.Value
On Error GoTo InvalidValue:
Exit Sub

Worksheets(5).Activate


If TextFila.Value = True Then
    Worksheets(5).Rows(row2Empty).Select
    Worksheets(5).Rows(row2Empty).Delete
End If

Unload Me

InvalidValue:
    MsgBox "Por favor digite un numero."
Resume Next

End Sub

Я действительно не понимаю, как справиться с этой ошибкой.

Заранее спасибо,

Jaime

Ответы [ 2 ]

4 голосов
/ 20 февраля 2020

Самый простой способ выполнить это требование - не допускать ввода чего-либо, кроме цифры c ди git. Вы можете сделать это, ответив на событие KeyPress:

Private Sub TextFila_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
   'allow only numeric digits and the backspace key
   If (KeyAscii < 48 Or KeyAscii > 57) And KeyAscii <> 8 Then KeyAscii = 0
End Sub

. Этот подход также позволяет упростить логи c в событии нажатия кнопки.

0 голосов
/ 20 февраля 2020

РЕДАКТИРОВАТЬ: Матье и Брайан правы о подходе cleanst. Мой ответ останется в качестве иллюстрации.

Нет необходимости в пользовательской форме.

Вы можете сделать это напрямую с помощью поля ввода. ваши потребности.

Private Sub AceptarButton_Click()

    Dim targetSheet As Worksheet
    Dim row2Delete As Variant
    Dim range2Delete As Range


    ' Define the target sheet where row is going to be deleted
    Set targetSheet = ThisWorkbook.Worksheets(1)

    ' Loop until enter a valid number or cancel
    Do While True

        ' Get user value
        row2Delete = InputBox("Por favor indique cuál es la fila a eliminar", "Confirmar fila a eliminar")

        ' Check
        Select Case True
        Case StrPtr(row2Delete) = 0
            ' User canceled
            Exit Sub
        Case Not IsNumeric(row2Delete)
            ' Not a number, alert and ask again
            MsgBox "Por favor digite un numero."
        Case IsNumeric(row2Delete)
            ' Is a number, continue
            Exit Do
        End Select
    Loop

    ' Delete row in sheet index = 5
    targetSheet.Rows(row2Delete).Delete

End Sub

Дайте мне знать, если это работает

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