Zagadka za dolara: rozwiązanie #1

Rozwiązanie zagadki z połowy marca. Wersja siłowa.

Dziś w końcu opublikuję poprawne rozwiązanie zagadki, którą zadałem Czytelnikom w połowie marca. Zagadka w pierwotnym brzmieniu zawierała błąd, dlatego w połowie kwietnia opublikowałem erratę. Na zagadkę oryginalną nikt nie zareagował, natomiast po erracie pojawił się jeden odważny Czytelnik (Krzysztof), który wziął się z nią za bary i po kilku drobnych podpowiedziach z mojej strony uporał się z nią w sposób doświadczalny. Czytaj dalej Zagadka za dolara: rozwiązanie #1

Pchełki VBA, odcinek 22: Niedotykalska

Niedotykalskość jest pojęciem matematycznym. Jeżeli więc ktoś spodziewał się tutaj czegoś innego (zaprawdę nie wiem, czego), to niech lepiej idzie oglądać śmieszne koty.

Liczba niedotykalska (po naszemu: untouchable number) to taka liczba naturalna, której nie da się przedstawić w postaci sumy podzielników jakiejkolwiek liczby naturalnej (z wyłączeniem tej liczby). Czytaj dalej Pchełki VBA, odcinek 22: Niedotykalska

Pchełki VBA, odcinek 20: polskie znaczki

Niedawno jakaś zbłąkana dusza trafiła na mego bloga w poszukiwaniu metody na znalezienie w tekście, za pomocą VBA, polskich znaków. Z kontekstu domyśliłem się, że nie chodzi o znaki drogowe. Drogą intensywnej dedukcji wykoncypowałem nawet, że chodzi o polskie znaki diakrytyczne, czyli tzw. „ogonki”. Czytaj dalej Pchełki VBA, odcinek 20: polskie znaczki

Pchełki VBA, odcinek 19: czytamy z pliku

Nie jestem osobnikiem zbyt wścibskim i nigdy tak naprawdę nie byłem w stanie zrozumieć szaleństwa programów typu „Big Brother”, w których podglądactwo z wstydliwej czynności zostało wzniesione na piedestał i okazało się Sztuką (przez wielkie „gie” co prawda, ale jednak sztuka to sztuka). Czytaj dalej Pchełki VBA, odcinek 19: czytamy z pliku

Pchełki VBA, odcinek 17: Shape

Kolega spytał mnie niedawno w jaki sposób utworzyć pole tekstowe z zaokrąglonymi rogami, w zadanej komórce. Pole tekstowe ma być sformatowane tak samo jak komórka pod nim.

Rozwiązanie jest względnie proste aczkolwiek stopień komplikacji zależy w dużej mierze od tego jak bardzo owo pole tekstowe ma przypominać przykrywaną przez siebie komórkę. Przykład, który dziś pokażę, będzie pchełką, a więc kodu będzie niewiele. Pole tekstowe będzie miało takie samo formatowanie tekstu oraz kolor tła. Jeżeli ktoś czuje się na siłach, może sobie rozbudować ten kod o formatowanie krawędzi (obramowania) i czego tam jeszcze.

Najpierw kod:

Sub CreateTextBoxAtCell(r As Excel.Range)
 Dim s As Excel.Worksheet, tb As Shape
 Set s = ThisWorkbook.ActiveSheet
 Set tb = s.Shapes.AddShape(msoShapeRound1Rectangle, r.Left, r.Top, r.Width, r.Height)
 tb.TextEffect.Text = r.Value
 tb.TextEffect.FontBold = r.Font.Bold
 tb.TextEffect.FontItalic = r.Font.Italic
 tb.TextEffect.FontName = r.Font.Name
 tb.TextEffect.FontSize = r.Font.Size
 tb.Fill.ForeColor.RGB = r.Interior.Color
 tb.Visible = msoCTrue
End Sub

Teraz krótkie objaśnienie:

Sub CreateTextBoxAtCell(r As Excel.Range)

Procedura o nazwie CreateTextBoxAtCell (czyli po naszemu UtwórzPoleTekstoweWKomórce), z jednym parametrem r typu Excel.Range (czyli komórka lub zakres komórek).

Dim s As Excel.Worksheet, tb As Shape

Tu deklarujemy dwie zmienne: s typu Worksheet (przyda się za chwilę) oraz tb typu Shape. Skrót „tb” oznacza tutaj „textbox” chociaż tak naprawdę wstawiany obiekt nie będzie typu TextBox tylko ShapeRound1Rectangle, ale nie szkodzi)

Set s = ThisWorkbook.ActiveSheet

Tutaj ustawiamy zmienną s na aktualnie aktywnym skoroszycie.

Set tb = s.Shapes.AddShape(msoShapeRound1Rectangle, r.Left, r.Top, r.Width, r.Height)

A tutaj dzieje się magia właściwa. Wywołujemy metodę AddShape kolekcji Shapes bieżącego skoroszytu, a jej wynik (będący obiektem klasy Excel.Shape, a dokładniej mówiąc referencją na ten obiekt) zwracamy do zmiennej tb. Po ludzku mówiąc, wstawiamy „coś” do naszego arkusza, i od tej pory możemy się z tym „czymś” komunikować za pomocą zmiennej tb.

A co konkretnie wstawiliśmy? Wstawiliśmy msoShapeRound1Rectangle czyli zaokrąglony prostokąt. Współrzędne górnego lewego narożnika tego prostokąta pokrywają się ze współrzędnymi zadanej komórki (r.Left, r.Top), podobnie jak jego długość i szerokość (r.Width, r.Height).

Dodam jeszcze, że metoda AddShape tworzy domyślnie obiekt ukryty (niewidoczny), trzeba go potem „odkryć” osobną instrukcją. Ale po kolei:

 tb.TextEffect.Text = r.Value
 tb.TextEffect.FontBold = r.Font.Bold
 tb.TextEffect.FontItalic = r.Font.Italic
 tb.TextEffect.FontName = r.Font.Name
 tb.TextEffect.FontSize = r.Font.Size
 tb.Fill.ForeColor.RGB = r.Interior.Color

Tutaj ustawiamy wszystkie opcje formatowania wyglądu naszego nowo wstawionego prostokąta, a jako jego treść (tb.TextEffect.Text) wpisujemy zawartość naszej komórki (r.Value). Jeżeli ktoś czuje się na siłach, może do tej listy dopisać jeszcze formatowanie obramowania, jakieś przezroczystości, kolor tekstu i inne opcje formatowania. Sky is the limit…

tb.Visible = msoCTrue

Tutaj „odkrywamy” nasz prostokąt, czyli pokazujemy go światu.

Na zakończenie przykład wywołania powyższej procedury:

CreateTextBoxAtCell Range("C17")

Takie wywołanie spowoduje utworzenie nad komórką C17 prostokąta z zaokrąglonymi rogami oraz formatowaniem i tekstem skopiowanymi z tejże komórki.

Pchełki VBA, odcinek 16: Enum

Jakiś nieszczęśnik trafił wczoraj na mojego bloga w poszukiwaniu typów wyliczanych w VBA. Przypuszczam, że w efekcie usnął i spóźnił się do pracy, skutkiem czego zapamiętał sobie, żeby nigdy więcej tutaj nie zaglądać. Niemniej jednak nadgryzę temat – a nuż ktoś kiedyś tu trafi szukając typów wyliczanych – i proszę bardzo, wszystko podane jak na tacy. Czytaj dalej Pchełki VBA, odcinek 16: Enum

Pchełki VBA, odcinek 14: Kolorki

Dzisiejsza pchełka będzie pchełką wśród pchełek, czyli maleństwo. Zaledwie dwanaście linii kodu.

Pokażę w jaki sposób odczytać programowo kolor zadanego piksela na ekranie. Umiejętność raczej rzadko potrzebna, ale nigdy nic nie wiadomo. A nuż ktoś kiedyś będzie potrzebował odczytać kolor piksela – i bang, oto jest. Czytaj dalej Pchełki VBA, odcinek 14: Kolorki

Pchełki VBA, odcinek 13: odrobina matematyki, czyli test AKS

Rzecz będzie o matematyce. Proszę się nie martwić, nie zamierzam dziś udowadniać, że P = NP ani hipotezy Riemanna. Nie zamierzam nawet tłumaczyć szczegółów tytułowego testu AKS. Wpomnę tylko o nim, a następnie rzucimy się w wir kodowania. Czytaj dalej Pchełki VBA, odcinek 13: odrobina matematyki, czyli test AKS

Pchełki VBA – Odcinek 12: Schowek

Jako wieloletni Bazyl, z odchyłami w kierunku hurtowni danych, muszę czasem pobawić się w tychże danych modelowanie. Modele danych dzielą się, w najszerszym ujęciu, na logiczne i fizyczne.

Modele logiczne próbują opisać dane w sposób przyjazny dla użytkowników końcowych: opisywane tam obiekty odnoszą się do elementów świata rzeczywistego (takich jak bank, kartofel czy komin), używa się tam też zwyczajowo oryginalnych, „ludzkich” nazw, a więc bulwa kartofla nazywać się będzie w modelu logicznym po prostu „Bulwa kartofla”. Czytaj dalej Pchełki VBA – Odcinek 12: Schowek