Proces integracji aplikacji MS Word i MS Excel nie należy do specjalnie trudnych. Znając podstawowy model obiektowy tych aplikacji łatwo odczytać zawartość dokumentu, tabeli i przenieść je do komórek (obszarów) Excela. Pewien problem może stanowić przenoszenie list- wypunktowania i numerowania. Jednak i dla tego typu operacji znaleźć można właściwą technikę VBA, którą zaprezentowano w odpowiedzi pod poniższym linkiem:
StackOverflow: Extract Multiple Word Table contents to Excel via VBA - Table contents numbered lines
czwartek, 3 marca 2016
poniedziałek, 29 lutego 2016
Ostatni biznesowy dzień miesiąca (funkcja)
Dziś krótka odpowiedź na pytanie- jak pobrać datę odpowiadającą ostatniemu dniu miesiąca z pominięciem weekendu? Jeżeli ostatni dzień miesiąca wypada w sobotę lub niedzielę naszym celem będzie otrzymanie daty odpowiadającej piątkowi poprzedzającemu ten weekend. Poniżej gotowe rozwiązanie w postaci funkcji UDF.
Proszę też zwrócić uwagę na ten zapis:
którego celem jest zwrócenie daty ostatniego dnia miesiąca (poprzedniego).
Warto przy okazji też podkreślić, że funkcja DateSerial() jest funkcją bardzo elastyczną, która umożliwia wprowadzenie ilości miesięcy spoza przedziału 1-12 co powoduje automatyczną konwersję na odpowiedni miesiąc dokonując przejścia przez kolejne lata (mniejsze od 0- lata wcześniejsze, większe od 12- lata późniejsze). Podobnie kwestia wygląda w zakresie dni, gdzie dopuszczalne są wartości spoza przedziału 1-31, a czego przykład widać w powyższej funkcji.
01 | Public Function EndOfBusinessMonth(RefDate) As Date |
02 | |
03 | Dim LastDay As Date |
04 | |
05 | LastDay = DateSerial(Year(RefDate), Month(RefDate) + 1, 0) |
06 |
07 | Select Case Weekday(LastDay) |
08 | Case 1 'Niedziela |
09 | EndOfBusinessMonth = DateAdd( "d" , -2, LastDay) |
10 | Case 7 'Sobota |
11 | EndOfBusinessMonth = DateAdd( "d" , -1, LastDay) |
12 | Case Else |
13 | EndOfBusinessMonth = LastDay |
14 | End Select |
15 | |
16 | End Function |
1 | LastDay = DateSerial(Year(RefDate), Month(RefDate) + 1, 0) |
Warto przy okazji też podkreślić, że funkcja DateSerial() jest funkcją bardzo elastyczną, która umożliwia wprowadzenie ilości miesięcy spoza przedziału 1-12 co powoduje automatyczną konwersję na odpowiedni miesiąc dokonując przejścia przez kolejne lata (mniejsze od 0- lata wcześniejsze, większe od 12- lata późniejsze). Podobnie kwestia wygląda w zakresie dni, gdzie dopuszczalne są wartości spoza przedziału 1-31, a czego przykład widać w powyższej funkcji.
środa, 24 lutego 2016
Szybka kowersja daty w zapisie String do typu Date
W czasie jednego ze szkoleń z obszarów Access VBA pojawiło się pytanie dot. sposobu konwersji daty przekazywanej w postaci ciągu tekstowego w układzie YYYYMMDD na układ daty YYYY-MM-DD.
Pierwsze podejście, bardzo klasyczne i naturalne, to rozebranie otrzymanego tekstu na czynniki z wykorzystaniem instrukcji Left(), Right() i Mid(), a następnie wykorzystanie funkcji DateSerial() i stworzenie z tego daty. rozwiązanie to mogło by wyglądać następująco:
Tymczasem okazuje się, że z pomocą funkcji Format() możemy bardzo skutecznie skrócić powyższy zapis zyskując dodatkową elastyczność. Oto przykłady:
Oczywiście zachęcam do samodzielnych dalszych eksperymentów z wykorzystaniem funkcji Format.
Pierwsze podejście, bardzo klasyczne i naturalne, to rozebranie otrzymanego tekstu na czynniki z wykorzystaniem instrukcji Left(), Right() i Mid(), a następnie wykorzystanie funkcji DateSerial() i stworzenie z tego daty. rozwiązanie to mogło by wyglądać następująco:
1 | Dim DataTekstowo As String |
2 | DataTekstowo = "20161222" |
3 | Debug.Print DateSerial(Left(DataTekstowo, 4), Mid(DataTekstowo, 5, 2), Right(DataTekstowo, 2)) |
Tymczasem okazuje się, że z pomocą funkcji Format() możemy bardzo skutecznie skrócić powyższy zapis zyskując dodatkową elastyczność. Oto przykłady:
1 | Dim DataTekstowo As String |
2 | DataTekstowo = "20161222" |
3 |
4 | 'z wykorzystaniem funkcji konwersji |
5 | Debug.Print CDate (Format(DataTekstowo, "0000-00-00" )) |
6 |
7 | 'działa także dla innego zapisu bazowego daty |
8 | DataTekstowo = "161222" |
9 | Debug.Print CDate (Format(DataTekstowo, "0000-00-00" )) |
Oczywiście zachęcam do samodzielnych dalszych eksperymentów z wykorzystaniem funkcji Format.
piątek, 29 stycznia 2016
Konwersja typu Integer na Long
Ze względu na ograniczoną ilość czasu jaką obecnie dysponuję i jaką chciałbym poświęcać na publikację opisów zagadnień i problemów z zakresu VBA od czasu do czasu będę dodawał linki do ciekawych zagadnień z poświęconych programowaniu w VBA. Jako aktywny programista i trener bardzo często spotykam się z problemami, ciekawymi pomysłami oraz informacjami, które nie zawsze są powszechnie znane i wykorzystywane.
Zaczynam od informacji związanej z automatyczną konwersją zmiennych typu Integer (uważanych za przestarzały typ zmiennych) na zmienną typu Long. Co ważne, automatyczna konwersja działa tylko w systemach 32bit'owych. Dodatkowe informację znaleźć można pod tymi linkami:
MSDN: The Integer Data Types
StackOverflow: Why Use Integere Instead Of Long?
piątek, 15 stycznia 2016
Nowości w 2016- Wpis reklamowy
Niniejszy wpis poświęcony będzie wyłącznie zmianom jakie nastąpiły w ofercie szkoleniowej począwszy od roku 2016.
Pierwsza zmiana dotyczy autorskich szkoleń z podstaw Excel VBA. Szkolenia:
Excel VBA- Praktyczne podstawy dla analityków
Excel VBA- Kompletne wprowadzenie
oraz
Excel VBA śednio-zaawansowany- praca z danymi
zyskały nowe zagadnienie, dot. integracji środowiska Excel (VBA) z innymi aplikacjami w pakiecie Office. W odpowiedzi na często pojawiające się zapytania dot. np. wysyłania e-maila z Outlook'a lub wstawiania jakiegoś elementu w obszar prezentacji PowerPoint postanowiłem dodać tego typu temat do programu w/w szkoleń.W zależności od ilości dostępnego czasu prezentowane są więc przykłady dot. współpracy z Outlookiem, PowerPointem i MS Wordem. Wybór aplikacji i przykładów integracji zależy, jak zawsze, od uczestników szkoleń.
Druga zmiana dotyczy wprowadzenia do oferty krótkiego, dwudniowego szkolenia z Excel VBA opartego o program szkolenia Microsoft MS 50476 B. Program naszego szkolenia nadal pozostaje autorski, nie mniej zawarliśmy w nim wszystkie tematy wymienione w w/w bazowym szkoleniu firmy Microsoft. Dodatkowo poszerzyliśmy niektóre tematy tak, aby uczestnik po ukończeniu kursu poczuł pełną swobodę w wykorzystywaniu języka VBA w codziennej pracy w procesach prostych automatyzacji zadań. Dodatkowo niska cena- 690 pln netto za dwa dni kursu- mamy nadzieję, że zachęci do uczestnictwa w tym szkoleniu.
To nie koniec zmian w roku 2016. W drugiej połowie roku planujemy uruchomienie autorskich szkoleń z Microsoft Access, Microsoft Access SQL i Microsoft Access VBA.
Serdecznie zapraszamy do uczestnictwa w naszych szkoleniach oraz do śledzenia naszej oferty.
Pierwsza zmiana dotyczy autorskich szkoleń z podstaw Excel VBA. Szkolenia:
Excel VBA- Praktyczne podstawy dla analityków
Excel VBA- Kompletne wprowadzenie
oraz
Excel VBA śednio-zaawansowany- praca z danymi
zyskały nowe zagadnienie, dot. integracji środowiska Excel (VBA) z innymi aplikacjami w pakiecie Office. W odpowiedzi na często pojawiające się zapytania dot. np. wysyłania e-maila z Outlook'a lub wstawiania jakiegoś elementu w obszar prezentacji PowerPoint postanowiłem dodać tego typu temat do programu w/w szkoleń.W zależności od ilości dostępnego czasu prezentowane są więc przykłady dot. współpracy z Outlookiem, PowerPointem i MS Wordem. Wybór aplikacji i przykładów integracji zależy, jak zawsze, od uczestników szkoleń.
Druga zmiana dotyczy wprowadzenia do oferty krótkiego, dwudniowego szkolenia z Excel VBA opartego o program szkolenia Microsoft MS 50476 B. Program naszego szkolenia nadal pozostaje autorski, nie mniej zawarliśmy w nim wszystkie tematy wymienione w w/w bazowym szkoleniu firmy Microsoft. Dodatkowo poszerzyliśmy niektóre tematy tak, aby uczestnik po ukończeniu kursu poczuł pełną swobodę w wykorzystywaniu języka VBA w codziennej pracy w procesach prostych automatyzacji zadań. Dodatkowo niska cena- 690 pln netto za dwa dni kursu- mamy nadzieję, że zachęci do uczestnictwa w tym szkoleniu.
To nie koniec zmian w roku 2016. W drugiej połowie roku planujemy uruchomienie autorskich szkoleń z Microsoft Access, Microsoft Access SQL i Microsoft Access VBA.
Serdecznie zapraszamy do uczestnictwa w naszych szkoleniach oraz do śledzenia naszej oferty.
Subskrybuj:
Posty (Atom)