poniedziałek, 12 sierpnia 2013

Zapisanie zakresu komórek arkusza w postaci pliku JPG

Niniejsze rozwiązanie znane jest wielu praktykom VBA, szczególnie tym osobom, które wysyłają  fragmenty arkusza w postaci grafiki wstawionej w wiadomości e-mail.

Jak wyglądać będzie makro, którego zadaniem będzie zapisanie utworzenie pliku graficznego JPG prezentującego fragment obszaru arkusza? Pełne rozwiązanie poniżej. W tym wypadku wszystkie dodatkowe komentarze zostały umieszczone poniżej.

01Sub SaveRangeAsJPG()
02 
03Dim SHT As Worksheet
04Dim RNG As Range
05 
06    Application.ScreenUpdating = False
07    
08    'określamy arkusz z naszym obszare
09    Set SHT = Sheets("Arkusz1")
10 
11    'określamy zakres, który będziemy eksportować...
12    Set RNG = SHT.Range("A1:D5")
13    '... kopiujemy ten obszar
14    RNG.CopyPicture Appearance:=xlScreen, Format:=xlPicture
15 
16    'cały trick kryje się w następujących krokach:
17        '1. tworzymy wykres- proszę zwrócić uwagę na _
18        szerokość i wysokość wykresu- taki zapis pozawala _
19        zachować proporcje naszego obszaru
20    With SHT.ChartObjects.Add(Left:=100, Top:=100, _
21                        Width:=RNG.Width, Height:=RNG.Height)
22        With .Chart
23            'wklejamy w wykres nasze komórki
24            .Paste
25            
26            'wykorzystujemy metodę export wykresu
27            .Export ThisWorkbook.Path & "\TabelaExport.jpg"
28        End With
29        
30        'dla porządku usuwamy wykres- nie jest nam już potrzebny
31        .Delete
32 
33    End With
34 
35End Sub

I jeszcze dwa obrazy graficzne na koniec- zrzut ekranu z naszą tabelą, która została poddana procesowi exportu oraz plik, który powstał w wyniku działania powyższego makra.









2 komentarze:

  1. Witam,
    A czy istenie sposob zeby zapisac wiele arkuszy do pilow jpg w jednym makrze? powiedzmy 40 arkuszy i aby stworzylo 40 plikow o takim samym zakresie komorek.

    OdpowiedzUsuń
  2. Panie Rafale,
    oczywiście, wystarczy 'podłączyć' powyższy mechanizm pod prostą pętle For...Next. Tym bardziej jest to proste w sytuacji, gdy chce Pan zachować ten sam układ zakresu komórek.

    OdpowiedzUsuń