O Controlo de Calendário da Microsoft 10.0 e versões posteriores utilizam um valor incorreto para a propriedade FirstDay

Número original da BDC: 826761

Nota

Este artigo aplica-se a um ficheiro de base de dados do Microsoft Access (.mdb) ou a um ficheiro de base de dados do Microsoft Access (.accdb). Necessita de competências básicas de macro, programação e interoperabilidade.

Sintomas

No Microsoft Access, é apresentado um dia incorreto para o primeiro dia do Controlo de Calendário. Este problema ocorre quando insere um Controlo de Calendário da Microsoft 10.0 ou uma versão posterior num formulário ou num relatório e, em seguida, define a FirstDay propriedade do Controlo de Calendário com constantes intrínsecas do Microsoft Visual Basic for Applications (VBA).

Por exemplo, defina a FirstDay propriedade do Controlo de Calendário para vbMonday ou para vbTuesday. Quando define a FirstDay propriedade do Controlo de Calendário como vbTuesday, o calendário utiliza quarta-feira como o primeiro dia da semana.

Nota

Quando utiliza as versões anteriores do Controlo de Calendário, pode definir a FirstDay propriedade corretamente.

Causa

Este problema ocorre porque as constantes intrínsecas dos dias definidos no Microsoft Visual Basic, como vbSunday e vbMonday, não estão associadas ao valor diário correto.

Solução

Para contornar este problema, siga estes passos:

  1. Determine a associação entre os dias, as constantes intrínsecas do VBA e os valores numéricos associados aos valores diários corretos e às constantes intrínsecas do VBA. Para tal, siga estes passos:

    1. Inicie o Access.

    2. Abra a base de dados de exemplo da Northwind.

    3. Na janela Base de Dados, clique em Formulários em Objetos.

      Nota

      No Access 2007, clique no separador Criar e, em seguida, clique em Estrutura do Formulário no grupo Formulários .

    4. No painel direito, faça duplo clique em Criar formulário na vista Estrutura.

      Nota

      No Access 2007, ignore este passo.

    5. No menu Inserir , clique em Controlo ActiveX.

    Nota

    No Access 2007, clique no separador Estrutura e, em seguida, clique em Inserir Controlo ActiveX no grupo Controlos .

    1. Na caixa de diálogo Inserir Controlo ActiveX , clique para selecionar Controlo de Calendário 10.0 ou uma versão posterior na caixa de listagem Selecionar um Controlo ActiveX e, em seguida, clique em OK.

    2. Adicione um botão de comando ao formulário que tem as propriedades definidas da seguinte forma:

      Propriedade Valor
      Name testFD
      Caption Alterar Primeiro Dia
    3. No menu Ficheiro , clique em Guardar.

      Nota

      No Access 2007, clique no Botão do Microsoft Office e, em seguida, clique em Guardar.

    4. Na caixa de diálogo Guardar Como , escreva Formulário1 na caixa Nome do Formulário e, em seguida, clique em OK para guardar o formulário Form1.

    5. No menu Ver , clique em Código.

      Nota

      No Access 2007, clique no separador Estrutura e, em seguida, clique em Ver Código no grupo Ferramentas .

    6. No visual basic Revisor, escreva ou cole o seguinte código:

      Option Compare Database
      
      Private Sub testFD_Click()
          Calendar0.FirstDay = vbTuesday
      End Sub
      
    7. Abra o Formulário1 na vista Formulário.

    8. Clique no botão Alterar Primeiro Dia .

      Nota

      Se a primeira coluna do Controlo de Calendário não estiver definida como Terça-feira, tenha em atenção o dia na primeira coluna.

    9. No visual basic Revisor, clique em Janela Imediata no menu Ver.

    10. Na janela Imediato, escreva ?vbTuesday e, em seguida, prima ENTER.

      Repare no valor numérico.

    11. Repita o passo j através do passo o ao substituir vbTuesday por outras constantes intrínsecas do VBA, como vbMondaye vbWednesday.

      Tenha em atenção que terá a seguinte tabela para mostrar a associação entre os dias, as constantes intrínsecas do VBA e os valores numéricos associados aos valores diários corretos e constantes intrínsecas do VBA.

      Dia da Semana Constante Intrínseca VBA Valor Numérico Associado
      Segunda-feira vbSunday 1
      Terça-feira vbMonday 2
      Quarta-feira vbTuesday 3
      Quinta-feira vbWednesday 4
      Sexta-feira vbThursday 5
      Sábado vbFriday 6
      Domingo vbSaturday 7
  2. Crie uma enumeração personalizada global mapeada corretamente para os dias da semana. Para tal, siga estes passos:

    1. Na janela Base de Dados, clique em Módulo em Objetos.

      Nota

      No Access 2007, clique no separador Criar , clique na seta em Macro no grupo Outro e, em seguida, clique em Módulo.

    2. No menu Inserir, clique em Módulo.

      Nota

      No Access 2007, ignore este passo.

    3. Escreva ou cole o seguinte código no visual basic Revisor:

      Option Explicit
      
      Public Enum nwFirstDay
         nwMonday = 1
         nwTuesday = 2
         nwWednesday = 3
         nwThursday = 4
         nwFriday = 5
         nwSaturday = 6
         nwSunday = 7
      End Enum
      

      Nota

      Crie a enumeração conforme descrito na coluna "Dia da Semana" e na coluna "Valor Numérico Associado" correspondente da tabela que está no passo 1r.

    4. Dê o nome Day_Association Módulo e guarde-o.

    5. Feche o visual basic Revisor.

  3. Substitua as constantes intrínsecas do VBA na sua aplicação pelas constantes que estão na enumeração personalizada descrita no passo 2.

    Por exemplo, se o código original for

    Calendar0.FirstDay = vbTuesday
    

    modifique o código para utilizar a enumeração personalizada da seguinte forma:

    Calendar0.FirstDay = nwTuesday
    
  4. Execute a aplicação.

Mais Informações

As constantes intrínsecas do VBA não dependem das informações locais do sistema. Por exemplo, num computador que tenha o sistema operativo localizado no idioma alemão, o primeiro dia da semana é segunda-feira. O valor numérico associado à segunda-feira no computador é sempre 0.

Uma vez que o Controlo de Calendário 10.0 ou uma versão posterior é um controlo global do Microsoft ActiveX, não pode controlar os valores numéricos associados às constantes intrínsecas do VBA com base nas especificações do seu computador. Por conseguinte, ocorre o problema mencionado na secção "Sintomas" deste artigo.

Passos para reproduzir o problema

  1. Inicie o Access.

  2. Abra a base de dados de exemplo da Northwind.

  3. Na janela Base de Dados, clique em Formulários em Objetos.

    Nota

    No Access 2007, clique no separador Criar e, em seguida, clique em Estrutura do Formulário no grupo Formulários .

  4. No painel direito, faça duplo clique em Criar formulário na vista Estrutura.

    Nota

    No Access 2007, ignore este passo.

  5. No menu Inserir , clique em Controlo ActiveX.

    Nota

    No Access 2007, clique no separador Estrutura e, em seguida, clique em Inserir Controlo ActiveX no grupo Controlos .

  6. Na caixa de diálogo Inserir Controlo ActiveX , clique para selecionar Controlo de Calendário 10.0 ou uma versão posterior na caixa de listagem Selecionar um Controlo ActiveX e, em seguida, clique em OK.

  7. Adicione um botão de comando ao formulário que tem as propriedades definidas da seguinte forma:

    Propriedade Valor
    Name testFD
    Caption Alterar Primeiro Dia
  8. No menu Ver , clique em Código.

    Nota

    No Access 2007, clique no separador Estrutura e, em seguida, clique em Ver Código no grupo Ferramentas .

  9. No visual basic Revisor, escreva ou cole o seguinte código:

    Option Compare Database
    
    Private Sub testFD_Click()
     Calendar0.FirstDay = vbTuesday
    End Sub
    
  10. No menu Ficheiro , clique em Guardar.

    Nota

    No Access 2007, clique no Botão do Microsoft Office e, em seguida, clique em Guardar Como.

  11. Na caixa de diálogo Guardar Como , escreva Formulário1 na caixa Nome do Formulário e, em seguida, clique em OK para guardar o formulário Form1.

  12. Abra o Formulário1 na vista Formulário.

  13. Clique no botão Alterar Primeiro Dia .

    Apesar de definir a FirstDay propriedade do Controlo de Calendário como vbTuesday, o calendário seleciona Quarta-feira para ser o primeiro dia da semana.

Referências

Para obter mais informações sobre o Controlo de Calendário e as propriedades do Controlo de Calendário, abra Mscal.hlp e, em seguida, procure o tópico adequado. Mscal.hlp está localizado nas seguintes pastas:

Microsoft Access 2002

Unidade de Instalação: \Program Files\Microsoft Office\Office10

Microsoft Office Access 2003

Unidade de Instalação: \Program Files\Microsoft Office\Office11

Nota

A Unidade de Instalação é um marcador de posição para o nome da unidade de instalação.