Excel VBA – zawijanie wierszy (rozdzielanie łańcuchów znaków)

No Comments

W dzisiejszym wpisie zajmiemy się stringami. Ale nie cieszcie się za bardzo.

Napotkałem ciekawy problem w pewnym wspaniałym systemie pewnej wspaniałej polskiej firmy. W danych do faktury nazwa podmiotu miała trzy linijki – były to trzy osobne pola o maksymalnej długości 50 znaków. Głupota, ale co ja tam wiem.

Klient wpisując dane do faktury w sklepie internetowym miał na nazwę jedno pole, co jest bardziej sensowne. No i trafiliśmy w końcu na kogoś, kto miał nazwę dłuższą niż 50 znaków, co spowodowało kupę śmiechu… dobra, spowodowało to ochrzan biednego WRonX’a. Trzeba było sobie z tym jakoś poradzić

Read More…

Excel VBA – kursor myszy “hand” dla linku

1 Comment

W poprzednim wpisie pokazałem prosty (w dodatku nie mój, co wskazałem w źródle) sposób na utworzenie linku z kontrolki Label. Ale co to za link, który po najechaniu nań myszą nie zmienia jej kursora na klasyczną “rączkę”, do której wszyscy przywykliśmy?

Jak się okazuje, nie ma możliwości pokazania takiego kursora (przynajmniej do wersji Office 2003, na jakiej pracuję) z poziomu właściwości MousePointer obiektu. Ale mimo wszystko da się, jak wykazuje GHolden w wątku traktującym właśnie o tym problemie.

Read More…

Excel VBA – link dla Label

No Comments

Będzie krótko. Niektórzy czasem potrzebują linka zrobionego z kontrolki Label. Co należy zrobić?

  1. Umieszczamy Label na UserForm.
  2. Opisujemy i formatujemy (zwykle niebieski kolor i podkreślenie).
  3. Zdarzenie Click obsługujemy następującym kodem:
Private Sub LabelLink_Click()
    href = "http://moja.strona.pl"
    On Error GoTo blad
    ActiveWorkbook.FollowHyperlink Address:=Link, NewWindow:=True
    Exit Sub
blad:
    MsgBox "Nie można otworzyć " & href, , vbExclamation, "BŁĄD"
End Sub

Zrobione :)

[źródło: spreadsheetpage]

[daily snippet] Excel VBA – autostart makra przy otwarciu arkusza

No Comments

Skoro wiemy już, jak zamknąć arkusz, przyda nam się wiedza, jak zrobić to w momencie otwarcia :)

A tak na poważnie – w niektórych firmach Excel jest używany do obróbki danych, bo interfejs jest znajomy dla większości pracowników biurowych, nie mających wiele wspólnego z komputerami. Można więc z arkusza Excelowego zrobić świetne narzędzie front-endowe. Komunikacja z dowolną bazą jest na wyciągnięcie ręki, więc niech użytkownik wprowadzi swoje dane, a VBA zrobi resztę.
W ten sposób można na przykład aktualizować stan magazynowy w sklepie internetowym. W takim przypadku przydałoby się zrobić to następująco:

Read More…

[daily snippet] Excel VBA – Zamykanie dokumentu (arkusza)

No Comments

W kolejnej odsłonie daily snippet – jak irytować użytkowników, czyli zamykanie aktywnego dokumentu.

Kod jest prosty, jak świński ogon. A możliwości są trzy:

   ActiveWorkbook.Close False ' - zamkniecie bez zapisywania zmian
   ActiveWorkbook.Close True  ' - zamkniecie z zapisem zmian
   ActiveWorkbook.Close       ' - użytkownik decyduje o zapisie

Życzę wielu pomyślnych zamknięć :)

[daily snippet] Excel VBA – blokowanie i ukrywanie arkusza, ukrywanie kolumny

No Comments

Dziś będzie krótko i łatwo. Zablokowanie/odblokowanie arkusza:

   ActiveSheet.Protect   ' - zablokowanie
   ActiveSheet.Unprotect ' - odblokowanie

Ukrycie/odkrycie arkusza:

   Sheets("x").Visible = False ' - ukrycie
   Sheets("x").Visible = True  ' - odkrycie

Ukrycie/odkrycie kolumny:

   Columns(zakres).EntireColumn.Hidden = True   ' - ukrycie
   Columns(zakres).EntireColumn.Hidden = False  ' - odkrycie
   '(gdzie np zakres = "X:Y")

[daily snippet] Excel VBA – Zaokrąglanie w górę i w dół

No Comments

Witam w nowym cyklu “daily snippet”. Nie oznacza to oczywiście, że snippety będą publikowane codziennie, ale postaram się częściej, niż zwykle. Będą to bardzo krótkie wpisy z maleńkimi (często jednolinijkowymi) fragmentami kodu. Taki zbiór przydatnych rzeczy. Krótko, więc z reguły bez “czytaj dalej”, a przynajmniej z esencją sensu posta w jego nagłówku :)

Na pierwszy ogień zaokrąglanie liczb. Excel VBA posiada funkcję Round(), która po prostu zaokrągla, ale warto wiedzieć, że można też zaokrąglać w górę i w dół, stosując kolejno:

   Application.RoundUp(liczba, miejscaPoPrzecinku)
   Application.RoundDown(liczba, miejscaPoPrzecinku)

Na marginesie, gdyby komuś się chciało analizować kod, zanim znalazłem te funkcje, zdążyłem już napisać własne. Smacznego:
Read More…

Excel VBA – obsługa elementów ListBox’a

4 Comments

Chcąc – nie chcąc, czasem trzeba. Jak widać, wpisy zostały zdominowane przez VBA, ale lepiej mieć content, niż nie mieć, więc dokładam znowu coś od siebie.

W dzisiejszym odcinku dowiemy się, jak wyciągnąć liczbę zaznaczonych elementów listy ListBox, jak wyciągnąć te elementy, jak dodać gotowy element do listy i na dokładkę – otrzymamy pierwszy zaznaczony element.
Read More…

Excel VBA – sprawdzanie, czy pozycja widnieje już na liście (ListBox)

No Comments

Kolejny szybki snippet, aby się nie znudzić za bardzo.
Często zdarza się, że wybieramy w jednym ListBoksie jakieś pozycje i kopiujemy je do drugiego. Nie chcielibyśmy się zdublować (zazwyczaj), dlatego też warto sprawdzić przed skopiowaniem, czy dany element na naszej liście już widnieje, czy może też nie. Posłuży do tego kolejna uniwersalna funkcja…
Read More…

Excel VBA i aktywne (realtime) filtrowanie ListBox/ComboBox

4 Comments

Jak już wspominałem onegdaj, bywa w życiu każdego PHPowca taki moment, kiedy staje przed koniecznością napisania makra w Excelowym VBA… Nie, wróć… to chyba tylko ja tak mam. W każdym razie – czasem trzeba. Dzisiejszy odcinek poświęcimy aktywnemu filtrowaniu listy. Jak toto wygląda, każdy powinien wiedzieć. Otóż jest sobie lista As ListBox oraz pole As TextBox. I w trakcie wpisywania czegoś do pola chcemy mieć na liście tylko te wartości, które pasują do wartości pola
Read More…