Mostrar formulario al hacer clic en la celda, luego CommandButton para pasar a la siguiente ActiveCell

Mostrar formulario al hacer clic en la celda, luego CommandButton para pasar a la siguiente ActiveCell

Estoy creando un formulario de entrada para usar con una 'tableta' en Excel para que nuestros muchachos lo completen cuando estén en el campo. Como las entradas como los menús desplegables y similares son bastante complicadas, deseo usar un formulario de entrada básico con grandes botones de comando Pasa/Falla. En lugar de usar CommandBoxes individuales para llamar al formulario, elegí usar el siguiente código (dentro del objeto/hoja) para llamar el formulario cuando se seleccionan ciertas celdas:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Selection.Count = 2 Then
        If Not Intersect(Target, Me.Range("W16:W46,W74:W143")) Is Nothing Then
            PFInputForm.Show
        End If
    End If
End Sub

Diseño del formulario de entrada

El formulario de entrada solicita información relativa a ActiveCell para completar el número de artículo, la descripción y los comentarios utilizando el siguiente código en el FORMULARIO.

Private Sub UserForm_Initialize()
    PFInputForm.INPUTCOMMENT.Text = CStr(ActiveCell.Offset(0, 1).Value)
    PFInputForm.ITEMNO = "Item " & ActiveCell.Offset(0, -2)
    PFInputForm.ITEMDESCR = ActiveCell.Offset(0, -1)
End Sub

La intención es que el usuario ingrese un comentario (si corresponde) y luego haga clic en uno de los cuatro botones "Aprobar", "Reprobar", "Aprobar y continuar" y "Reprobar y continuar".

Si hacen clic en "Aprobado" o "Reprobado", tengo un código en el formulario que devuelve el texto del cuadro Comentario a la celda adyacente (usando Desplazamiento), ingresa "P" o "F" respectivamente en la celda activa y cierra el formulario de usuario sin problemas (usando el siguiente código en el FORMULARIO).

Private Sub PASSButton_Click()
    PFInputForm.Hide
    ActiveCell = "P"
    ActiveCell.Offset(0, 1) = PFInputForm.INPUTCOMMENT
End Sub

El problema que tengo es cuando quiero que el usuario haga clic en "Aprobar y continuar" o "Fallar y continuar", donde se supone que sucede lo anterior, pero la celda activa luego baja una celda y abre un nuevo formulario específico. para esa fila.

El código que ejecuto actualmente desde el FORMULARIO para "Pasar y continuar" se encuentra a continuación. El problema que tengo es que cuando se abre el nuevo formulario, puedo ver que la nueva celda activa está seleccionada en la hoja, pero el formulario aún solicita la información de la ActiveCell anterior.

Private Sub PCONTButton_Click()
    PFInputForm.Hide
    ActiveCell = "P"
    ActiveCell.Offset(0, 1) = PFInputForm.INPUTCOMMENT
    ActiveCell.Offset(1, 0).Select
End Sub  

He probado sin éxito algunas variantes, incluyendo ocultar el formulario de usuario (tanto en el código FORM como en el código Sheet), pero después de unas horas de rastrear este (y otros) foros, siento que ahora estoy apuñalando el ¡oscuro!

Respuesta1

Encontré una solución gracias a otro usuario. Agregué una declaración IF THEN adicional a la función que llama al formulario, que busca una bandera (ya sea 1 o 0) en la celda AI14 (que comienza como 1):

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Range("AI14") Then
        If Selection.Count = 2 Then
            If Not Intersect(Target, Me.Range("W16:W46,W74:W143")) Is Nothing Then
                Range("AI14") = 0
                PFInputForm.Show
            End If
        End If
    End If
End Sub  

Luego agregué un cambio de indicador a 1 para los botones PASA y FALLA:

Private Sub PASSButton_Click()
    Range("AI14") = 1
    ActiveCell = "P"
    ActiveCell.Offset(0, 1) = PFInputForm.INPUTCOMMENT
    PFInputForm.Hide
End Sub

Omito el cambio de bandera en los botones "Continuar" para mantener la bandera en cero, de modo que el código superior no continúe. Luego agregué contenido adicional al código del botón Continuar para que extraiga la información relacionada del nuevo ActiveCell:

Private Sub PCONTButton_Click()
    ActiveCell = "P"
    ActiveCell.Offset(0, 1) = PFInputForm.INPUTCOMMENT
    ActiveCell.Offset(1, 0).Select

    PFInputForm.INPUTCOMMENT.Text = CStr(ActiveCell.Offset(0, 1).Value)
    PFInputForm.ITEMNO = "Item " & ActiveCell.Offset(0, -2)
    PFInputForm.ITEMDESCR = ActiveCell.Offset(0, -1)
End Sub

Este código utiliza la misma fuente de información que el código para inicializar el formulario (ver publicación original)

Solo necesito ordenar el final de la codificación "continuar" para que la bandera vuelva a 1 una vez que se haya llegado al último elemento de la lista.

¡Espero que esto ayude!

información relacionada