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

Wpisy z tagiem: makro

poniedziałek, 08 sierpnia 2016

Jak wiadomo - makra i procedury Excela służą do automatyzacji działań, pobierania czy analizy danych. A ponieważ "apetyt rośnie w miarę jedzenia" zawsze pojawia się chęć, aby jeszcze bardziej zoptymalizować, zautomatyzować i uprościć. Może warto się zastanowić, czy da się to zrobić zupełnie bez udziału użytkownika? Tak, aby nawet nie trzeba było otwierać skoroszytu Excela?

Załóżmy, że mamy plik z procedurą np. pobierającą z internetu aktualną wartość kursu waluty i zapisującą ją w kolejnych wierszach arkusza Excela. Czy nie byłoby fajnie, gdyby takie pobieranie danych odbywało się w tle, codziennie o określonej porze?
Przyjmijmy na roboczo, że takie makro (choć to oczywiście tylko przykład, dotyczy to każdego makra) nazywa się Aktualizuj i znajduje się w pliku Excela KursWalut.xlsm. Chcąc, aby automatycznie uruchamiało się przy otwarciu skoroszytu, musimy je umieścić w module skoroszytu. W zależności od wersji językowej Excela - jest on oznaczony jako Ten_skoroszyt lub This_workbook.

Moduł skoroszytu 

Klikając w tym miejscu - przejdziemy do modułu skoroszytu. W tym module tworzymy makro Workbook_Open i wpisujemy nazwę makra, które ma się uruchomić przy otwarciu skoroszytu.

Moduł skoroszytu 

W tym przypadku do zdarzenia skoroszytu przy otwarciu - dopisane jest makro Aktualizuj, znajdujące się w module ogólnym.
Teraz wystarczy zapisać i zamknąć plik - przy każdym jego otwarciu uruchomione będzie makro Aktualizuj.

A na koniec - pozostaje tylko ustawienie terminu i częstotliwości, z jaką nasz skoroszyt powinien się otwierać. To już jednak nie w Excelu, a w harmonogramie zadań Windowsa. Uruchamiamy go z paska startowego Windowsa:

harmonogram zadań

Następnie tworzymy nowe zadanie:

harmonogram zadań

Następnie w zakładce Akcje wpisujemy nazwę pliku do otwarcia (po naciśnięciu przycisku Przeglądaj z prawej strony możemy oczywiście odszukać plik na dysku):

harmonogram zadań


harmonogram zadań

Kolejny krok to przejście do zakładki Wyzwalacze:

harmonogram zadań

Naciskamy przycisk Nowy i w kolejnym formularzu ustalamy termin i częstotliwość.
Potem wystarczy już tylko nacisnąć OK, choć oczywiście zawsze można przyjrzeć się wszystkim opcjom.

W zależności od wersji Windowsa - wygląd harmonogramu zadań może się różnić, choć zasada działania jest identyczna. Moje screeny pochodzą z Windows10.

 


Kurs Excel programowanie w VBA

czwartek, 23 stycznia 2014

Przykład prostego makra losującego 6 liczb z 49:

Public Sub Lotto()
'Makro losujące 6 cyfr z 49
Dim i As Integer
Dim Liczba As Integer

For i = 1 To 6
    Randomize
    Liczba = Int(Rnd * (49) + 1)
    Range("A" & i) = Liczba
Next i
End Sub


Makro losuje liczby i wpisuje je do kolejnych wierszy kolumny A.

Wynik działania widoczny jest tu (każde uruchomienie makra powoduje inne wyniki):

losowanie w Excelu

Procedura jest bardzo prosta i ograniczona. Przede wszystkim nie ma sprawdzania powtarzalności liczb, więc nie gwarantuje unikalności.
W samym kodzie zostały wykorzystane funkcje Randomize oraz pętla For ... Next.

 


 

 

 

 

 

Kurs Excel - zaawansowane funkcje i formuły



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.


sobota, 11 lutego 2012

Problem wygląda tak: jest arkusz Excela z tabelą i potrzebne jest makro, które będzie drukowało określoną wartością jednej z komórek liczbę kopii. Jego rozwiązanie może być dobrym przykładem na ilustrację procesu nagrywania i edycji makra.

W arkuszu mamy tabelę. Wyróżniona została tu komórka I15, która ma determinować liczbę kopii wydruku. Oczywiście musi to być liczba całkowita.

makro

Nagrywanie makra rozpoczynamy na wstędze Developer, wybierając przycisk
Zarejestruj makro.

rejestrowanie makra 

Po naciśnięciu tego przycisku - wszystkie czynności będą rejestrowane i powtórzone po każdym uruchomieniu makra.Sam przycisk zmienia się na Zatrzymaj rejestrowanie i służy do zakończenia jego nagrywania.

rejestrowanie makra

 

Nagrywając makro do tego przykładu - ustawiłam liczbę kopii na 5. Żeby zmienić to na wartość odczytywaną z komórki I15 - przejść do edycji makra w kodzie VBA.
Na wstędze Developer - wybieramy przycisk Visual Basic.

edytor Visual Basic 

 

Z lewej strony edytora odszukujemy moduł 1 - tam jest zarejestrowane nasze makro:

Projekt VBA

Dwukrotne kliknięcie w moduł powoduje jego otwarcie

edytor Visual Basic

Widać tu zapisane w kodzie VBA makro. Kluczowa w zapisie jest jest liczba 5 - taka ilość kopii była początkowo ustawiona i właśnie w tym miejscu konieczna jest zmiana.
Z Makra1 skopiowałam funkcję wywołującą drukowanie (uwaga: w zależności od drukarki i ustawienia pozostałych parametrów wydruku może się nieco różnić) . Stworzyłam nowe makro Druk, w którym wstawiłąm skopiowany fragment, nieco go zmieniając.
Tam, gdzie byla liczba 5 - czyli liczba kopii ustawiona podczas nagrywania makra - wstawiłam wartośc zmiennej IleKopii. W moim przypadku - zmienna ta odwołuje się do komórki I15, ale można wstawić tu dowolną inna komórkę. Ważne, aby była to liczba naturalna.

Sub Makro1()
'
' Makro1 Makro
'
 
'
    ExecuteExcel4Macro "PRINT(1,,,5,,,,,,,,2,,,TRUE,,FALSE)"
End Sub
 
Public Sub Druk()
Dim IleKopii As Integer
 
IleKopii = Range("I15").Value
 

 ExecuteExcel4Macro "PRINT(1,,," & IleKopii & ",,,,,,,,2,,,TRUE,,FALSE)"
End Sub


Teraz pozostaje już tylko zapisanie pliku - jako skoroszytu z obsługą makr - rozszerzenie
xlsm.

makro

Oczywiście pozostaje jeszcze kwestia jak uruchamiać makro. To zagadnienie opisane jest tu:
Uruchamianie makra

A całość w formie tutorialu jest tu:

Przykładowe makro

 

Przykład makra, które ma drukować określoną wartością jednej z komórek arkusza liczbę kopii.

Opis poszczególnych kroków jest tu:

Nagrywanie i edycja makra

 

W jaki sposób szybko i łatwo uruchomić makro? Możliwości jest wiele.

Najprościej po prostu wybrać je z listy zapisanych makr: wstęga Developer -> Makra

 uruchamianie makra

Po wybraniu tego przycisku automatycznie otwiera się nowe okno, w którym widoczne są wszystkie makra w otwartych skoroszytach - wystarczy wybrać i nacisnąć Uruchom.

uruchamianie makra 

Uruchomienie makra można też przypisać do własnego przycisku umieszczonego w arkuszu.
Wstęga Developer -> Wstaw -> Formanty formularza.

wstawianie przycisku makra

 

Otwiera się nowe okno z makrami - wybrane dopisujemy do przycisku.przypisywanie makra do przycisku

Potem wystarczy kliknąć na taki przycisk i to co wcześniej nagraliśmy - automatycznie zostanie wykonane.

Oczywiście możemy makro przypisać także do jednego ze zdarzeń arkusza lub zdarzeń skoroszytu.

poniedziałek, 17 stycznia 2011

Worksheet_SelectionChange to kolejne makro przypisane do zdarzeń arkusza (inne najłatwiej wyszukać korzystając z tagu zdarzenia arkusza ).
Makro to działa po zmianie zaznaczenia komórki (myszką lub klawiaturą). Aktualnie zaznaczona komóka jest odczytywana przez parametr wejściowy Target (typu Range).
W praktyce może wyglądać to tak:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'ciąg instrukcji  
End Sub

Procedura wydaje sie z pozoru mało atrakcyjna, ale w połączeniu z inymi funkcjami, jako fragment więszej całości - może sie przydać.

niedziela, 12 grudnia 2010

Worksheet_Deactivate to makro automatyczne związane z zdarzeniem arkusza. Zasada jego działania jest identyczna jak makra Worksheet_Activate, ale działą przy wychodzeniu (deaktywacji) danego arkusza. Zapis makra w kodzie VBA wygląda tak:

Private Sub Worksheet_Deactivate()

' odwołanie do makra lub bezpśredni ciąg instrukcji

End Sub

Ciąg poleceń zostanie wykonany automatycznie po opuszczeniu arkusza, do którego makro jest przypisane.
Inne makra związane ze zdarzeniami arkusza - można znaleźć pod tagiem:
zdarzenia arkusza.

niedziela, 05 grudnia 2010

Worksheet_Change to kolejne makro przypisane do zdarzeń arkusza (inne najłatwiej wyszukać korzystając z tagu zdarzenia arkusza ).
Makro to działa po zmianie wartości którejś z komórek. Komórka, w której dokonano zmiany jest odczytywana przez parametr wejściowy Target typu Range.
W praktyce może wyglądać to tak:

Private Sub Worksheet_Change(ByVal Target As Range)
Target.Interior.Color = RGB(255, 0, 0)
End Sub

W tym przypadku - komórka, w której dokonano zmiany zmienia swój kolor na czerwony. Może się przydać, prawda?

niedziela, 28 listopada 2010

Makro Worksheet_Calculate() jest makrem uruchamianym automatycznie. Przypisane jest do zdarzenia arkusza - działa po przeliczeniu arkusza. Samo wpisywanie danych nie wywołuje reakcji - momemntem kluczowym jest przeliczenie wartości w funkcji powiązanej z tymi danymi.

Private Sub Worksheet_Calculate()
Columns("A:C").EntireColumn.AutoFit
End Sub

W tym przypadku - po przeliczeniu arkusza następuje automatyczne dopasowanie szerokości kolumn A, B i C. Przydaje się czasami.

 
1 , 2 , 3
| < Listopad 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      


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


A tu oferta na dziś:





ministat liczniki.org



Napisz do mnie!