Visual Basic para Aplicaciones - Detener código de evento worksheet_change y luego reanudar

Life is soft - evento anual de software empresarial
 
Vista:

Detener código de evento worksheet_change y luego reanudar

Publicado por Javier (1 intervención) el 24/01/2021 15:11:56
Hola, estoy tratando de logar que cuando se modifique una determinada celda dentro de una hoja de Excel, verifique si otra determinada celda de la misma fila contiene datos, en caso de estar esta vacía, abrir un formulario donde se le indique al usuario que cargue el dato faltante, detener la ejecución del evento y una vez que el usuario cargo el dato en el formulario reanudar la ejecución del evento y realizar una cuenta entre la celda modificada en un primer termino y la celda cargada a través del formulario, pero tengo el problema de que cuando abre el formulario el evento se sigue ejecutando y no me toma el dato que carga el usuario en el formulario sino el dato anterior que estaba vacio

Aca les dejo codigo utilizado:

1
2
3
4
5
6
7
8
9
10
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
    If ThisWorkbook.Sheets(1).Cells(Target.Row, 2) = Empty Then
        Load UserForm1
        UserForm1.Show 0
        'aqui el usuario deberia cargar el dato en el formulario para que se rellene la celda de la columna 2
    End If
    ThisWorkbook.Sheets(1).Cells(Target.Row, 3) = ThisWorkbook.Sheets(1).Cells(Target.Row, 1) + ThisWorkbook.Sheets(1).Cells(Target.Row, 2)
End If
End Sub
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Detener código de evento worksheet_change y luego reanudar

Publicado por Antoni Masana (498 intervenciones) el 27/01/2021 12:02:57
Si la acción de igualar la hace el formulario y haces una pequeño cambio en la macro ya lo tienes solucionado.

1
2
3
4
5
6
7
8
9
10
11
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 1 Then
        If ThisWorkbook.Sheets(1).Cells(Target.Row, 2) = Empty Then
            Load UserForm1
            UserForm1.Show 0
        Else
            ThisWorkbook.Sheets(1).Cells(Target.Row, 3) = ThisWorkbook.Sheets(1).Cells(Target.Row, 1) + _
                                                          ThisWorkbook.Sheets(1).Cells(Target.Row, 2)
        End If
    End If
End Sub


o mejor esto

1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 1 Then
        With ThisWorkbook.Sheets(1)
            If .Cells(Target.Row, 2) = Empty Then
                Load UserForm1
                UserForm1.Show 0
            Else
                .Cells(Target.Row, 3) = .Cells(Target.Row, 1) + _
                                        .Cells(Target.Row, 2)
            End If
        End With
    End If
End Sub

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar