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