Força de entrada de dados na célula do Excel somente se eu quiser mudar uma célula separada

0

Estou tentando criar um arquivo do Excel que force o usuário a inserir dados no arquivo para não deixar as células em branco. Mas eu só quero forçar o usuário a inserir os dados se eles mudarem uma determinada célula.

Isto é para uma folha de pontuação que deve ter informações de suporte inseridas para inserir a pontuação.

Por exemplo, seleciono a célula D12 , que pode ter dados nela:

  • Se eu não tentar alterar a célula, nada acontece e posso selecionar qualquer outra célula no arquivo.
  • Se eu tentar alterar a célula D12 , devo inserir os dados na célula E12 . Se eu não inserir dados em E12 , não será possível alterar D12 .
por T Hansen 09.11.2016 / 20:25

1 resposta

1

Você poderia, para essa tarefa específica, fazer algo nos moldes de:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    If Target.Address = "$E$12" Then
        ActiveSheet.Unprotect
        Select Case Range("E12").Value
            Case ""
                Range("D12").Locked = True
            Case Else
                Range("D12").Locked = False
        End Select
        ActiveSheet.Protect
    End If
End Sub

No código da planilha. Se você usar uma folha protegida, isso irá bloquear / desbloquear D12 com base na manipulação de E12.

Se você não gosta de como isso funciona, ou não quer proteger a folha, você pode tentar algo parecido, mas completamente diferente.

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$D$12" Then
        If Range("E12").Value = "" And Range("D12").Value <> "" Then
            Range("D12") = ""
            MsgBox "Please enter E12 before D12"
        End If
    End If
End Sub

Com isso, se você digitar algo em D12 enquanto E12 estiver vazio, ele será excluído e uma Caixa de Mensagens aparecerá e informará o motivo.
If Target.Address = "$D$12" Then É opcional e pode ser removido completamente se você sempre quiser cheque, caso eles editem D12 e depois deletem o valor em E12. Ou você pode mudar isso para If Target.Address = "$D$12" Or Target.Address = "$E$12" Then
Para esse caso.

    
por 09.11.2016 / 22:11