Kontrolka Kalendarz firmy Microsoft 10.0 i nowsze wersje używają nieprawidłowej wartości właściwości FirstDay

Oryginalny numer KB: 826761

Uwaga

Ten artykuł dotyczy pliku bazy danych programu Microsoft Access (.mdb) lub pliku bazy danych programu Microsoft Access (.accdb). Wymaga podstawowych umiejętności w zakresie makr, kodowania i współdziałania.

Symptomy

W programie Microsoft Access jest wyświetlany nieprawidłowy dzień dla pierwszego dnia kontrolki kalendarza. Ten problem występuje po wstawieniu kontrolki Kalendarz firmy Microsoft w wersji 10.0 lub nowszej do formularza lub raportu, a następnie ustawieniu FirstDay właściwości kontrolki Kalendarz przy użyciu stałych wewnętrznych programu Microsoft Visual Basic for Applications (VBA).

Na przykład właściwość kontrolki Kalendarz jest ustawiana FirstDay na wartość vbMonday lub vbTuesday. Po ustawieniu FirstDay właściwości Kontrolka kalendarza na wartość vbTuesday kalendarz używa środy jako pierwszego dnia tygodnia.

Uwaga

Jeśli używasz wcześniejszych wersji kontrolki kalendarza, możesz ustawić właściwość FirstDay poprawnie.

Przyczyna

Ten problem występuje, ponieważ stałe wewnętrzne dla dni zdefiniowanych w programie Microsoft Visual Basic, takie jak vbSunday i vbMonday, nie są skojarzone z prawidłową wartością dnia.

Obejście problemu

W celu obejścia tego problemu należy wykonać następujące czynności.

  1. Określ skojarzenie między dniami, stałymi wewnętrznymi VBA i wartościami liczbowymi skojarzonymi z prawidłowymi wartościami dnia i stałymi wewnętrznymi VBA. Aby to zrobić, wykonaj następujące kroki.

    1. Uruchom dostęp.

    2. Otwórz przykładową bazę danych northwind.

    3. W oknie Baza danych kliknij pozycję Formularze w obszarze Obiekty.

      Uwaga

      W programie Access 2007 kliknij kartę Utwórz , a następnie kliknij pozycję Projekt formularza w grupie Formularze .

    4. W okienku po prawej stronie kliknij dwukrotnie pozycję Utwórz formularz w widoku projektu.

      Uwaga

      W programie Access 2007 pomiń ten krok.

    5. W menu Wstaw kliknij pozycję Kontrolka ActiveX.

    Uwaga

    W programie Access 2007 kliknij kartę Projekt , a następnie kliknij pozycję Wstaw kontrolkę ActiveX w grupie Kontrolki .

    1. W oknie dialogowym Wstawianie kontrolki ActiveX kliknij, aby wybrać kontrolkę kalendarza 10.0 lub nowszą wersję z listy Wybierz kontrolkę ActiveX , a następnie kliknij przycisk OK.

    2. Dodaj przycisk polecenia do formularza z ustawionymi właściwościami w następujący sposób:

      Właściwość Value
      Name testFD
      Caption Zmień pierwszy dzień
    3. W menu Plik kliknij pozycję Zapisz.

      Uwaga

      W programie Access 2007 kliknij przycisk Pakietu Microsoft Office, a następnie kliknij przycisk Zapisz.

    4. W oknie dialogowym Zapisz jako wpisz Formularz1 w polu Nazwa formularza , a następnie kliknij przycisk OK , aby zapisać formularz Form1.

    5. W menu Widok kliknij pozycję Kod.

      Uwaga

      W programie Access 2007 kliknij kartę Projektowanie , a następnie kliknij pozycję Wyświetl kod w grupie Narzędzia .

    6. W Redaktor Visual Basic wpisz lub wklej następujący kod:

      Option Compare Database
      
      Private Sub testFD_Click()
          Calendar0.FirstDay = vbTuesday
      End Sub
      
    7. Otwórz formularz Form1 w widoku Formularz.

    8. Kliknij przycisk Zmień pierwszy dzień .

      Uwaga

      Jeśli pierwsza kolumna kontrolki kalendarza nie jest ustawiona na wtorek, zanotuj dzień w pierwszej kolumnie.

    9. W Redaktor Visual Basic kliknij pozycję Okno natychmiastowe w menu Widok.

    10. W oknie Natychmiastowe wpisz ?vbTuesday, a następnie naciśnij klawisz ENTER.

      Zwróć uwagę na wartość liczbową.

    11. Powtórz krok j przez krok o, zastępując vbTuesday innymi stałymi wewnętrznymi VBA, takimi jak vbMondayi vbWednesday.

      Zwróć uwagę, że w poniższej tabeli przedstawiono skojarzenie między dniami, stałymi wewnętrznymi VBA i wartościami liczbowymi skojarzonymi z prawidłowymi wartościami dnia i stałymi wewnętrznymi VBA.

      Dzień tygodnia Stała wewnętrzna VBA Skojarzona wartość liczbowa
      Poniedziałek vbSunday 1
      Wtorek vbMonday 2
      Środa vbTuesday 3
      Czwartek vbWednesday 4
      Piątek vbThursday 5
      Sobota vbFriday 6
      Niedziela vbSaturday 7
  2. Utwórz globalne niestandardowe wyliczenie, które jest poprawnie mapowane na dni tygodnia. Aby to zrobić, wykonaj następujące kroki.

    1. W oknie Baza danych kliknij pozycję Moduł w obszarze Obiekty.

      Uwaga

      W programie Access 2007 kliknij kartę Utwórz , kliknij strzałkę w obszarze Makro w grupie Inne , a następnie kliknij pozycję Moduł.

    2. W menu Insert (Wstaw) kliknij polecenie Module (Moduł).

      Uwaga

      W programie Access 2007 pomiń ten krok.

    3. Wpisz lub wklej następujący kod w Redaktor Visual Basic:

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

      Uwaga

      Utwórz wyliczenie zgodnie z opisem w kolumnie "Dzień tygodnia" i w odpowiedniej kolumnie "Skojarzona wartość liczbowa" tabeli w kroku 1r.

    4. Nadaj modułowi nazwę Day_Association i zapisz go.

    5. Zamknij Redaktor Visual Basic.

  3. Zastąp stałe wewnętrzne VBA w aplikacji stałymi znajdującymi się w wyliczeniu niestandardowym opisanym w kroku 2.

    Jeśli na przykład oryginalny kod jest

    Calendar0.FirstDay = vbTuesday
    

    Zmodyfikuj kod, aby używał wyliczenia niestandardowego w następujący sposób:

    Calendar0.FirstDay = nwTuesday
    
  4. Uruchom aplikację.

Więcej informacji

Stałe wewnętrzne usługi VBA nie zależą od informacji lokalnych systemu. Na przykład na komputerze z zlokalizowanym systemem operacyjnym w języku niemieckim pierwszym dniem tygodnia jest poniedziałek. Wartość liczbowa skojarzona z poniedziałkiem na komputerze jest zawsze równa 0.

Ponieważ kontrolka kalendarza w wersji 10.0 lub nowszej jest kontrolką Microsoft ActiveX na całym świecie, nie można kontrolować wartości liczbowych skojarzonych ze stałymi wewnętrznymi VBA na podstawie specyfikacji komputera. W związku z tym występuje problem wymieniony w sekcji "Objawy" tego artykułu.

Kroki prowadzące do odtworzenia problemu

  1. Uruchom dostęp.

  2. Otwórz przykładową bazę danych northwind.

  3. W oknie Baza danych kliknij pozycję Formularze w obszarze Obiekty.

    Uwaga

    W programie Access 2007 kliknij kartę Utwórz , a następnie kliknij pozycję Projekt formularza w grupie Formularze .

  4. W okienku po prawej stronie kliknij dwukrotnie pozycję Utwórz formularz w widoku projektu.

    Uwaga

    W programie Access 2007 pomiń ten krok.

  5. W menu Wstaw kliknij pozycję Kontrolka ActiveX.

    Uwaga

    W programie Access 2007 kliknij kartę Projekt , a następnie kliknij pozycję Wstaw kontrolkę ActiveX w grupie Kontrolki .

  6. W oknie dialogowym Wstawianie kontrolki ActiveX kliknij, aby wybrać kontrolkę kalendarza 10.0 lub nowszą wersję z listy Wybierz kontrolkę ActiveX , a następnie kliknij przycisk OK.

  7. Dodaj przycisk polecenia do formularza z ustawionymi właściwościami w następujący sposób:

    Właściwość Value
    Name testFD
    Caption Zmień pierwszy dzień
  8. W menu Widok kliknij pozycję Kod.

    Uwaga

    W programie Access 2007 kliknij kartę Projektowanie , a następnie kliknij pozycję Wyświetl kod w grupie Narzędzia .

  9. W Redaktor Visual Basic wpisz lub wklej następujący kod:

    Option Compare Database
    
    Private Sub testFD_Click()
     Calendar0.FirstDay = vbTuesday
    End Sub
    
  10. W menu Plik kliknij pozycję Zapisz.

    Uwaga

    W programie Access 2007 kliknij przycisk Pakietu Microsoft Office, a następnie kliknij pozycję Zapisz jako.

  11. W oknie dialogowym Zapisz jako wpisz Form1 w polu Nazwa formularza , a następnie kliknij przycisk OK , aby zapisać formularz Form1.

  12. Otwórz formularz Form1 w widoku Formularz.

  13. Kliknij przycisk Zmień pierwszy dzień .

    Mimo że właściwość kontrolki kalendarza została ustawiona FirstDay na wartość vbTuesday, kalendarz wybiera pozycję Środa jako pierwszy dzień tygodnia.

Informacje

Aby uzyskać więcej informacji na temat kontrolki kalendarza i właściwości kontrolki kalendarza, otwórz plik Mscal.hlp, a następnie wyszukaj odpowiedni temat. Plik Mscal.hlp znajduje się w następujących folderach:

Microsoft Access 2002

Dysk instalacyjny: \Program Files\Microsoft Office\Office10

Microsoft Office Access 2003

Dysk instalacyjny: \Program Files\Microsoft Office\Office11

Uwaga

Dysk instalacyjny jest symbolem zastępczym nazwy dysku instalacyjnego.