Jak ChatGPT może przyśpieszyć naukę programowania?

przez | 2025-03-01

Dość często korzystam z ChataGPT. Pisząc ChatGPT mam na myśli ogólnie pojęte LLMy (ChatGPT, Google Gemini, Copilot, Aria DeepSeek, czasem perplexity). Czasem ChatGPT nie potrafi mi pomóc pomimo kilku prób a tu nagle okazuje się, że np. Gemini od strzała podaje satysfakcjonujące mnie rozwiązanie.

Ogólnie LLMy można porównać do takiego stażysty pomocnika: napisze jakąś prostą funkcję, podpowie, jak zabrać się za rozwiązanie jakiegoś problemu. Albo np. napisze jakąś pętlę for, która porównuje każdy z każdym, poda wartość jakiejś stałej, poprawi deklarację funkcji API z 32 na 64 bity itp. Czasem jak poproszę to ładnie sformatuje jakiś kod.

Czytaj dalej

Jak używać zmiennych środowiskowych w ścieżkach do plików i folderów?

przez | 2025-02-17

Ostatnio spotkałem się z pewnym problemem. Otóż napisałem dla Excela prostą aplikację generującą mini raport. W ustawieniach arkusza podałem ścieżkę do folderu, w którym ma być zapisywany raport. I tutaj pojawia się mały problem – ponieważ pracuję na dwóch różnych komputerach to najwygodniej zapisać raport w folderze, który się synchronizuje. Dla mnie takim folderem jest folder w usłudze OneDrive. Ale aby nie było za łatwo, na dwóch różnych komputerach ścieżka do takiego folderu jest inna (np. na pierwszym komputerze mam c:\Users\Damian\OneDrive a na drugim c:\Users\Trener\OneDrive). No więc wpadłem na pomysł: zmienna środowiskowa %OneDrive% zawiera ścieżkę do folderu OneDrive. No więc wpisałem taki oto kod:

Sub TestOneDrive()
    Open "%onedrive%\1.txt" For Output As #1
    Print #1, "test"
    Close #1
End Sub
Czytaj dalej

Masowy import danych do tabeli w programie Access

przez | 2024-12-29

Niedawno pisałem dla klienta makro do generowania macierzy kompetencji. W skrócie: makro mieliło wiele różnych warunków i generowało ID pracowników którym kończyła się ważność różnego rodzaju uprawnień (np. niektóre szkolenia BHP są ważne tylko 2 lata). Makro wypluwało ID kilkuset pracowników, których trzeba było wysłać na szkolenie odnawiające dane kompetencje (tak naprawdę tego było więcej bo każdy pracownik miał około 20-30 różnych kompetencji, z których większość należy odnawiać). Chciałem owe dane dodać do tymczasowej tabeli. I pierwsza myśl jaka mi przyszła do głowy: zrobię jedno wielkie zapytanie INSERT INTO (wywoływanie kilkaset zapytań INSERT INTO dodających po jednym rekordzie nie jest zbyt optymalne). W MySQL zapytanie SQL wyglądałoby następująco (przykład mocno uproszczony):

INSERT INTO TestowaTabela(ID, Firstname, Lastname)
VALUES
    (1, 'a', 'a'),
    (2, 'b', 'b'),
    (3, 'c', 'c');

Niestety, ale Access nie posiada takiego bajeru. Ale wpadłem na inny pomysł: otóż mogę dane do importu zapisać w folderze tymczasowym w postaci pliku CSV a następnie kazać programowi Access zaimportować ten plik do nowo utworzonej tabeli.

Czytaj dalej

Niespodziewany błąd Overflow

przez | 2024-12-29

Niedawno pisałem pewne makro. Czasami makro się wykrzaczało gdyż wyskakiwał błąd Run-time error 6: Overflow.

Błąd ten oznacza, że chcę do zmiennej przypisać zbyt dużą liczbę. Przykładowo jeśli bym zadeklarował zmienną jako Byte (zmienna tego typu może przyjmować tylko wartości od 0 do 255) a próbował przypisać jej wartość 5 000 to wyskoczy wspomniany błąd. Jednak czasami ten błąd pojawia się zupełnie niespodziewanie. Przeanalizujmy taki oto kod:

Sub TestMnozenia()
    Dim Wynik As Long
    
    Wynik = 200 * 200
    
    MsgBox Wynik
End Sub

Efekt?

Skąd się bierze ten błąd? Otóż w VBA jeśli mamy proste mnożenie to VBA tak jakby wynik tego mnożenia „wkłada tak jakby do zmiennej typu Integer” a dopiero potem zawartość tej „tymczasowej zmiennej” przypisuje do mojej zmiennej Wynik, która jest typu Long.

Czytaj dalej

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:

Czytaj dalej

Jak usunąć informację, że plik został pobrany z Internetu?

przez | 2024-12-23

Jeśli pobieramy pliki z Internetu, to przeglądarka Internetowa zapisuje dodatkowy atrybut, że plik został pobrany z Internetu (dodatkowo gdy rozpakowujemy archiwum pobrane z Internetu to niektóre archiwizatory np. WinRAR, TotalCommander wszystkie rozpakowane pliki oznaczają jako pobrane z Internetu; aczkolwiek 7-zip nie dodaje tego atrybutu do rozpakowywanych plików). Mało tego takie oznaczenie stosuje też program Outlook gdy zapisujemy załącznik na dysku. Tutaj taka ciekawostka: ten atrybut jest zapisywany tylko na dyskach sformatowanych NTFS. Jeśli zapisujesz plik na nośniku sformatowanym w systemie FAT, FAT32, exFAT (np. pendrive są formatowane w tym systemie plików)

Czytaj dalej

Access – Dodawanie przycisków na wstążce

przez | 2024-12-01

W programie Access podobnie jak w przypadku Excela, Worda, PowerPointa czy Visio możemy tworzyć własne przyciski na wstążce.

Nie będę opisywał podstaw związanych z tworzeniem wstążki (składnia XMLa), dlatego jeśli nigdy nie miałeś do czynienia z wstążką zerknij do wpisu: Dodawanie przycisków do własnych funkcji na wstążce. Ten artykuł jest uzupełnieniem wyjaśniającym różnice pomiędzy tworzeniem wstążki dla Excela a Accessa.

Pliki dla nowego pakietu Office (Word, Excel, PP) to tak naprawdę archiwa ZIP zawierające kilka(naście) plików XML. Dodanie własnych przycisków na wstążce polegało tak naprawdę na wstrzyknięciu dodatkowego pliku XML (oraz ewentualnie plików z własnymi ikonami) do archiwum zawierającego opis wstążki (i dodanie odpowiedniej referencji do tego pliku). W przypadku programu Access pliki tworzone przez ten program nie są archiwami ZIP tylko plikami binarnymi. Dlatego też nie możemy do takiego pliku „dokleić” pliku XML zawierającego opis wstążki. Dlatego też należy wygenerować kod XML wstążki i zapisać go w specjalnej tabeli.

W tym celu utwórz nową tabelę i nazwij ją: USysRibbons. Następnie w tej tabeli należy utworzyć minimum 3 kolumny o następujących nazwach:

Czytaj dalej

Modyfikacja wstążki w MS Project

przez | 2024-11-30

Dodawanie własnych przycisków na wstążce w programie MS Project jest dużo trudniejsze niż w przypadku Worda, Excela czy PowerPointa.

Nie będę tutaj od podstaw opisywał jak się tworzy własne przyciski na wstążce, tylko wskażę różnice. Dlatego jeśli nie miałeś do czynienia z wstążką zapoznaj się z notką Dodawanie przycisków do własnych funkcji na wstążce.

Różnica nr #1: Niemożność skorzystania z programu Office RibbonX Editor lub Custom UI Editor form Microsoft Office.

Pliki dla nowego pakietu Office to tak naprawdę archiwa ZIP zawierające kilka(naście) plików XML. Dodanie własnych przycisków na wstążce polegało tak naprawdę na wstrzyknięciu dodatkowego pliku XML (oraz ewentualnie plików z własnymi ikonami) do archiwum zawierającego opis wstążki (i dodanie odpowiedniej referencji do tego pliku). W przypadku programu MS Project pliki tworzone przez ten program nie są archiwami ZIP tylko plikami binarnymi typu CFBF (Compound File Binary Format) czyli są to pliki takiego typu jak tworzone przez programy Word czy Excel sprzed wersji 2007.

Czytaj dalej

Ciekawe zmienne środowiskowe

przez | 2024-11-24

O zmiennych środowiskowych już na tym blogu parę razy przewinęło się jakieś drobne info. Przykładowo we wpisie Jak odczytać ścieżkę do folderu TEMP? Napisałem, że najprostszy sposób to odczytanie zmiennej środowiskowej TEMP (lub TMP)

Function GetTempPath() As String
    GetTempPath = Environ("TEMP")
End Function

Zmienne środowiskowe bardzo często się wykorzystuje pisząc skrypty wsadowe (pliki BAT). Z tym, że w przypadku plików wsadowych nazwa zmiennej środowiskowej jest poprzedzona i zakończona procentem np. %TEMP% Oto przykładowy plik wsadowy (plik z rozszerzeniem BAT) wyświetlający ścieżkę do folderu TEMP:

@echo off
echo Sciezka do folderu TEMP: %TEMP%
pause

A jakie mamy ciekawe zmienne środowiskowe? Okazuje się, że jest ich całkiem sporo.

Czytaj dalej