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.
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.
Uruchom dostęp.
Otwórz przykładową bazę danych northwind.
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 .
W okienku po prawej stronie kliknij dwukrotnie pozycję Utwórz formularz w widoku projektu.
Uwaga
W programie Access 2007 pomiń ten krok.
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 .
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.
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ń W menu Plik kliknij pozycję Zapisz.
Uwaga
W programie Access 2007 kliknij przycisk Pakietu Microsoft Office, a następnie kliknij przycisk Zapisz.
W oknie dialogowym Zapisz jako wpisz Formularz1 w polu Nazwa formularza , a następnie kliknij przycisk OK , aby zapisać formularz Form1.
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 .
W Redaktor Visual Basic wpisz lub wklej następujący kod:
Option Compare Database Private Sub testFD_Click() Calendar0.FirstDay = vbTuesday End Sub
Otwórz formularz Form1 w widoku Formularz.
Kliknij przycisk Zmień pierwszy dzień .
Uwaga
Jeśli pierwsza kolumna kontrolki kalendarza nie jest ustawiona na wtorek, zanotuj dzień w pierwszej kolumnie.
W Redaktor Visual Basic kliknij pozycję Okno natychmiastowe w menu Widok.
W oknie Natychmiastowe wpisz ?vbTuesday, a następnie naciśnij klawisz ENTER.
Zwróć uwagę na wartość liczbową.
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
Utwórz globalne niestandardowe wyliczenie, które jest poprawnie mapowane na dni tygodnia. Aby to zrobić, wykonaj następujące kroki.
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ł.
W menu Insert (Wstaw) kliknij polecenie Module (Moduł).
Uwaga
W programie Access 2007 pomiń ten krok.
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.
Nadaj modułowi nazwę Day_Association i zapisz go.
Zamknij Redaktor Visual Basic.
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
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
Uruchom dostęp.
Otwórz przykładową bazę danych northwind.
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 .
W okienku po prawej stronie kliknij dwukrotnie pozycję Utwórz formularz w widoku projektu.
Uwaga
W programie Access 2007 pomiń ten krok.
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 .
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.
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ń 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 .
W Redaktor Visual Basic wpisz lub wklej następujący kod:
Option Compare Database Private Sub testFD_Click() Calendar0.FirstDay = vbTuesday End Sub
W menu Plik kliknij pozycję Zapisz.
Uwaga
W programie Access 2007 kliknij przycisk Pakietu Microsoft Office, a następnie kliknij pozycję Zapisz jako.
W oknie dialogowym Zapisz jako wpisz Form1 w polu Nazwa formularza , a następnie kliknij przycisk OK , aby zapisać formularz Form1.
Otwórz formularz Form1 w widoku Formularz.
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.
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla