alguma maneira de confirmar uma entrada

0

Eu tenho uma pergunta que pode ou não ter uma resposta.

Eu tenho uma célula, digamos A1, e se há um "y" em A1, os valores em A2 e A3 são adicionados e a soma é em A4. Se A1 estiver em branco, A4 terá apenas o valor de A3. Isso é muito simples de se fazer no Excel.

No entanto, a pergunta é: o que posso usar em vez de inserir ou excluir "y"? No meu caso, meus dados são alguns milhares de linhas, e ter essa opção "y" está me fazendo adicionar linhas extras sem motivo e preferiria evitar.

Essencialmente, o que eu quero é uma maneira de usar o valor em A2, e encontrar uma maneira de comandar o Excel para atualizar o valor A4, se eu quiser (somando A2 e A3). Caso contrário, continuará mantendo o valor de A3.

Eu tentei usar uma macro para atualizar alterando a cor da fonte e a cor do plano de fundo de A2 para indicar uma confirmação, mas isso não funcionará, pois o Excel não executa cálculos nas alterações de fonte / cor. Se eu acertar F9, ele irá atualizar e vai funcionar, mas isso é muito incômodo, então eu não quero isso.

Pessoal, por favor sugiram outra coisa para mim! Muito obrigado.

    
por rightanium 06.03.2016 / 12:55

1 resposta

0

Insira a seguinte Macro de eventos na área de código da planilha:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim A2 As Range
    Set A2 = Range("A2")

    If Intersect(A2, Target) Is Nothing Then Exit Sub

    Application.EnableEvents = False
        [A4] = [A2] + [A3]
    Application.EnableEvents = True

End Sub

Por ser um código de planilha, é muito fácil de instalar e usar automaticamente:

  1. clique com o botão direito do mouse no nome da guia próximo à parte inferior da janela do Excel
  2. selecione Exibir código - isso abre uma janela do VBE
  3. cole o material e feche a janela do VBE

Se você tiver alguma dúvida, tente primeiro em uma planilha de teste.

Se você salvar a pasta de trabalho, a macro será salva com ela. Se você estiver usando uma versão do Excel posterior a 2003, deverá salvar o arquivo como .xlsm em vez de .xlsx

Para remover a macro:

  1. abrir as janelas do VBE como acima
  2. limpe o código
  3. feche a janela do VBE

Para saber mais sobre macros em geral, consulte:

link

e

link

Para saber mais sobre macros de eventos (código da planilha), consulte:

link

As macros devem estar ativadas para que isso funcione!

EDIT # 1:

Primeiro, descarte a macro anterior e substitua-a por esta:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim A2 As Range

    Set A2 = Range("A2")
    If Intersect(Target, A2) Is Nothing Then Exit Sub
    Cancel = True
    [A4] = [A2] + [A3]
    A2.Font.Bold = True
End Sub

Isso afeta apenas o comportamento de clique duplo em A2 . O código pode ser facilmente expandido para cobrir outras células ou intervalos.

EDIT # 2:

Nesta versão, clique duas vezes em A2 para confirmar A2 . Clicar duas vezes A3 não confirma A2 :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim A2 As Range, boo As Boolean, A3 As Range

    Set A2 = Range("A2")
    Set A3 = Range("A3")

    If Not Intersect(Target, A2) Is Nothing Then
        [A4] = [A2] + [A3]
        A2.Font.Bold = True
        Cancel = True
    End If
    If Not Intersect(Target, A3) Is Nothing Then
        A2.Font.Bold = False
        [A4] = [A3]
        Cancel = True
    End If

End Sub

EDIT # 3:

O uso desta macro estende a funcionalidade para colunas além da coluna A :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim rw2 As Range, rw3 As Range, kolumn As Long

    Set rw2 = Range("2:2")
    Set rw3 = Range("3:3")

    kolumn = Target.Column
    If Not Intersect(Target, rw2) Is Nothing Then
        Cells(4, kolumn) = Cells(2, kolumn) + Cells(3, kolumn)
        Cells(2, kolumn).Font.Bold = True
        Cancel = True
    End If
    If Not Intersect(Target, rw3) Is Nothing Then
        Cells(2, kolumn).Font.Bold = False
        Cells(4, kolumn) = Cells(3, kolumn)
        Cancel = True
    End If

End Sub
    
por 06.03.2016 / 13:12