Moje doświadczenia z Excelem, Accesem i programowaniem w VBA

Wpisy z tagiem: procedura

ś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

wtorek, 10 września 2013

W komentarzach do jednej ze starszych notek:

Odczyt i porównanie wartości komórek z wielu plików

pojawił się problem z odświeżaniem łączy w pliku. Wprawdzie na podstawie przekazanych mi informacji nie wiem, co może być tego przyczyną, ale odpowiadając na prośbę czytelnika - zamieszczam makro otwierające i od razu zamykające wszystkie pliki z danego katalogu.
Na pewno odświeży to wartości we wszystkich powiązanych komórkach. Adres katalogu jest pobierany z komórki A1 aktywnego arkusza. Otwieranie i zamykanie kolejnych plików odbywa się w tle - na czas wykonywania makra wyłączone jest odświeżanie ekranu.

Public Sub OtworzPliki()

Dim Katalog As String
Dim NazwaPliku As String
Application.ScreenUpdating = False
Katalog = Range("A1").Value
If Right(Katalog, 1) <> "\" Then Katalog = Katalog & "\"
NazwaPliku = Dir(Katalog & "*.xls*")
Do While NazwaPliku <> ""
Workbooks.Open Filename:=Katalog & NazwaPliku, ReadOnly:=True
ActiveWindow.Close savechanges:=False
NazwaPliku = Dir
Loop
Application.ScreenUpdating = True
End Sub

Mam nadzieję, ze teraz będzie działać.

 


 

 

 

 

 

 

 

Kurs Excel programowanie w VBA



czwartek, 06 września 2012

Zeszyt makr osobistych to taki skoroszyt Excela, w którym można zapisać funkcje i makra uniwersalne czyli dostępne w dowolnym skoroszycie. Taki zeszyt makr osobistych ma nazwę Personal.xlsb i jest otwierany w tle, w sposób ukryty. Pod warunkiem, że wcześniej go aktywujemy...

Aktywację skoroszytu makr osobistych wykonujemy raz. Wystarczy nagrać proste makro, zapisując je właśnie w zeszycie makr osobistych.

skoroszyt makr osobistych

Wystarczy to zrobić raz i od tej pory każde wejście do Excela będzie jednoznaczne z załadowaniem tego skoroszytu. Wprawdzie będzie to to tylko w tle, ale makra i funkcje będą do dyspozycji.

Samo wejście do skoroszytu - w tym do edycji modułów wykonujemy przez wstęgę Widok --> Odkryj:

skoroszyt makr osobistych


W nowym oknie wystarczy zaznaczyć skoroszyt Personal. 

skoroszyt makr osobistych

Po wejściu do arkusza można w normalny sposób przejść do edycji czy dopisywania makr w kodzie VBA.


czwartek, 07 kwietnia 2011

Obliczanie pierwiastków równania kwadratowego to jedno z najczęściej spotykanych zadań matematycznych i to na różnych poziomach edukacji. Jak je wyznaczyć bezpośrednio w arkuszu Excela pisałam tu:

 Pierwiastki rzeczywiste równania kwadratowego

 Pierwiastki zespolone równania kwadratowego

Jak to zrobić w VBA? Można np.tak:

Private Function ObliczPierwiastki(a, b, c)
Dim Delta
Dim PierwiastekzDelty
Dim X0
Dim X1
Dim X2
Dim Xr
Dim Xu

Delta = b ^ 2 - 4 * a * c
If Delta = 0 Then                'Równanie ma jedno rozwiązanie            
    X0 = -b / (2 * a)
    Range("a4").Value = "X0= " & X0
    Range("a5").Value = ""
End If
If
Delta > 0 Then                'Równanie ma dwa rozwiązania rzeczywiste
    PierwiastekzDelty = Sqr(Delta)
    X1 = (-b - PierwiastekzDelty) / (2 * a)
    X2 = (-b + PierwiastekzDelty) / (2 * a)
    Range("a4").Value = "X1= " & X1
    Range("a5").Value = "X2= " & X2
End If
If
Delta < 0 Then                'Równanie ma dwa rozwiązania zespolone

    PierwiastekzDelty = Sqr(-Delta)
    Xr = -b / (2 * a)
    Xu = Abs(PierwiastekzDelty / (2 * a))
    Range("a4").Value = "X1= " & Xr & " +j " & Xu
    Range("a5").Value = "X2= " & Xr & " -j " & Xu
End If
End Function

Funkcja ma charakter uniwersalny tzn. oblicza zarówno pierwiastki rzeczywiste jak i urojone równania. Oczywiście liczby zespolone nie są standardem nauczania. W wersji uproszczonej można jednak bez problemu dla warunku Δ<0 wpisać odpowiedź "brak pierwiastków".

Funkcja jest przypisana do modułu arkusza i zapisuje wyniki w konkretnych komórkach tego arkusza.

pierwiastki równania kwadratowego

Istotny jest też tu fakt, że funkcja ta przypomina bardziej makro wykonywalne niż funkcje VBA. Do jej uruchomienia potrzebne jest jakieś zdarzenie. Moim zdaniem - najprościej można tu użyć  jakiegoś zdarzenia arkusza lub skoroszytu. Można też oczywiście zmodyfikować kod, aby uzyskać klasyczną funkcję zwracajaca wynik (np. czy Δ jest ujemna, dodatnia czy równa 0), a wartości pierwiastków wpisywać w odniesieniu względnym do jakiejś komórki).
To już jednak pole do popisu dla włąsnej kreatywności każdego z czytających te słowa.

wtorek, 12 października 2010

Człowiek ze swojej natury jest leniwy. Na szczęście - inaczej koło byłoby do dziś nieznanym wynalazkiem. Idąc tym tropem - spróbujmy zautomatyzować skoroszyt Excela. O tym, jak dopisać makro do przycisku - pisałam tu:
Przycisk makra
Teraz pora zastanowić się nad przypisaniem makra do typowych zdarzeń skoroszytu czy arkusza.

W oknie projektu VBA sprawdzamy jakie mamy możliwości. Wybierając po lewej stronie skoroszyt (ThisWorkbook):

zdarzenia skoroszytu

W oknie po prawej stronie - możemy wybrać zdarzenie związane z skoroszytem:

zdarzenia skoroszytu

(kliknij na rysunek, aby go powiększyć) 

W analogiczny sposób możemy sprawdzić zdarzenia związane z arkuszem:

zdarzenia arkusza

W tym przypadku - zaznaczając Arkusz1 - wybieramy zdarzenia właśnie z nim związane. Jeżeli chcemy oprogramować inny arkusz - musimy go wybrać w oknie projektu. Lista dostępnych możliwości wygląda tak:

zdarzenia arkusza

 (kliknij na rysunek, aby go powiększyć)

O najbardziej typowych zdarzeniach napisze w kolejnych notkach. A o samych makrach - pod tagiem makro.

 

czwartek, 04 marca 2010

VBA to skrót od Visual Basic for Aplications czyli odmiany języka programowania Visual Basic zawartego w poszczególnych aplikacjach pakietu Microsoft Office. W VBA nie można napisać integralnego, niezależnego programu - wymaga on środowiska, w którym został napisany. Czyli jeżeli piszemy jakąś procedurę VBA w Excelu - nie uruchomimy jej na komputerze, na którym Excela brak.  

Jak zacząć? 
W Excelu 2003 (i wcześniejszych wersjach):  
        Narzędzia --> Makro --> Edytor Visual Basic
W Excelu 2007 - poprzez Pasek Deweloper
A na skróty - poprzez Alt+F11

Otwarte zostanie w ten sposób okno edytora. Jeżeli mamy do czynienia ze skoroszytem, w któym nie ma jeszcze żadnego makra ani funkcji - nie ma on modułu i musimy go wstawić.
Insert --> Module

edytor VBA

Jezeli plik posiada już wpsiany kod (lub nagrane makro) - moduł już istnieje i możemy go zobaczyć i edytować wybierając moduł w oknie projektu:

okno projektu VBA

Kolejnym krokiem jest wybór procedura (czyli makro wykonujące jakieś działania w pliku) czy funkcja, której wynikiem jest jakaś obliczona wartość (oczywiście nie tylko liczbowa). 
Dla procedury opcję Sub, dla fukcji -  Function. W polu Name wpisujemy nazwę procedury/funkcji i naciskamy OK. Na tym etapie pozostałe opcje zostawiamy bez zmiany.

wstaw funkcję

Wszystkie pozostałe czynności - to już edycja kodu. I temat na osobną notkę.

08:42, marzatela , VBA
Link Dodaj komentarz »
| < Lipiec 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!