Ошибка компиляции с If, когда я редактирую строку в моей базе данных - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть следующий код, где я нахожу строку, редактирую некоторые данные и заменяю данные новыми, но, поскольку я пытался сделать и оператор IF и Else, чтобы человек мог искать по ID или фамилии, у меня есть ошибка компиляции ... и я не могу найти проблему с ней ... Надеюсь, у кого-то из вас глаза лучше, чем у меня.

Private Sub btnPerso3_Click()

    'declare the variables
    Dim findvalue As Range
    Dim cNum As Integer
    Dim Registros As Worksheet
    'error handling
    On Error GoTo errHandler:
    'hold in memory and stop screen flicker
    Application.ScreenUpdating = False
    Set Registros = Hoja4
    'check for values
    'If BLeg3.Value = "" Or BApe3.Value = "" Then
    'MsgBox "No hay datos para modificar"
    'Exit Sub
    'End If
    'Buscar por Legajo la fila para editar
    If BApe3.Value = "" Then Set findvalue = Registros.Range("A:A"). _
        Find(What:=BLeg3.Value, LookIn:=xlValues, LookAt:=xlWhole)
    'update the values
    findvalue.Offset(0, 4) = Fech3.Value
    findvalue.Offset(0, 0) = Leg3.Value
    findvalue.Offset(0, 1) = Ape3.Value
    findvalue.Offset(0, 2) = Nomb3.Value
    findvalue.Offset(0, 3) = Pues3.Value

ElseIf BLeg3.Value = "" Then Set findvalue = Registros.Range("B:B") _
        .Find(What:=BApe3.Value, LookIn:=xlValues, LookAt:=xlWhole)
    'update the values
    findvalue.Offset(0, 3) = Fech3.Value
    findvalue.Offset(0, -1) = Leg3.Value
    findvalue.Offset(0, 0) = Ape3.Value
    findvalue.Offset(0, 1) = Nomb3.Value
    findvalue.Offset(0, 2) = Pues3.Value
    MsgBox "Se han modificado correctamente los datos"

End If

'error block
On Error GoTo 0
Exit Sub

errHandler:
'show error information in a messagebox
MsgBox "An Error has Occurred " & vbCrLf & _
       "The error number is: " & Err.Number & vbCrLf & _
       Err.Description & vbCrLf & "Please notify the administrator"

End Sub

1 Ответ

2 голосов
/ 11 февраля 2020

Сначала проще найти правильную строку, а затем иметь один блок кода для передачи данных:

Private Sub btnPerso3_Click()

    Dim Registros As Worksheet

    On Error GoTo errHandler 'error handling

    Set Registros = Hoja4

    'if a search term is entered, see if there's a matching row
    If BApe3.Value <> "" Then
        m = Application.Match(BApe3.Value, Registros.Range("B:B"), 0)
    ElseIf BLeg3.Value <> "" Then
        m = Application.Match(BLeg3.Value, Registros.Range("A:A"), 0)
    Else
        MsgBox "No search value entered!"
        Exit Sub
    End If

    If Not IsError(m) Then
        'found the matching row: update
        With Registros.Rows(m)
            .Cells(5).Value = Fech3.Value
            .Cells(1).Value = Leg3.Value
            .Cells(2).Value = Ape3.Value
            .Cells(3).Value = Nomb3.Value
            .Cells(4).Value = Pues3.Value
        End With
    Else
        MsgBox "No match found!"
    End If

    Exit Sub

errHandler:
    'show error information in a messagebox
    MsgBox "An Error has Occurred " & vbCrLf & _
           "The error number is: " & Err.Number & vbCrLf & _
           Err.Description & vbCrLf & "Please notify the administrator"

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