Złośliwa zamiana tekstu na daty

przez | 2024-12-23

Jakiś czas temu pisałem dla klienta mini aplikację, która miała za zadanie prowadzenie ewidencji umów. W skrócie: gdy pracownik pozyskał klienta to wprowadzał do formularza dane. Następnie makro sprawdzało różne warunki, generowało różne raporty i wstawiało do arkusza odpowiednie dane.

Każdy pracownik miał swoją własną pulę numerów umów. Numer umowy miał następujący schemat:

Kolejny numer / akronim pracownika / rok

Akronimem pracownika były 3 pierwsze litery jego imienia. Przykładowo dla Karola pierwsza umowa w roku 2024 miała następujący numer:

1/KAR/2024

System sobie całkiem fajnie działał do czasu aż nie została zatrudniona Martyna. Dla niej umowa miała taki oto numer:

1/MAR/2024

Excel automatycznie ten numer umowy zamienił na datę 1 marzec 2024. A data to tak naprawdę liczba, czyli dla 1 marca 2024 do komórki została wstawiana liczba: 45352. I system zaczął się psuć z powodu mojego przeoczenia. Uproszczony kod odpowiedzialny za wstawianie numeru umowy wyglądał następująco:

Sub WstawNumerUmowy(Wiersz As Long, Kolumna As Long, Numer As Long, Akronim As String, Rok As Long)
    Dim NrUmowy As String
    'tutaj jeszcze były jakieś dodatkowe linijki kodu, które sprawdzają czy np. podany numer już nie został wcześniej użyty
    'albo czy nie ma "dziury" w numeracji itp.    
    NrUmowy = CStr(Numer) + "/" + Akronim + "/" + CStr(Rok)
    Cells(Wiersz, Kolumna).Value = NrUmowy
End Sub

Sub TestNrUmowy()
    Const KOLUMNA_NR_UMOWY = 5

    'Tu będzie OK
    Call WstawNumerUmowy(2, KOLUMNA_NR_UMOWY, 1, "KAR", 2024)

    'Zamieni na 01-mar-24 czyli 45352
    Call WstawNumerUmowy(3, KOLUMNA_NR_UMOWY, 1, "MAR", 2024)
End Sub

Co zrobić aby go naprawić? Otóż wystarczyło albo w danej kolumnie gdzie się wpisuje numery umów ustawić typ komórek jako Tekstowe. Dla bezpieczeństwa dodatkowo dodałem jedną linijkę kodu, która zmienia format komórki na tekstowy. Wystarczyło w procedurze WstawNumerUmowy przed linijką:

    Cells(Wiersz, Kolumna).Value = NrUmowy

Dodać

    Cells(Wiersz, Kolumna).NumberFormat = "@"

Jak widać – pisząc makra trzeba cały czas myśleć, czy gdzieś czegoś użytkownik nie może zepsuć i próbować temu zapobiegać.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.