Gerar log de alteração de valor de um setpoint alterado pelo operador

Bom dia, preciso criar um script para gerar um log (salvar o valor e a data) da alteracao de um valor feito pelo operador atraves de um setpoint. Nao quero utilizar um botao para validar a alteracao, o log deve ser gerado logo após a escrita no valor do setpoint e dado enter no teclado.

Consegui chegar em algo similar a minha necessidade, usando a funcao Validate do setpoint com a funcao TrackEvent, porém toda vez, na primeira alteracao do setpoint, o log gerado envia o valor vazio para o banco de dados, após a primeira tentativa de log, as posteriores funcionam perfeitamente.

Vou mostrar o código que fiz:

Sub valor_novo_Validate(Cancel, NewValue)

dim usuario, valor
usuario = Application.User
valor = [SetValue-LogRegister].Valor

If usario = “” Then
usuario = “Anônimo”
End if

Application.TrackEvent("O usuario " & usuario & " alterou o valor para = " & valor)

End Sub

Quando eu rodo o programa e tento alterar o valor para 40 por exemplo, o primeiro log gerado é o seguinte: O usuario Anônimo alterou o valor para =

Porém quando eu reescrevo o valor 40 e dou enter novamente, o log gerado funciona adequadamente, e os posteriores também, apenas o primeiro nao funciona:
O usuario Anônimo alterou o valor para = 40
O usuario Anônimo alterou o valor para = 65
O usuario Anônimo alterou o valor para = 78
O usuario Anônimo alterou o valor para = 21
O usuario Anônimo alterou o valor para = 12

Seu NewValue está sendo passado para o [SetValue-LogRegister].Valor, suponho, por uma associação bi-direcional, ou seja, depois da execução do evento Validate(). Dessa forma, você pode passar o novo valor antes de definir sua variável valor.
Outro ponto de atenção, é que, na sua instrução If, há uma comparação com erro de digitação usario, dessa forma, sempre irá retornar “Anônimo”.

Sub valor_novo_Validate(Cancel, NewValue)
    Dim usuario, valor
    usuario = Application.User

    ' Atribui o novo valor
    [SetValue-LogRegister].Valor = NewValue
    
    valor = [SetValue-LogRegister].Valor
    
    If usuario = "" Then
        usuario = "Anônimo"
    End If
    
    Application.TrackEvent("O usuario " & usuario & _
            " alterou o valor para = " & valor)
End Sub
3 Likes

Muito Obrigado! funcionou perfeitamente.