Akademia VBA

czyli jak uzyskać władzę nad światem … danych

Deklaracja zmiennych

Kategorie: Office VBA,Ogólne,Podstawy VBA — Dariusz Kolasa o 16:23, 6 Lip 2012

Dla początkujących użytkowników VBA nieodmiennie zagadką jest deklarowanie zmiennych. Po pierwsze w ogóle nie wiadomo po co to pisać, skoro bez tego i tak działa, a po drugie nazwy typów zmiennych nie brzmią zbyt przyjaźnie.
Niestety brak stosowania i rozumienia deklaracji jest głównym powodem błędów, literówek, spowolnienia działania kodu i niewygody jego pisania. Temat nie jest bardzo prosty, ale bardzo ważny. Tu krótko wymienię zalety rozumienia i stosowania właściwych deklaracji:

  • Kod działa nawet do 4 razy szybciej
  • Łatwiej pisać kod bo zmienne zadeklarowane są wspomagane przez technologię podpowiadania słów kluczowych – Intellisense
  • Unikamy literówek
  • Piszemy kod wysokiej jakości pozwalający na szybsze wychwytywanie błędów – np niezgodność typu co przy przeoczeniu może prowadzić do negatywnych konsekwencji
  • Poprawiamy czytelność kodu

Problem polega na tym, że ta wiedza przychodzi z czasem, a tego jak zwykle wszystkim brakuje …

Test wtyczki do automatycznej publikacji WP -> FB

Kategorie: Ogólne — Dariusz Kolasa o 12:19, 10 Kwi 2012

Jako, że blog Akademia-VBA.pl stoi na WordPressie to myślę, że czasem mogę i o tych doświadczeniach coś napisać. Właśnie testuję wtyczkę Add Link to Facebook i jeżeli to czytacie na FB to znaczy, że działa :)
Instalacja wtyczki nie jest specjalnie prosta bo trzeba sobie najpierw utworzyć aplikację na FB i coś tam powpisywać, ale jak ja dałem radę, to chyba inni też sobie poradzą ;)
Ale np ostatniego wpisu już nie udało mi się automatycznie zaktualizować :(
Dostałem komunikat błędu:
…Get me: Error validating access token: Session has expired at unix time…

Aby rozwiązać problem należy ponownie wejść do ustawień wtyczki i ponownie wcisnąć przycisk Autoryzuj i ponownie opublikować post :)

Żądanie potwierdzenia wykonania operacji

Kategorie: Ogólne,Uniwersalne VBA — Dariusz Kolasa o 21:00, 13 Lip 2010

Czasem, przy operacjach potencjalnie niebezpiecznych, np usuwanie i nadpisywanie plików czy usuwanie danych z bazy powinniśmy dodatkowo zażądać potwierdzenia wykonania operacji, aby nie było możliwe przypadkowe jej wykonanie. Idealnym rozwiązaniem tego będzie poniższa funkcja:

Function fnBrakPotwierdzenia(Pytanie As String) As Boolean
    Dim Odp As Long
    Odp = MsgBox(Pytanie, vbYesNo + vbCritical + vbDefaultButton2, "UWAGA!")
    If Odp = vbNo Then fnBrakPotwierdzenia = True
End Function

Jej użycie będzie wyglądało np tak:

Sub Glowna()
    If fnBrakPotwierdzenia("Czy na pewno...?") Then Exit Sub
    'tu wywołanie procedury niebezpiecznej
End Sub

Zabezpieczenia makr, poziomy zabezpieczeń

Kategorie: Excel VBA,Office VBA,Ogólne,Podstawy VBA — Dariusz Kolasa o 15:58, 4 Lip 2010

Na szczęście makrowirusy nie są ostatnio bardzo popularne, ale proszę zawsze uważać, lepiej dmuchać na zimne. Poziom zabezpieczeń ustawiamy z menu – Narzędzia – Makro – Zabezpieczenia.

Nie wolno ustawiać niskiego poziomu zabezpieczeń, ponieważ wtedy każdy uruchomiony plik zawierający makro, będzie mógł je bez pytania uruchomić. W większości przypadków należy użyć średniego poziomu zabezpieczeń, który gwarantuje zadanie pytania czy włączyć makra, przy uruchamianiu pliku. Proszę się dobrze zastanowić przed odpowiedzią na to pytanie!

Nigdy nie należy włączać makr w obcym nieznanym pliku!

Zabezpieczenia wysokie i bardzo wysokie stosujemy tylko gdy mamy wykupiony certyfikat bezpieczeństwa do projektu VBA co się raczej rzadko zdarza

Jak skorzystać z kodu VBA znalezionego w Internecie

Kategorie: Excel VBA,Ogólne,Podstawy VBA — Dariusz Kolasa o 15:12, 4 Lip 2010

Dla początkujących może być to poważny problem. Przede wszystkim trzeba ocenić czy przypadkiem kod nie jest szkodliwy. Na szczęście w przypadku kodu VBA jest to bardzo rzadko spotykane. Po drugie trzeba rozróżnić czy jest to kod do umieszczenia w module publicznym, czy prywatnym module formularza, raportu, skoroszytu czy arkusza.

Moduł publiczny wstawiamy z menu Instert – Module (wcześniej Alt-F11 aby otworzyć edytor VBA). Tu wklejamy funkcje, które mają być dostępne z poziomu funkcji użytkownika w Excelu czy też w każdej kwerendzie, raporcie czy formularzu w Accessie (np wrzucamy tu funkcję Slownie, jeżeli chcemy aby była powszechnie dostępna w całej bazie)

Moduł prywatny zawsze związany jest z jakimś obiektem. Tylko tu możemy umieścić kod automatycznie wykonujący się z powodu zdarzeń generowanych przez użytkownika takich jak otwarcie czy zamknięcie dokumentu, lub kliknięcie w przycisk. Jeżeli widzimy kod bezpośrednio odwołujący się do kontrolek na formularzu, jak np poniższe dwie procedury:

Private Sub UserForm_Initialize()
 
    przyciskUruchom.Enabled = False
    listaFunkcji.AddItem "Funkcja1"
    listaFunkcji.AddItem "Funkcja2"
 
End Sub
 
Private Sub listaFunkcji_Click()
    przyciskUruchom.Enabled = True
End Sub

to znaczy, że aby przetestować taki kod trzeba: po pierwsze trzeba utworzyć formularz, po drugie umieścić na nim pole listy i przycisk a po trzecie odpowiednio je ponazywać (właściwość Name kontrolki). Efektem powyższych procedur jest początkowe wyłączenie przycisku i załadowanie pola listy. Następnie gdy użytkownik kliknie coś na liście, przycisk zostanie włączony.

Jak generować niepowtarzalne nazwy plików, tabel, arkuszy i innych obiektów

Kategorie: Ogólne,Uniwersalne VBA — Dariusz Kolasa o 13:37, 27 Cze 2010

Generując automatycznie raporty w Excelu, dokumenty w Wordzie czy też tabele w Accessie, moglibyśmy niechcący nadpisać poprzednie wersje. Aby tego uniknąć nadamy im niepowtarzalne nazwy. Pomocna tu będzie znakomita funkcja Format(wyrażenie, string_formatujący). Warto poczytać o niej w helpie. Na jej podstawie zbudujemy własną funkcję:

Function fnStempelCzasowy() As String
fnStempelCzasowy = Format(Now(), "_yyyymmdd_hhmmss")
End Function

Jak bezpiecznie wyłączyć komunikaty ostrzegawcze w Excelu

Kategorie: Excel VBA,Ogólne — Dariusz Kolasa o 22:34, 15 Cze 2010

Z wyłączeniem komunikatów ostrzegawczych nie ma problemu. Jest to właściwość logiczna Excela. Problemem jest fakt, że pozostawienie wyłączonych komunikatów ostrzegawczych jest bardzo niebezpieczne przy późniejszej normalnej pracy użytkownika. Poniżej przykład procedury, gdzie na pewno zawsze nastąpi przywrócenie komunikatów, nawet gdy wystąpi błąd w procedurze. Jest to możliwe przy użyciu poprawnej obsługi błędów.

Private Sub UsunBiezacyArkuszBezOstrzezenia()
 
    On Error GoTo Obsluga
 
    'wyłącz komunikaty ostrzegawcze
    Application.DisplayAlerts = False 
 
    ActiveSheet.Delete
 
Czyszczenie:
    On Error Resume Next
    Application.DisplayAlerts = True 'przywróć komunikaty
    Exit Sub
 
Obsluga:
    MsgBox Err & ". " & Err.Description
    Resume Czyszczenie
 
End Sub

Co to znaczy: Wymaga referencji do Microsoft Office XX Object Library

Kategorie: Edytor VBA,Ogólne,Podstawy VBA — Dariusz Kolasa o 21:39, 14 Cze 2010

Oznacza to, że w edytorze VBA należy uruchomić okienko do dodawania referencji do bibliotek obiektowych (Tools – References), znaleźć bibliotekę Microsoft Office XX Object Library (gdzie XX to nr Twojego Office’a, np 14.0) i wstawić przy niej ptaszek

« Późniejsze wpisy