sobota, 15 grudnia 2018

Nowość! Profesjonalny kurs Excel VBA w wersji online

Udało się! Po wielu miesiącach intensywnej pracy uruchomiłem stronę z profesjonalnym kursem Excel VBA w wersji video. Ponad 16 lat praktycznego doświadczenia w programowaniu w Excel VBA i Office VBA przeniosłem na łącznie ponad 26 godzin filmów podzielonych wg kilku kryteriów:
  • część podstawową - około 15 godzin filmów
  • część zaawansowaną - około 11 godzin filmów

Całość to:
  • 24 zagadnienia
  • ponad 100 tematów
  • kilkadziesiąt plików z przykładami, zadaniami
  • forum wymiany informacji do każdego tematu (o jakość dba administrator strony)

Do Twojej dyspozycji przygotowałem:
  • około godzinę bezpłatnych filmów
  • tańszy dostęp do kursu podstawowego
  • droższy dostęp do całości materiału

Serdecznie zapraszam na strone www.vbaonline.pl


A jeżeli preferujesz szkolenia stacjonarne to dla Ciebie przygotowałem ofertę łączoną - mocne trzydniowe wprowadzenie do Excel VBA w postaci kursu stacjonarnego oraz pełny dostęp do kursu on-line. Opis tej oferty znajdziesz tutaj: www.szkoleniavba.pl

czwartek, 3 marca 2016

Przenoszenie list numerowanych z MS Word do MS Excel

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

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.

ś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.

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.

poniedziałek, 30 listopada 2015

Wykorzystanie SQL dla pobierania danych z aktywnego skoroszytu 3/3

W ostatnim wpisie dot. wykorzystania SQL i ADODB chciałbym przedstawić dwa zagadnienia- pracę z nazwanymi zakresami oraz złączenia tabel danych w SQL (prosta technika JOIN).

1. Obszary nazwane (Named Ranges) rozpoznawane są przez ADODB jako samodzielne tabele. To zaś daje nam możliwość bardziej elastycznego podejścia do obszarów, które możemy wykorzystać w zapytaniu SQL. Nasz przykładowy obszar nazwany o nazwie TabelaProdukty mógłby wyglądać następująco:

Aby wykorzystać obszar nazwany w zapytaniu SQL umieszczamy jego nazwę w kwadratowych nawiasach. Poniższe zapytanie pobierze więc tabelę w całości:

2. Ostatnią z niezwykle przydatnych umiejętności jest wykorzystanie złączeń tabel. Wyobraźmy sobie sytuację, w której -dla naszych przykładowych danych- chcemy uzyskać informację o ilości sprzedaży w podziale na kategorie produktów:

Po wywołaniu powyższej kwerendy SQL uzyskamy następującą tabelę wynikową:

piątek, 13 listopada 2015

Wykorzystanie SQL dla pobierania danych z aktywnego skoroszytu 2/3

Pierwsza rzecz, która wymaga uzupełnienia względem poprzedniego wpisu (o tym samym tytule lecz z numerkiem 1) to technika dodawania nagłówków do tabeli wynikowej. Aby to uzyskać potrzebna będzie pętla oraz odwołanie do kolekcji Fields, a więc kolekcji kolumn tabeli danych. Brakujący kod wraz z komentarzem wygląda następująco:


Po uzupełnieniu poprzedniego kodu nasza tabela wynikowa wyglądać będzie następująco (dla wariantu 2):

Bez wątpienia uzyskane nagłówki w pełni nam nie odpowiadają. Aby je poprawić musimy zmodyfikować nasze zapytanie SQL przez dodanie aliasów:

wtorek, 3 listopada 2015

Wykorzystanie SQL dla pobierania danych z aktywnego skoroszytu 1/3

Nie każdy programista VBA wie, że w całkiem prosty sposób można wykorzystać język SQL do pobrania danych z określonego arkusza aktywnego skoroszytu. Bardziej zaawansowani programiści znają ryzyka związane z tą techniką- tzw. memory leaks, problem związany brakiem pamięci, ale także z brakiem dostępu do części danych w sytuacji gdy są one aktualizowane równocześnie z procesem pobierania. Pomimo wspomnianych zagrożeń uważam, że wspomniana technika jest na tyle interesująca, iż postanowiłem poświęcić jej co najmniej dwa wpisy. Zaprezentuję więc prostą technikę pobierającą SQL z wykorzystaniem ADODB (Microsoft ActiveX Data Objects).

1. Chyba najprostszy sposób pracy z ADODB oparty jest o technikę wczesnego wiązania dzięki czemu uzyskujemy dostęp do podpowiedzi IntelliSense dla obiektów, właściwości i metod związanych z ADODB. W tym celu w naszym projekcie, w edytorze VBA przechodzimy do Menu >> Tools >> References... i na liście odnajdujemy bibliotekę ADODB 2.8 (idealna dla Office od 2007 do 2013).


2. Bez wątpienia potrzebujemy zestawu danych testowych, które powinny znajdować się w określonym arkuszu. Najczęściej dane te znajdują się począwszy od komórki A1. Co jednak ważne- nie jest to wymagane. Silnik pobierania będzie wyszukiwał pierwszej zajętej komórki i tę właśnie uzna za początek naszej tabeli danych.


3. A teraz sam kod... wszelkie dodatkowe informacje umieszczone zostały poniżej w postaci komentarzy. A co się stanie w wyniku wywołania poniższej przykładowej procedury? Zależnie od wybranego zapytania SQL albo uzyskamy wybrany wycinek danych albo tabelę z podsumowaniem sprzedaży.

piątek, 23 października 2015

Właściwości .Value, .Value2 i .Text a szybkość działania

W niniejszym poście nie będę tłumaczył różnic pomiędzy wskazanymi właściwościami obiektu Range, a więc .Value, .Value2 czy .Text. Na dobrą sprawę nie będę nic tłumaczył tylko odeślę czytelników do bardzo ciekawego wpisu, w którym autor pokusił się o wykonanie testów dot. szybkości działania wskazanych właściwości. I co ciekawe, różnice w działaniu są bardzo znaczące więc tym bardziej każdy z programistów VBA, któremu zależny na efektywnym programowaniu powinien sięgać po właściwą technikę.
Co też ważne, artykuł przypomina o istotnych różnicach w działaniu wspomnianych właściwości.

Link do artykułu:
TEXT vs. VALUE vs. VALUE2 – Slow TEXT and how to avoid it...

czwartek, 8 października 2015

Wstrzymanie wykonania kodu na dokładnie jedną sekundę

Niniejszy post jak wiele innych został zainspirowany zapytaniem na jednym z międzynarodowych forów. W dużym skrócie pytanie brzmiało- 'jak wstrzymać dalsze wykonywanie kodu na dokładnie jedną sekundę?' Pierwsza odpowiedź jaka została podana wyglądała następująco: Wadą powyższego rozwiązania jest wykorzystanie instrukcji TimeValue i Application.Wait. Precyzja obu z nich to ledwie sekunda. Jeżeli więc uruchomimy powyższe rozwiązanie np. o godzinie 12:35:45,65 (65 setnych sekundy) to kod będzie oczekiwał niecałą sekundę i dalsza akcja zostanie uruchomiona o 12:35:46,00, lub kilka setnych sekundy później. (Zarówno w powyższym jak i poniższym przykładzie dodane zostały instrukcje Debug.Print, których celem jest prześledzenie rzeczywistego czasu oczekiwania). Jeżeli więc zależy nam na dokładnie, lub prawie dokładnie jednej sekundzie oczekiwania musimy sięgnąć po rozwiązanie wykorzystujące instrukcję Timer: Chciałbym dodać jednak pewne istotne ostrzeżenie- powyższe rozwiązanie nie zadziała w momencie gdy nastąpi przekroczenie północy. Jeżeli istnieje możliwość należy dodać dodatkowe warunki do proponowanego rozwiązania.

poniedziałek, 21 września 2015

Jak wyrównać tekst w kształtach Shape

Pomysł na niniejszy wpis powstał po przeczytaniu pytania i kilku odpowiedzi w serwisie StackOverflow. Postawione pytanie było proste lecz tu przedstawię je w zmodyfikowanej i bardziej rozbudowanej formie- jak uzyskać efekt, w którym poszczególne paragrafy w kształcie są naprzemiennie wyrównane do prawej i lewej strony (zgodnie z tym co prezentuje poniższy przykładowy obrazek)?

Oto prosty kod realizujący zadanie wraz z kilkoma komentarzami:

środa, 2 września 2015

Microsoft Word- zamiana tekstu na obiekt ContentControl (lub inny)

Operacja do wykonania wydaje się być prosta- określone wystąpienie tekstu w dokumencie chcemy zamienić nie na inny tekst lecz na…obiekt. Pierwsza myśl to często- 'jaki jest symbol specjalny dla danego obiektu?'. W istocie, w metodzie .Find możemy zastosować znaki specjalne (Wildcards) w celu wyszukiwania i podmiany tekstu. Tutaj zastosujemy jednak inne i jednocześnie bardzo proste rozwiązanie- w miejscu wyszukanego tekstu po prostu wstawimy (dodamy) interesujący nas obiekt (w przykładzie będzie to ContentControl). Oto przykład wraz z dodatkowymi komentarzami.

poniedziałek, 17 sierpnia 2015

Paste i PasteSpecial... częsty błąd

Niniejszy wpis jest ostrzeżeniem i przypomnieniem dot. operacji wklejania. Zauważyłem ostatnio zarówno w swoich relacjach zawodowych jak i w internecie kilka wpisów sugerujących wątpliwości związane z metodami Paste i PasteSpecial.

Na początek krótki przegląd dostępnych rozwiązań:
1. obiekt Range posiada wyłącznie metodę PasteSpecial
2. obiekt Worksheet posiada metody Paste i PasteSpecial
3. I jako ciekawostkę dodam, że szereg innych obiektów może również posiadać metodę Paste, np. Chart.Paste

A teraz prosty przykład z prawidłowymi zapisami operacji wklejania. Naszym celem jest skopiować zakres komórek A1:A10 z aktywnego arkusza do tego samego arkusza w kolejnych kolumnach B:E. Proszę zwrócić uwagę na dodatkowe komentarze w przykładowym kodzie.

Sytuacja bardzo podobnie będzie wyglądać w przypadku kopiowania kształtu (figury, wykresu i innych obiektów warstwy rysunkowej). Tu schemat postępowania I dostępne metody będą podobne co obrazuje poniższy przykład:

środa, 22 lipca 2015

Przekazywanie tablic pomiędzy procedurami i zmiennymi

Praca z tablicami może bywać problematyczna szczególnie dla początkujących programistów VBA. W niniejszym blogu powstało już wiele wpisów dot. pracy z tablicami. Ostatnio jednak trafiłem na pytanie dot. przekazywania tablicy stałoelementowej pomiędzy różnymi procedurami, innymi zmiennymi, itp. Myślę, że warto krótko podsumować obowiązujące zasady szczególnie, że nie są to zasady skomplikowane. Zacznijmy od prostej definicji bazowej tablicy: Problem 1. Jak przekazać powyższą tablice do innej zmiennej? Istnieją dwa i tylko dwa dostępne scenariusze: oraz wariant drugi: Problem 2. Jak przekazać tablicę do funkcji, procedury parametryzowanej lub właściwości? Tu obowiązują identyczne zasady jak w przekazywaniu tablicy pomiędzy zmiennymi: Problem 3. Jak utworzyć funkcję, która będzie zwracać tablicę o określonej ilości elementów? W praktyce nie ma takiej możliwości. Jeżeli jednak przypiszemy do zwracenj wartości odpowiednią tablicę to funkcja stanie się funkcją tablicową.

piątek, 3 lipca 2015

Względna pozycja komórki wewnątrz zakresu Range

W jaki sposób odnaleźć w najprostszy sposób informację o numerze wiersza i kolumny dla określonej komórki lecz nie w relacji do arkusza, a w relacji do innego wskazanego zakresu? Zaprezentuję Państwu dwa przykładowe rozwiązania dla tak postawionego zadania. Zagadnienie to pojawiło się ostatnio na forum programistycznym i myślę, że warto przypomnieć szczególnie drugą technikę pracy z zakresami.

Wspólne założenia do projektu prezentuje poniższy startowy kod wraz z komentarzami:


Wariant 1. Najprostszy, w którym wykorzystamy różnicę pomiędzy numerami wierszy zakresu odniesienia i wskazanej komórki:


Wariant 2. W którym tworzymy tymczasowy zakres od początku zakresu odniesienia do wskazanej komórki i wyliczamy odpowiednio ilość kolumn i wierszy zakresu tymczasowego:

piątek, 19 czerwca 2015

Wykorzystanie referencji R1C1 w praktyce (2/2)

Kontynuując tematykę praktycznego wykorzystania referencji R1C1 w pracy z formułami chciałbym wyjaśnić kiedy jej wykorzystanie ma największy sens. Z własnego doświadczenia wskażę na jedną ogólną sytuację- wprowadzanie do uporządkowanego zakresu komórek formuł, które ręcznie jesteśmy wstanie wprowadzić przez przeciągnięcie lub prostą operację Copy-Paste.

Przykład 1. 100 wierszy w kolumnach A:L zawiera przychody ze sprzedaży dla 12 miesięcy roku. Wprowadzenie sumy rocznej w kolumnie M można wykonać pętlą, ale można też wykonać prostą operacją z wykorzystaniem referencji względnej:

Wyjaśnienie: każda ze 100 kolejnych komórek w kolumnie M zawiera w praktyce tego samego typu referencję względną- sumuje obszar od 12 komórki w lewo do 1 komórki po lewej stronie względem kolumny wynikowej (M)

Przykład 2. Arkusz1 zawiera tabelę z listą produktów (kolumna A) i ich cenami (kolumna B)- łącznie 10 tyś wierszy. W Arkusz2 chcemy z pomocą funkcji WYSZUKAJ.PIONOWO odnaleźć ceny dla wybranych produktów, których nazwy znajdują się w kolumnie A (w 100 wierszach). W tym wariancie operacja ręczna również będzie polegała na przygotowaniu formuły w komórce B1 i przekopiowaniu jej w dół. Tak więc operację tą z poziomu kodu VBA możemy zapisać właśnie z wykorzystaniem referencji R1C1:

Wyjaśnienie: powyższa referencja zawiera zarówno adresowanie względne jak i bezwzględne. Pierwszy argument funkcji to adres względny- jedna komórka w lewo względem komórki wynikowej (w kolumnie B). Drugi argument to bezwzględna referencja do Arkusza2 i tabeli w obszarze A1:B10000. Tabela ta jest stała dla każdej komórki, do które wrzucamy formułę WYSZUKAJ.PIONOWO.

Na koniec chciałbym jeszcze zaznaczyć, że referencja R1C1 pojawia się nie tylko w pracy z właściwością obiektu Range.FormulaR1C1. W praktyce referencję tą można spotkać bardzo często w różnych (czasem zaskakujących) okolicznościach. W wątpliwych sytuacjach należy sięgnąć do pomocy lub na stronę Microsoft MSDN. Warto zwrócić też uwagę na fakt, że np. rejestrator makr preferuję taką właśnie formę zapisu dla wszelkiego rodzaju zawartości komórek. Niekiedy jednak referencja R1C1 może być stosowana zamiennie z referencją A1B1 lecz warto zweryfikować szczegóły i różnice w wykorzystaniu danego typu adresowania.

piątek, 12 czerwca 2015

Wykorzystanie referencji R1C1 w praktyce (1/2)

Jednym z ważnych tematów omawianych w czasie prowadzonych kursów jest zagadnienie związane z wykorzystaniem referencji do zakresów określanych jako R1C1. Doświadczenie trenerskie pokazuje również, że zagadnienie to niekoniecznie wydaje się być proste do przyswojenia choć jednocześnie, po chwili zastanowienia i wykonaniu kilku ćwiczeń adresowanie komórek w stylu R1C1 staje się łatwiejsze. Spróbuję w tym wpisie krótko podsumować zasady dot. wykorzystania tej formy referencji.

Na początku chciałbym jednak przypomnieć- referencja R1C1 nie oznacza wyłącznie względnego stylu referencji. Z wykorzystaniem tego typu adresowania możemy także utworzyć referencję bezwzględną. I tak:


1. Jeżeli nasz adres R1C1 zawiera nawiasy kwadratowe to z pewnością będzie to adresowane względne. W tym wariancie dopuszczalne jest także wykorzystanie wartości ujemnych oraz pominięcie wartości liczbowych po literach R lub C.
2. Jeżeli w adresie R1C1 nie ma nawiasów kwadratowych oraz po literach R i C występują liczby to z pewnością mówimy o adresowaniu bezwzględnym.
3. I najważniejsze, warianty względnego i bezwzględnego adresowania mogą być ze sobą łączone w ramach jednego adresu.

Poniższe prosty przykłady pozwolą zobrazować szereg dostępnych wariantów adresowania R1C1. Załóżmy, że komórka Excela o adresie E5 zawierać będzie prostą formułę w stylu =A1, sprawdzimy następnie jaką postać ma adres R1C1 dla danej formuły:


Przykład 1: adres względny Wyjaśnienie: komórka A1 jest o 4 kolumny i wiersze odpowiednio w lewo i do góry względem komórki E5

Przykład 2: adres bezwzględny Wyjaśnienie: komórka B10 traktowana bezwzględnie, R10 to 10 wiersz (R = Row), a C2 to druga kolumna arkusza (C = Column)

Przykład 3: adres względny dla komórki będącej w tej samej kolumnie Wyjaśnienie: komórka E1 jest w tej samej kolumnie co E5, zwracany adres R1C1 wskazuje ten fakt przez brak wartości po C

Przykład 4: adres częściowo względny i bezwzględny Wyjaśnienie: kwadratowe nawiasy sugerują względność, kolumna jest więc o 3 w prawo od kolumny E i będzie to kolumna H. Brak nawiasów po R sugeruje adres bezwzględny dla wierszy i wskazuje na wiersz 10

W kolejnym wpisie przedstawię kilka praktycznych przykładów zastosowania formuły R1C1.

piątek, 8 maja 2015

Konwersja tablicy Array na Recordset

Tablice Array są istotnym elementem wielu rozwiązań tworzonych w VBA. Co zrobić jednak w sytuacji gdy określoną tablicę (jedno- lub wielowymiarową) chcemy przefiltrować ze względu na określone zmienne kryteria? W Excelu rozwiązanie to wydaje się być proste - przenieść tablicę do komórek Excela i zastosować filtrowanie. Co jednak zrobić w kodzie VBA stworzonym w innych aplikacjach z pakietu Office? Odpowiedź jest relatywnie prosta- należy przekonwertować tablicę Array na obiekt ADODB.Recordset aby następnie zyskać możliwość filtrowania danych zgodnie z zasadami języka SQL. Myślę więc, że każdy kto spotkał się z podobnym problemem może uznać niniejsze zagadnienie za interesujące.

Krok 1- tworzymy referencję do biblioteki ADODB z poziomu edytora VBA (Menu >> Tools >> References... >> zaznaczamy Microsoft ActiveX Data Objects 2.8 Library)

Krok 2- tworzymy tablicę array przenosząc komórki Excela do tablicy lub tworząc ją na poziomie kodu. Krok 3- tworzymy obiek ADODB.Recordset i konfigurujemy pola tego obiektu Krok 4- przenosimy dane z tablicy do obiektu Recordset Krok 5- tak utworzony obiekt możemy swobodnie filtrować korzystając z właściwości .Filter obiektu Recordset. W poniższym kodzie efekt filtrowania testujemy przenosząc wybrane wartości obiektu Recordset do komórek arkusza Excel.

środa, 22 kwietnia 2015

Funkcja sprawdzająca istnienie arkusza w zewnętrznym pliku Excela? (kontynuacja)

Kontynuując zagadnienie prezentowane przed kilkoma dniami chciałbym zaprezentować podobne rozwiązanie do tam opisanego lecz tym razem oparte o funkcję użytkownika UDF. Cel- funkcja ma zwracać wartości True/False w odpowiedzi na pytanie czy we wskazanym skoroszycie (tu podamy pełną ścieżkę do pliku) istnieje określony arkusz (tu podamy jego nazwę). Poniżej kod funkcji wraz z dodatkowymi komentarzami. Funkcja tej postaci działać będzie zarówno w środowisku VBA jak również w dowolnej komórce Excela.