W czasie dwóch prowadzonych szkoleń z VBA dla Excel w Krakowie i Wrocławiu padło pytanie o możliwość stworzenia czegoś na wzór przeglądarki zdjęć w Excelu w oparciu o nazwy plików graficznych umieszczonych w kolumnie arkusza.
Oczywiste pytanie, które również zadałem brzmiało- po co i dlaczego mielibyśmy tworzyć takie rozwiązanie? Jak się okazało, i tu będę bazował na podobnych elementach uzyskanych odpowiedzi, chodziło o szybką i skuteczną weryfikację jak wygląda dany produkt w bazie produktów danej firmy.
Poniżej przedstawiam wariant uproszczony przygotowany w trzech krokach. Wszelkie modyfikacje i rozszerzenia są jak najbardziej możliwe i zalecane.
Krok 1. Tworzymy listę plików graficznych.
W tym celu w komórce A1 dowolnego arkusza proszę wprowadzić ścieżkę do katalogu, w którym znajdują się nasze pliki graficzne, np: c:\Users\Imię Naziwsko\Documents\Moje obrazy.
Następnie proszę wywołać poniższe makro, którego celem będzie utworzenie listy wszystkich plików graficznych JPG począwszy od rzędu 11 w kolumnie A.
01 | Sub ListaPlikowKatalogu_All() |
04 | ChDir ActiveSheet.Cells(1, 1) |
10 | Cells(Wiersz, 1) = Dir( "*.jpg" ) |
15 | Cells(Wiersz, 1) = TMP |
Krok 2. Wstawianie i usuwanie grafiki.
Poniższe dwa makra będą odpowiedzialne za wyświetlenie oraz usunięcie pliku graficznego z naszego arkusza. Dodatkowe informacje na temat ich działania zawarte są w komentarzach wewnątrz kodu.
01 | Sub Pokaz_Fote(Kolumna) |
03 | Sciezka = ActiveSheet.Cells(1, Kolumna) |
04 | Nazwa = Sciezka & "\" & ActiveCell.Value |
08 | Kasuje_Wszystkie_Kształty |
12 | ActiveSheet.Shapes.AddPicture Nazwa, True , True , _ |
13 | ActiveCell.Offset(0, 1).Left, _ |
14 | ActiveCell.Offset(0, 1).Top, 1600, 1600 |
17 | With ActiveSheet.Shapes(1) |
18 | .LockAspectRatio = msoTrue |
19 | .ScaleHeight 1, msoTrue, msoScaleFromTopLeft |
1 | Sub Kasuje_Wszystkie_Kształty() |
3 | For Each SHP In ActiveSheet.Shapes |
Krok 3. Automatyczne działanie z pomocą obsługi zdarzenia.
Na koniec połączymy nasze makra ze zdarzeniem. Chcemy bowiem aby wyświetlił się nam obraz tylko wtedy, gdy zaznaczymy pojedynczą komórkę w kolumnie zawierającej nazwę pliku, a w każdym z pozostałych przypadków chcemy usunąć zbędną grafikę. W tym celu w module naszego arkusza dodamy następujący kod obsługi zdarzenia
Worksheet_SelectionChange:
01 | Private Sub Worksheet_SelectionChange( ByVal Target As Range) |
02 | On Error GoTo ErrorHandler |
05 | If Target.Row > 10 And Target.Cells.Count = 1 And _ |
06 | UCase(Right(Target.Value, 3)) = "JPG" Then |
08 | Call Wstawianie_Zdjec.Pokaz_Fote(Target.Column) |
11 | Kasuje_Wszystkie_Kształty |
15 | Debug.Print "Błąd obsługi zdarzenia o godzinie: " & Time |
Brak komentarzy:
Prześlij komentarz