Office System

The Office Developer Blog (by Luiz Cláudio C. V. Rocha - São Paulo, Brazil)

August 2010 - Posts

Definindo valor padrão de datas no Access com VBA

 

Um recurso que facilita o trabalho de quem precisa digitar dados em um formulário é a definição de valor padrão (default value) para alguns campos.

Imagine, por exemplo, que você seja responsável por lançar no sistema os dados de extrato bancário, e que cada dia de extrato tenha de 15 a 20 lançamentos. Provavelmente você não vai querer digitar em cada registro a data de lançamento, mas sim digitá-la uma única vez e esperar que o sistema a assuma como padrão para as próximas linhas, até que você informe a próxima data.

No Access, o valor padrão pode ser definido por código VBA ou diretamente no modo estrutura do formulário. Neste cenário que descrevi acima, faz sentido definir o valor padrão por VBA, já que o conteúdo será dinâmico: sempre que o usuário digitar uma data de lançamento, este valor digitado tornar-se-á padrão para os próximos registros.

A primeira tentativa de um programador provavelmente será usar o evento After Update do campo DataLancamento para atribuir o valor padrão desta forma:

Private Sub DataLancamento_AfterUpdate()

On Error GoTo ErrHandler

If IsDate(Me.DataLancamento) = True Then

    Me.DataLancamento.DefaultValue = Me.DataLancamento

End If

ExitHere:

Exit Sub

ErrHandler:

MsgBox Err.Description & vbCrLf & Err.Number & vbCrLf & Err.Source, vbCritical, "DataLancamento_AfterUpdate"

Resume ExitHere

End Sub

 

O código vai até rodar corretamente, porém, a data do próximo registro não será a esperada. Provavelmente virá com algum dia de 1899. Motivo: a propriedade Valor Padrão deve ser passada na forma de string, e não com o tipo de dados do campo em questão.

Portanto, se o campo for do tipo data, use esta sintaxe:

Private Sub DataLancamento_AfterUpdate()

On Error GoTo ErrHandler

If IsDate(Me.DataLancamento) = True Then

    Me.DataLancamento.DefaultValue = "#" & Format(Me.DataLancamento, "yyyy-MM-dd") & "#"

End If

ExitHere:

Exit Sub

ErrHandler:

MsgBox Err.Description & vbCrLf & Err.Number & vbCrLf & Err.Source, vbCritical, "DataLancamento_AfterUpdate"

Resume ExitHere

End Sub

 

Posted: Aug 22 2010, 11:35 AM by Luiz | with no comments
Filed under: , ,