Microsoft Calendar Control 10.0 i nowsze wersje używają niepoprawnej wartości właściwości FirstDay

Uwaga

Nazwa usługi Office 365 ProPlus została zmieniona na Aplikacje usługi Microsoft 365 dla przedsiębiorstw. Aby uzyskać więcej informacji na temat tej zmiany, przeczytaj ten wpis w blogu.

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 makro, kodowania i interoperacyjności.

Symptomy

W programie Microsoft Access jest wyświetlany niepoprawny dzień dla pierwszego dnia kontroli kalendarza. Ten problem występuje podczas wstawiania formantu kalendarza firmy Microsoft 10.0 lub nowszej wersji do formularza lub do raportu, a następnie ustawiasz FirstDay właściwość formantu kalendarza przy użyciu stałych wewnętrznych języka Microsoft Visual Basic for Applications (VBA).

Na przykład można ustawić FirstDay właściwość kontrolki kalendarza na vbMonday lub vbTuesday. Po ustawieniu FirstDay właściwości ciśniętykości kalendarza na vbTuesday, kalendarz używa środa jako pierwszy dzień tygodnia.

Uwaga

Korzystając z wcześniejszych wersji calendar control, można ustawić FirstDay właściwość poprawnie.

Przyczyna

Ten problem występuje, ponieważ wewnętrzne stałe dla dni, które są zdefiniowane w programie Microsoft Visual Basic, takich jak vbSunday i vbMonday, nie są skojarzone z poprawną wartością dnia.

Obejście problemu

Aby obejść ten problem, wykonaj następujące kroki:

  1. Należy określić skojarzenie między dniami, stałymi wewnętrznego VBA i wartościami liczbowymi, które są skojarzone z prawidłowymi wartościami dnia i stałymi wewnętrznego VBA. W tym celu wykonaj następujące czynności:

    1. Rozpocznij 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ę Tworzenie, a następnie kliknij pozycję Projektowanie formularzy w grupie Formularze.

    4. W prawym okienku kliknij dwukrotnie pozycję Utwórz formularz w widoku Projekt.

      Uwaga

      W programie Access 2007 pomiń ten krok.

    5. W menu Wstaw kliknij polecenie ActiveX Control.

    Uwaga

    W programie Access 2007 kliknij kartę Projektowanie, a następnie kliknij pozycję Wstaw formant ActiveX w grupie Formanty.

    1. W oknie dialogowym Wstawianie formantu ActiveX kliknij, aby wybrać pozycję Formant kalendarza 10.0 lub nowszą wersję z pola listy Wybierz formant ActiveX, a następnie kliknij przycisk OK.

    2. Dodaj przycisk polecenia do formularza, który ma ustawione właściwości w następujący sposób:

      Właściwość Wartość
      Name testFD
      Caption Zmień pierwszy dzień
    3. W menu Plik kliknij polecenie Zapisz.

      Uwaga

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

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

    5. W menu Widok kliknij polecenie Kod.

      Uwaga

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

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

      Option Compare Database
      
      Private Sub testFD_Click()
          Calendar0.FirstDay = vbTuesday
      End Sub
      
    7. Otwórz formę1 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 Edytorze Visual Basic kliknij polecenie Okno natychmiastowe w menu Widok.

    10. W oknie Natychmiastowy wpisz polecenie ?vbWesday, 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ętrzną VBA, takimi jak vbMondayi vbWednesday.

      Należy zauważyć, że w poniższej tabeli zostanie wyświetlone skojarzenia między dniami, stałymi wewnętrznego VBA i wartościami liczbowymi, które są skojarzone z prawidłowymi wartościami dnia i stałymi wewnętrznego VBA.

      Dzień tygodnia VBA Stała wewnętrzna Skojarzona wartość liczbowa
      Poniedziałek vbNiedziela 1
      Wtorek vbMonday (vbMonday) 2
      Środa vbTuesday (w dniu vbTuesday) 3
      Czwartek vbWednesday 4
      Piątek VbThursday (Wtorek) 5
      Sobota VbFriday (Piątek) 6
      Niedziela vbSaturday 7
  2. Utwórz globalne niestandardowe wyliczenie, które jest poprawnie mapowane na dni tygodnia. W tym celu wykonaj następujące czynności:

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

      Uwaga

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

    2. W menu Wstaw kliknij polecenie Moduł.

      Uwaga

      W programie Access 2007 pomiń ten krok.

    3. Wpisz lub wklej następujący kod w Edytorze 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 "Wartość liczbowa skojarzona" tabeli, która znajduje się w kroku 1r.

    4. Nazwij moduł Day_Associationi zapisz go.

    5. Zamknij Edytor Visual Basic.

  3. Zastąp stałe wewnętrzne VBA w aplikacji stałymi, które znajdują się w niestandardowym wyliczeniu, które jest opisane w kroku 2.

    Na przykład, jeśli oryginalny kod jest

    Calendar0.FirstDay = vbTuesday
    

    zmodyfikuj kod, aby użyć niestandardowego wyliczenia w następujący sposób:

    Calendar0.FirstDay = nwTuesday
    
  4. Uruchom aplikację.

Więcej informacji

Wewnętrzne stałe VBA nie zależą od lokalnych informacji systemowych. Na przykład na komputerze, który ma zlokalizowany system operacyjny w języku niemieckim, pierwszym dniem tygodnia jest poniedziałek. Wartość liczbowa skojarzona z poniedziałkiem na komputerze jest zawsze 0.

Ponieważ Calendar Control 10.0 lub nowsza wersja jest ogólnoświatowym formancie Microsoft ActiveX, nie można kontrolować wartości liczbowych skojarzonych ze stałymi wewnętrznego VBA na podstawie specyfikacji komputera. W związku z tym występuje problem, który jest wymieniony w sekcji "Symptomy" w tym artykule.

Kroki, aby odtworzyć problem

  1. Rozpocznij 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ę Tworzenie, a następnie kliknij pozycję Projektowanie formularzy w grupie Formularze.

  4. W prawym okienku kliknij dwukrotnie pozycję Utwórz formularz w widoku Projekt.

    Uwaga

    W programie Access 2007 pomiń ten krok.

  5. W menu Wstaw kliknij polecenie ActiveX Control.

    Uwaga

    W programie Access 2007 kliknij kartę Projektowanie, a następnie kliknij pozycję Wstaw formant ActiveX w grupie Formanty.

  6. W oknie dialogowym Wstawianie formantu ActiveX kliknij, aby wybrać pozycję Formant kalendarza 10.0 lub nowszą wersję z pola listy Wybierz formant ActiveX, a następnie kliknij przycisk OK.

  7. Dodaj przycisk polecenia do formularza, który ma ustawione właściwości w następujący sposób:

    Właściwość Wartość
    Name testFD
    Caption Zmień pierwszy dzień
  8. W menu Widok kliknij polecenie Kod.

    Uwaga

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

  9. W Edytorze 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 polecenie Zapisz.

    Uwaga

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

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

  12. Otwórz formę1 w widoku Formularz.

  13. Kliknij przycisk Zmień pierwszy dzień.

    Chociaż FirstDay właściwość kontrolki kalendarza została ustawiona na vbTuesday, kalendarz wybiera środę jako pierwszy dzień tygodnia.

Odwołania

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

Program Microsoft Access 2002

Napęd instalacyjny:\Program Files\Microsoft Office\Office10

Program Microsoft Office Access 2003

Napęd instalacyjny:\Program Files\Microsoft Office\Office11

Uwaga

Dysk instalacyjny jest symbolem zastępczym nazwy dysku instalacyjnego.