Controllo calendario Microsoft 10.0 e versioni successive usano un valore non corretto per la proprietà FirstDay

Numero KB originale: 826761

Nota

Questo articolo si applica a un file di database di Microsoft Access (con estensione .mdb) oppure a un file di database di Microsoft Access (con estensione .accdb). Richiede competenze di base per macro, codifica e interoperabilità.

Sintomi

In Microsoft Access viene visualizzato un giorno non corretto per il primo giorno del controllo calendario. Questo problema si verifica quando si inserisce un controllo calendario Microsoft 10.0 o versione successiva in una maschera o in un report e quindi si imposta la FirstDay proprietà di Controllo calendario usando costanti intrinseche di Microsoft Visual Basic, Applications Edition (VBA).

Ad esempio, si imposta la FirstDay proprietà del controllo Calendar su vbMonday o su vbTuesday. Quando si imposta la FirstDay proprietà del controllo Calendar su vbTuesday, il calendario usa mercoledì come primo giorno della settimana.

Nota

Quando si usano le versioni precedenti di Controllo calendario, è possibile impostare correttamente la FirstDay proprietà .

Causa

Questo problema si verifica perché le costanti intrinseche per i giorni definiti in Microsoft Visual Basic, ad esempio vbSunday e vbMonday, non sono associate al valore del giorno corretto.

Soluzione alternativa

Per aggirare questo problema, attenersi alla seguente procedura:

  1. Determinare l'associazione tra i giorni, le costanti intrinseche VBA e i valori numerici associati ai valori dei giorni corretti e alle costanti intrinseche VBA. A tal fine, attenersi alla seguente procedura:

    1. Avviare Access.

    2. Aprire il database di esempio Northwind.

    3. Nella finestra Database fare clic su Moduli in Oggetti.

      Nota

      In Access 2007 fare clic sulla scheda Crea e quindi su Progettazione modulo nel gruppo Moduli .

    4. Nel riquadro destro fare doppio clic su Crea modulo in visualizzazione Struttura.

      Nota

      In Access 2007 ignorare questo passaggio.

    5. Scegliere Controllo ActiveX dal menu Inserisci.

    Nota

    In Access 2007 fare clic sulla scheda Progettazione e quindi su Inserisci controllo ActiveX nel gruppo Controlli .

    1. Nella finestra di dialogo Inserisci controllo ActiveX fare clic per selezionare Controllo calendario 10.0 o versione successiva dalla casella di riepilogo Selezionare un controllo ActiveX e quindi fare clic su OK.

    2. Aggiungere un pulsante di comando al modulo con le proprietà impostate come indicato di seguito:

      Proprietà Valore
      Name testFD
      Caption Modifica primo giorno
    3. Scegliere Salva dal menu File.

      Nota

      In Access 2007 fare clic sul pulsante Microsoft Office e quindi su Salva.

    4. Nella finestra di dialogo Salva con nome digitare Form1 nella casella Nome modulo e quindi fare clic su OK per salvare il modulo Form1.

    5. Scegliere Codice dal menu Visualizza.

      Nota

      In Access 2007 fare clic sulla scheda Progettazione e quindi su Visualizza codice nel gruppo Strumenti .

    6. Nella Editor di Visual Basic digitare o incollare il codice seguente:

      Option Compare Database
      
      Private Sub testFD_Click()
          Calendar0.FirstDay = vbTuesday
      End Sub
      
    7. Aprire Form1 nella visualizzazione Maschera.

    8. Fare clic sul pulsante Cambia primo giorno .

      Nota

      Se la prima colonna del controllo Calendario non è impostata su Martedì, annotare il giorno nella prima colonna.

    9. Nella Editor di Visual Basic fare clic su Finestra immediata dal menu Visualizza.

    10. Nella finestra Immediata digitare ?vbTuesday e quindi premere INVIO.

      Si noti il valore numerico.

    11. Ripetere il passaggio j tramite il passaggio o sostituendo vbTuesday con altre costanti intrinseche VBA, ad esempio vbMondaye vbWednesday.

      Si noti che la tabella seguente mostra l'associazione tra i giorni, le costanti intrinseche VBA e i valori numerici associati ai valori dei giorni corretti e alle costanti intrinseche VBA.

      Giorno della settimana Costante intrinseca VBA Valore numerico associato
      Lunedì vbSunday 1
      Martedì vbMonday 2
      Mercoledì vbTuesday 3
      Giovedì vbWednesday 4
      Venerdì vbThursday 5
      Sabato vbFriday 6
      Domenica vbSaturday 7
  2. Creare un'enumerazione personalizzata globale mappata correttamente ai giorni della settimana. A tal fine, attenersi alla seguente procedura:

    1. Nella finestra Database fare clic su Modulo in Oggetti.

      Nota

      In Access 2007 fare clic sulla scheda Crea , fare clic sulla freccia sotto Macro nel gruppo Altro e quindi fare clic su Modulo.

    2. Nel menu Inserisci, fare clic su Modulo.

      Nota

      In Access 2007 ignorare questo passaggio.

    3. Digitare o incollare il codice seguente nella Editor di Visual Basic:

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

      Nota

      Creare l'enumerazione come descritto nella colonna "Week Day" e nella colonna corrispondente "Numeric Value Associated" della tabella nel passaggio 1r.

    4. Assegnare al modulo il nome Day_Association e salvarlo.

    5. Chiudere la Editor di Visual Basic.

  3. Sostituire le costanti intrinseche VBA nell'applicazione con le costanti incluse nell'enumerazione personalizzata descritta nel passaggio 2.

    Ad esempio, se il codice originale è

    Calendar0.FirstDay = vbTuesday
    

    Modificare il codice per usare l'enumerazione personalizzata come indicato di seguito:

    Calendar0.FirstDay = nwTuesday
    
  4. Eseguire l'applicazione.

Ulteriori informazioni

Le costanti intrinseche VBA non dipendono dalle informazioni locali del sistema. Ad esempio, in un computer con il sistema operativo localizzato in lingua tedesca, il primo giorno della settimana è lunedì. Il valore numerico associato a Lunedì nel computer è sempre 0.

Poiché Controllo calendario 10.0 o versione successiva è un controllo Microsoft ActiveX in tutto il mondo, non è possibile controllare i valori numerici associati alle costanti intrinseche VBA in base alle specifiche del computer. Pertanto, si verifica il problema menzionato nella sezione "Sintomi" di questo articolo.

Procedura per riprodurre il problema

  1. Avviare Access.

  2. Aprire il database di esempio Northwind.

  3. Nella finestra Database fare clic su Moduli in Oggetti.

    Nota

    In Access 2007 fare clic sulla scheda Crea e quindi su Progettazione modulo nel gruppo Moduli .

  4. Nel riquadro destro fare doppio clic su Crea modulo in visualizzazione Struttura.

    Nota

    In Access 2007 ignorare questo passaggio.

  5. Scegliere Controllo ActiveX dal menu Inserisci.

    Nota

    In Access 2007 fare clic sulla scheda Progettazione e quindi su Inserisci controllo ActiveX nel gruppo Controlli .

  6. Nella finestra di dialogo Inserisci controllo ActiveX fare clic per selezionare Controllo calendario 10.0 o versione successiva dalla casella di riepilogo Selezionare un controllo ActiveX e quindi fare clic su OK.

  7. Aggiungere un pulsante di comando al modulo con le proprietà impostate come indicato di seguito:

    Proprietà Valore
    Name testFD
    Caption Modifica primo giorno
  8. Scegliere Codice dal menu Visualizza.

    Nota

    In Access 2007 fare clic sulla scheda Progettazione e quindi su Visualizza codice nel gruppo Strumenti .

  9. Nella Editor di Visual Basic digitare o incollare il codice seguente:

    Option Compare Database
    
    Private Sub testFD_Click()
     Calendar0.FirstDay = vbTuesday
    End Sub
    
  10. Scegliere Salva dal menu File.

    Nota

    In Access 2007 fare clic sul pulsante Microsoft Office e quindi su Salva con nome.

  11. Nella finestra di dialogo Salva con nome digitare Form1 nella casella Nome modulo e quindi fare clic su OK per salvare il modulo Form1.

  12. Aprire Form1 nella visualizzazione Maschera.

  13. Fare clic sul pulsante Cambia primo giorno .

    Anche se si imposta la FirstDay proprietà del controllo Calendario su vbTuesday, il calendario seleziona Mercoledì come primo giorno della settimana.

Riferimenti

Per altre informazioni sulle proprietà Controllo calendario e Controllo calendario, aprire Mscal.hlp e quindi cercare l'argomento appropriato. Mscal.hlp si trova nelle cartelle seguenti:

Microsoft Access 2002

Unità di installazione: \Program Files\Microsoft Office\Office10

Microsoft Office Access 2003

Unità di installazione: \Program Files\Microsoft Office\Office11

Nota

Unità di installazione è un segnaposto per il nome dell'unità di installazione.