Mostrar formulário do clique na célula e, em seguida, CommandButton para passar para a próxima ActiveCell

Mostrar formulário do clique na célula e, em seguida, CommandButton para passar para a próxima ActiveCell

Estou criando um formulário de entrada para uso com um 'tablet' no Excel para nosso pessoal preencher quando estiver em campo. Como entradas como menus suspensos e similares são bastante complicadas, desejo usar um formulário de entrada básico com grandes botões de comando Aprovar/Reprovar. Em vez de usar CommandBoxes individuais para chamar o formulário, optei por usar o seguinte código (dentro do objeto/planilha) para chamar o formulário quando determinadas células são selecionadas:

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

Layout do formulário de entrada

O formulário de entrada chama informações relativas ao ActiveCell, para preencher o Item#, Descrição e Comentários usando o seguinte código no FORM.

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

A intenção é que o usuário insira um comentário (se aplicável), depois clique em um dos quatro botões “Aprovado”, “Reprovado”, “Aprovado e Continuado” e “Reprovado e Continuado”.

Se eles clicarem em "Aprovado" ou "Reprovado", tenho o código no Formulário, retorne o texto da caixa Comentário para a célula adjacente (usando Offset), insira "P" ou "F" respectivamente na célula ativa e feche o formulário do usuário sem problemas (usando o seguinte código no FORM).

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

O problema que tenho é quando quero que o usuário clique em "Aprovar e continuar" ou "Falha e continuar", onde o acima deve acontecer, mas a célula ativa desce uma célula e abre um novo formulário específico para essa linha.

O código que executo atualmente no FORM para "Passar e Continuar" está abaixo. O problema que tenho é que quando o novo formulário é aberto, posso ver que a nova célula ativa está selecionada na planilha, mas o formulário ainda está chamando as informações da ActiveCell anterior.

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

Eu tentei sem sucesso algumas variantes, incluindo ocultar o formulário do usuário (tanto no código FORM quanto no código da planilha), mas depois de algumas horas vasculhando este (e outros) fóruns, sinto que agora estou apenas esfaqueando o escuro!

Responder1

Encontrei uma solução graças a outro usuário. Adicionei uma instrução IF THEN adicional à função que chama o formulário, que está procurando um sinalizador (1 ou 0) na célula AI14 (que começa 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  

Em seguida, adicionei uma mudança de sinalizador de volta para 1 para os botões PASS e FAIL:

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

Omito a mudança do sinalizador nos botões "Continuar", para manter o sinalizador em zero, para que o código superior não continue. Em seguida, adicionei algum conteúdo extra ao código do botão Continuar para que ele extraia as informações relacionadas do novo 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 usa a mesma fonte de informações que o código para inicializar o formulário (veja a postagem original)

Eu só preciso arrumar o final da codificação "continuar" para que o sinalizador retorne para 1 assim que o último item da lista for alcançado.

Espero que isto ajude!

informação relacionada