Como muitos sabem, e quem ainda não sabe agora ficará sabendo, o controle calendário existente nas versões 2003 para trás do Access não existe mais nas versões 2007 e 2010. Na versão 2007 ele ainda funciona, mas na 2010 não tem mais suporte.
Pois bem, entre as soluções para contornar essa questão, uma delas pode ser você usar um controle de terceiros ou então, usar o DatePicker, que é nativo nas versões 2007 em diante e substitui o controle calendário. O problema é que você precisará clicar no ícone do calendário, que aparece quando o campo tipo data recebe o foco, para abrir o calendário e só então escolher a data. Existe uma outra questão que desfavorece o DatePicker pelas vias normais, que é o fato dele perder o DatePicker caso o campo possua máscara de entrada. Bom, aqui veremos como forçar a exibição do DatePicker em campos com máscara e tambem como exibir o calendário automaticamente ao entrar no campo, sem a necessidade de clicar no ícone do DatePicker. Faremos isso usando o nosso querido e idolatrado amigo, o VBA. As linhas de código aqui descritas podem ser usadas no evento "Ao receber foco" do campo tipo data.
Em primeiro lugar, vamos recordar como definimos, nas propriedades do campo, se o DatePicker será ou não exibido automaticamente: nas propriedades do campo, aba "Formato", linha "Mostrar Selecionador de Datas", temos as duas opções possíveis para essa propriedade, que são as seguintes:
Nunca - o DatePicker nunca será exibido.
Para datas - O DatePicker será exibido quando o campo receber o foco, caso seja tipo data e caso não tenha máscara de entrada.
Bom, mas e se eu quiser que meu campo tenha a máscara e tambem exiba o DatePicker quando receber o foco? Aqui, partiremos para o VBA. As opções que definimos nas propriedades do campo, usando o método acima, tambem podem ser feitas via VBA.
Para não exibir o DatePicker:
Me.NomeDoCampo.ShowDatePicker = 0
Para exibir o DatePicker:
Me.NomeDoCampo.ShowDatePicker = 1
Bem, mas ainda fica o problema do DatePicker não ser exibido caso o campo tenha máscara. Para esse caso, podemos usar um terceiro parâmetro:
Para exibir o DatePicker em campo com máscara:
Me.NomeDoCampo.ShowDatePicker = 2
E se eu quiser que o calendário seja exibido automaticamente quando o campo receber o foco sem a necessidade de clicar no ícone do calendário?
Para exibir o calendário automaticamente:
DoCmd.RunCommand acCmdShowDatePicker
Pois bem, entre as soluções para contornar essa questão, uma delas pode ser você usar um controle de terceiros ou então, usar o DatePicker, que é nativo nas versões 2007 em diante e substitui o controle calendário. O problema é que você precisará clicar no ícone do calendário, que aparece quando o campo tipo data recebe o foco, para abrir o calendário e só então escolher a data. Existe uma outra questão que desfavorece o DatePicker pelas vias normais, que é o fato dele perder o DatePicker caso o campo possua máscara de entrada. Bom, aqui veremos como forçar a exibição do DatePicker em campos com máscara e tambem como exibir o calendário automaticamente ao entrar no campo, sem a necessidade de clicar no ícone do DatePicker. Faremos isso usando o nosso querido e idolatrado amigo, o VBA. As linhas de código aqui descritas podem ser usadas no evento "Ao receber foco" do campo tipo data.
Em primeiro lugar, vamos recordar como definimos, nas propriedades do campo, se o DatePicker será ou não exibido automaticamente: nas propriedades do campo, aba "Formato", linha "Mostrar Selecionador de Datas", temos as duas opções possíveis para essa propriedade, que são as seguintes:
Nunca - o DatePicker nunca será exibido.
Para datas - O DatePicker será exibido quando o campo receber o foco, caso seja tipo data e caso não tenha máscara de entrada.
Bom, mas e se eu quiser que meu campo tenha a máscara e tambem exiba o DatePicker quando receber o foco? Aqui, partiremos para o VBA. As opções que definimos nas propriedades do campo, usando o método acima, tambem podem ser feitas via VBA.
Para não exibir o DatePicker:
Me.NomeDoCampo.ShowDatePicker = 0
Para exibir o DatePicker:
Me.NomeDoCampo.ShowDatePicker = 1
Bem, mas ainda fica o problema do DatePicker não ser exibido caso o campo tenha máscara. Para esse caso, podemos usar um terceiro parâmetro:
Para exibir o DatePicker em campo com máscara:
Me.NomeDoCampo.ShowDatePicker = 2
E se eu quiser que o calendário seja exibido automaticamente quando o campo receber o foco sem a necessidade de clicar no ícone do calendário?
Para exibir o calendário automaticamente:
DoCmd.RunCommand acCmdShowDatePicker