Moje doświadczenia z Excelem, Accesem i programowaniem w VBA
niedziela, 19 marca 2017

Tylko do końca dnia 19 marca 2017 - dobre kursy komputerowe w bardzo obniżonych cenach:

Wiosenna wyprzedaż 

Warto zajrzeć.

wtorek, 21 lutego 2017

Przez ostatnich kilka lat współpracowałam z jednym z portali elearningowych. Publikowałam tam swoje autorskie szkolenia z VBA w Excelu. Niestety, kilka miesięcy temu portal zniknął z sieci, nawet nie udało mi się wyśledzić co się z nim stało. I tym sposobem pozostały mi materiały (nie wszystkie, ale sporo), które w tej chwili są zupełnie niewykorzystywane. Trochę mi ich szkoda - po małych przeróbkach można je wykorzystać, może się komuś przydadzą? A ponieważ większość z tych materiałów to filmiki, na swoim koncie YouTube założyłam kanał, gdzie będę je sukcesywnie publikować.

Na początek kurs "VBA dla początkujących" czyli kurs dla tych, którzy chcieliby zacząć swoją przygodę z VBA. Link jest tu:

VBA dla początkujących

Zapraszam do subskrypcji.

21:56, marzatela , VBA
Link Dodaj komentarz »

Wyobraźmy sobie arkusz Excela z kodem reagującym na zdarzenia arkusza. W zależności od tego, jaki jest to kod, jego wykonywanie bardzo łatwo może generować kolejne i zupełnie niepotrzebne zdarzenia arkusza.
Załóżmy, że mamy oprogramowane zdarzenie arkusza, które po zmianie wartości w komórce kolumny A w sąsiadującej z nią komórce kolumny B wstawia datę. Przykładowy kod takiej funkcji wygląda tak:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 1 Then
        Target.Offset(0, 1) = Date()
    End If
End Sub


 

 

 

W trakcie wykonywania kodu, po wstawieniu wartości w kolumnie B następuje wykrycie zdarzenia "przy zmianie" i następuje ponowne uruchomienie makra (mimo, że pierwsze nie doszło jeszcze do końca). W tym przypadku akurat może być praktycznie niezauważalne, ale jeżeli takich zmian jest więcej - owszem. W ekstremalnym przypadku może to doprowadzić do zapętlenia kodu.

Chcąc tego uniknąć musimy na czas wykonywania kodu po prostu wyłączyć obsługę wykrywania zdarzeń. Wykorzystujemy do tego właściwość obiektu Application - EnableEvants. Jest to właściwość typu Boolean czyli może przybierać wartość Prawda lub Fałsz. Ustawiamy ją tak:

Application.EnableEvents=False          'wyłączenie obsługi zdarzeń

Application.EnableEvents=True            'włączenie obsługi zdarzeń

Wykorzystując w kodzie makra jw. mamy więc:

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Column = 1 Then
   Application.EnableEvents = False
   Target.Offset(0, 1) = Date()
   Application.EnableEvents = False
 End If

End Sub


 

 

 

 

 

I już. Na czas wykonywania kodu obsługa zdarzeń jest wyłączona - wstawienie daty w komórce sąsiadującej nie wywoła w tym przypadku ponownej reakcji na zdarzenie.



wtorek, 17 stycznia 2017

Poprzednia notka na blogu poświęcona była dobrym praktykom przy tworzeniu aplikacji Access, tym razem kilka rad jakich zasad trzymać się przy pisaniu kodu VBA (czy to w Accessie czy w Excelu).

Na wszelki wypadek uprzedzam, że są to rady wynikające z moich własnych doświadczeń - stosuję je na co dzień i sprawdzają się. Generalnie jednak uważam, że nie ma jedynie słusznego sposobu tworzenia oprogramowania, choć pewne zasady powodują, że kod jest bardziej optymalny, a aplikacja działa szybciej i wydajniej.

  • na początku każdego modułu warto wstawić Option Explicit. Pozwoli to na zabezpieczenie przed literówkami w nazwach zmiennych i procedur;
  • żadnych polskich literek w nazwach funkcji, procedur czy zmiennych - tak jest naprawdę bezpieczniej i kod nie wysypie się przy uruchomieniu na komputerze z inną wersją językową;
  • ponieważ słowa kluczowe VBA są ściśle związane z językiem angielskim, nadając własne nazwy (procedur, funkcji, zmiennych) lepiej używać oznaczeń bardziej przypominających słowa polskie. Pozwoli to na łatwe wyłapanie w kodzie tych nazw, które sami zdefiniowaliśmy od tego, co jest zdefiniowane w bibliotekach VBA;
  • makra w aplikacjach Access lepiej napisać lub przekonwertować do kodu VBA - działają szybciej;
  • w aplikacjach Excel przy nagrywaniu makra najczęściej pojawiającym się obiektem jest Selection - modyfikujmy nagrany kod tak, aby tego uniknąć. Nie tylko spowalnia działanie, ale także często powoduje niepotrzebne miganie ekranu;
  • przy bardziej skomplikowanych aplikacjach warto podzielić kod na kilka różnych modułów i nadać im własne nazwy - odszukamy wówczas moduł z funkcjami, kodem wejściowym itp.
  • korzystajmy z obsługi błędów - to się zawsze sprawdza;
  • kompilujmy kod - od razu wyłapiemy jego błędy.

To takie podstawy. Ja wykorzystuję na co dzień i się sprawdzają.



 

Kurs Excel programowanie w VBA Kurs Access - programowanie w VBA

 

Excel 2013 i programowanie VBA

Tagi: aplikacja
12:21, marzatela , VBA
Link Dodaj komentarz »
wtorek, 03 stycznia 2017

Każdy tworzący aplikacje w Accessie ma swoje własne przyzwyczajenia i zasady tworzenia. Moim zdaniem nie ma jedynie słusznych rozwiązań, różne drogi prowadzą do tego samego celu. Owszem, są metody mniej lub bardziej optymalne, działające szybciej lub wolniej, ale najczęściej nawet nie widać różnicy, szczególnie przy prostych aplikacjach.

Ja też mam swoje przyzwyczajenia i sposoby tworzenia aplikacji - takie własne dobre praktyki. Może komuś się przyda?

  • nazwy tabel, kwerend i formularzy nie powinny mieć takich samych nazw. Wprawdzie od wersji chyba Access 2007 jest to możliwe, ale jeśli odwołujemy się do jakiegoś obiektu, lepiej wiedzieć czy chodzi tu o tabelę czy kwerendę. Jeśli mamy np. tabelę Spis - warto zapisać ja pod nazwą np.TbSpis, związaną z nią kwerendę - KwSpis, a formularz - FrSpis.
    W podobny sposób - wszystkie inne obiekty. W ten sposób na pewno się nie zgubimy, nawet gdy obiektów jest dużo;
  • żadnych polskich literek w nazwach obiektów i nazwach pól. Teoretycznie tu też nie ma zakazu, ale wszystkie te ogonki mogą być źródłem problemów. Polskie znaki diaktryczne można za to wpisywać w tytułach kolumn, pól itp. Efekt końcowy np. na formularzu będzie taki sam, a unikamy w ten sposób ewentualnych błędów przy uruchomieniu aplikacji na komputerze w innej wersji językowej;
  • nazwy obiektów, pól itd. lepiej gdy są jednowyrazowe. Czyli zamiast np. Marka samochodu można wykorzystać nazwę MarkaSamochodu - to metoda zapisu "na wielbłąda". Moim zdaniem dobrze się sprawdza;
  • wszystkie nieprzypisane formanty na formularzu (przyciski poleceń, pola kombi itp.) powinny mieć swoje własne nazwy mniej więcej opisujące ich zawartość. Zamiast Polecenie1, Polecenie2 ... lepiej stosować nazwy typu PolecenieWyjscie, PolecenieWydruk itp. Przy większej ilości formantów na pewno w ten sposób się nie pogubimy;
  • nie jest to regułą, ale przy wprowadzaniu danych bardzo często stosuję pusty, niezwiązany formularz. Przy wypełnianiu poszczególnych pól stosuję kontrolę poprawności danych, a dopiero później wprowadzam dane do tabeli/tabel kodem VBA.

To takie podstawy. Ja wykorzystuję na co dzień i się sprawdzają.


 

Kurs Access 2007 

 

Tagi: aplikacja
23:25, marzatela , Access
Link Dodaj komentarz »
wtorek, 20 grudnia 2016

Świąteczna promocja na aplikację do mailingu:

 

Szczegóły tu:

Aplikacja do mailingu


12:59, marzatela , Różne
Link Dodaj komentarz »
poniedziałek, 24 października 2016

Jak z poziomu kodu VBA (w Excelu lub Accessie) zmienić nazwy plików w określonym folderze? Służy do tego metoda (dość stara, ale ciągle użyteczna) Name .... As ....
Jej konstrukcja jest dość dziwna, liczy się skuteczność.o

Przykład kod z jej wykorzystaniem wygląda tak:

Public Sub ZmianaNazwy()
Dim StaraNazwa As String
Dim NowaNazwa As String
StaraNazwa = "C:\Wprawki\Obrazek.jpg"
NowaNazwa = "C:\Wprawki\Kwiatki.jpg"
Name StaraNazwa As NowaNazwa
End Sub

 

 

 

 

 

I już, nazwa pliku zapisanego na dysku została zmieniona - nie ma już pliku o nazwie Obrazek, jest za to Kwiatki. Warto zwrócić tu uwagę na to, że nie ulegają zmianie wartości przypisane do zmiennych, a jedynie nazwy plików.
Oczywiście, jeżeli plików jest więcej - robimy to w pętli.

Za pomocą tej metody można zmieniać nie tylko nazwy plików, ale również ich rozszerzenie. Jeżeli mamy na przykład pliki tekstowe z nietypowym rozszerzeniem (pochodzące np. z jakichś innych programów) np. *.abc - można też je zmienić np. na txt. W takim przypadku trzeba wyznaczyć nazwę podstawową pliku (wykorzystując funkcję InstrRev odszukującą położenie ostatniej kropki w nazwie pliku i zastępującą to, co po kropce - rozszerzeniem txt).

Moim zdaniem może mieć naprawdę szerokie zastosowanie.



 

Kurs Excel programowanie w VBA Kurs Access - programowanie w VBA

 

Excel 2013 i programowanie VBA

Tagi: metody VBA
23:15, marzatela , VBA
Link Dodaj komentarz »
wtorek, 18 października 2016

Gdy czasem zdarza się, że któraś z aplikacji pakietu Microsoft Office zaczyna "fiksować" - wystarczy "naprawić" jego instalację:

Naprawianie Excela

Pomaga na wiele problemów i jest szybkim i łatwym sposobem na ich rozwiązanie. Są jednak sytuacje, gdy pakiet Microsoft Office trzeba po prostu zainstalować na nowo.

Gdy laptop odmawia posłuszeństwa....

Mój pakiet Microsoft Office Professional nie jest wersją OEM, kupowałam klucz osobno, w wersji pudełkowej, choć bez płytki instalacyjnej - pobierałam go ze strony Microsoftu. Licencja na jeden komputer, ale ponieważ stary laptop mi padł (zresztą po wcześniejszej reinstalacji z recovery), więc nie przewidywałam problemów. Niestety, przy próbie aktywacji online okazało się, że jest to niemożliwe. Wyświetlił się komunikat, że liczba licencja dla tego produktu jest już wyczerpana, a bez rejestracji mogę korzystać przez 30 dni. Co zrobić w takiej sytuacji? Nawet Google nie podstawił zbyt wielu pomocnych odpowiedzi. Postanowiłam skorzystać z systemowego rozwiązania alternatywnego i przejść do rejestracji telefonicznej. Pełna obaw otworzyłam w Excelu stronę aktywacji telefonicznej, wybrałam kraj i pokazał mi się warszawski numer telefonu. Poniżej było 7 grup liter i cyfr. Zadzwoniłam. Przeszłam przez kolejne kroki wyboru (jeśli .... - wybierz ...., jeśli ..... , wybierz .....), aż trafiłam na moment umożliwiający wpisanie kolejnych grup widocznych na ekranie. Wstukałam je, przechodząc w ten sposób do następnego etapu. Znowu do wpisania kolejne grupy liter/cyfr, ale w drugą stronę - podawane przez lektora zestawy trzeba było wpisać w puste pola widoczne na ekranie komputera. Na koniec jeszcze kilka pytań dodatkowych (oczywiście też automatycznych) i już, aktywowałam Office'a.
Wygląda na to, że niepotrzebnie się bałam takiej formy aktywacji, poszło sprawnie, choć chwilę to trwało. Mam skłonność do literówek, więc na wszelki wypadek wszystko dokładnie sprawdzałam.
Nie mam możliwości sprawdzenia tego, ale zastanawiam się co stałoby się z Officem na moim poprzednim laptopie? Czy przeszedłby automatycznie do stanu bez aktywacji?


Microsoft Office
środa, 24 sierpnia 2016

Tworząc bardziej rozbudowane aplikacje w Excelu czy Accessie, często korzystamy z kilku różnych modułów. Z pewnością pozwala to na uporządkowanie procedur i funkcji. Ponieważ jednak część z nich może być wywoływana z innych modułów, konieczne będzie zadeklarowanie ich jako funkcji/procedur publicznych. Oznacza to jednak, że będą one także widoczne z poziomu skoroszytu - w okienku makr oraz w funkcjach użytkownika, co nie zawsze jest dobrym wyjściem. Gdy  zdecydujemy się na ich "ukrycie" czyli ustawimy jako procedury czy funkcje prywatne - będą one możliwe do wywołania tylko w obrębie modułu, w którym się znajdują.

W takiej sytuacji optymalnym wyjściem jest zadeklarowanie modułu jako prywatnego.

Opcje modułu


Robimy to poprzez wpisanie na początku modułu słów Option Private Module.
W ten sposób wszystkie funkcje i procedury publiczne w tym module będą możliwe do wywołania z poziomu kodu VBA (czyli wszystkich innych modułów), ale nie będą widoczne z skoroszytu czyli bez dostępu do edytora nie da się ich uruchomić.

Zasady te obowiązują zarówno VBA w Excelu, jak i Access.



 

 

Kurs Access - programowanie w VBA

Excel 2013 i programowanie VBA

czwartek, 18 sierpnia 2016

 Zarówno funkcje jak i procedury utworzone w kodzie VBA mogą mieć charakter prywatny jak i publiczny. Co to oznacza?

Funkcje (procedury) prywatne są widoczne tylko w obrębie modułu, w którym zostały umieszczone, nie można się do nich odwołać z innych modułów. Nie są także widoczne w okienku makr w skoroszycie czy na liście funkcji zdefiniowanych przez użytkownika.

W kodzie poprzedzone są słowem Private.

Private Function MojaFunkcja(Argument)

'.............

End Function

----------------------------------------------

Private Sub MojeMakro

'.............

End Sub




Funkcje (procedury) publiczne są dostępne i mogą być wywołane zarówno z innych modułów, jak i z poziomu skoroszytu (lista makr i lista funkcji zdefiniowanych przez użytkownika. 

W kodzie poprzedzone są słowem Public lub w ogóle nie mają oznaczenia - domyślną opcją jest charakter publiczny.

 Public Function MojaFunkcja(Argument)

'.............

End Function

----------------------------------------------

Sub MojeMakro

'.............

End Sub



 

Zasady te obowiązują w VBA zarówno w Excelu , jak i Accessie.



 



 

 

Kurs Excel programowanie w VBA

Excel 2016 i programowanie VBA

 
1 , 2 , 3 , 4 , 5 ... 36
| < Marzec 2017 > |
Pn Wt Śr Cz Pt So N
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    


Książki warte polecenia
zobacz szczegóły...


A tu oferta na dziś:





ministat liczniki.org



Napisz do mnie!