Jak otworzyć i wypełnić szablon za pomocą Excel VBA

Podziel się teraz:

Szablony programu Excel to zazwyczaj skoroszyty z ramą raportowania, często obsługiwane przez funkcje. Szablony (xltx) mogą być używane wielokrotnie, bez zanieczyszczania go danymi. Po wypełnieniu danymi skoroszyt szablonu jest zapisywany jako plik xlsx, zachowując pierwotny stan samego xltx.

W tym ćwiczeniu użyjemy kodu VBA do otwarcia i wypełnienia szablonu. Szablon można znaleźć w tym miejscu i używane makro programu Excel można znaleźć w tym miejscu.

W tym artykule założono, że czytelnik ma wyświetloną wstążkę programisty i zna edytor VBA. Jeśli nie, wybierz Google „Excel Developer Tab” lub „Excel Code Window”.

Szablon

Najpierw zbudujemy fikcyjny szablon wypełniony danymi, tabelą przestawną i wykresem w następujący sposób:

Otwórz nowy plik Excel. Zmień nazwę „Arkusz1” na „Wykres” i „Arkusz2” na „Dane”

Skopiuj następujący tekst wraz z nagłówkami do D1 zakładki „Dane”:

Dyrektoriat Nr ref Płeć
Dzieci i rodzina SW2588 Kobieta
Dzieci i rodzina Kanał RS2775 Kobieta
Dzieci i rodzina SW2630 Kobieta
Dzieci i rodzina Kanał RS2775 Mężczyzna
Dzieci i rodzina CH CC2628 Kobieta
Dzieci i rodzina CH HT2579 Kobieta
Zdrowie społeczności CW T (2559 Kobieta
Zdrowie społeczności CWQS2774 Kobieta
Zdrowie społeczności CW O2745 Mężczyzna
Środowisko EESM2814 Kobieta
Środowisko EE IT2772 Mężczyzna
Środowisko EE SO2784 Mężczyzna
Zasoby RS CO2557 Kobieta
Zasoby RSHO2539 Mężczyzna

Wybierz wszystkie dane, w tym nagłówki kolumn, i wstaw tabelę przestawną w A1 arkusza „Dane”, jak pokazano poniżej.Wstaw tabelę przestawną w A1 arkusza „Dane”

Utwórz wykres na karcie „Wykres”, używając tabeli przestawnej jako źródła danych.Utwórz wykres na karcie „Wykres”

Usuń dane w D2: F15. Nie ma potrzeby resetowania zakresu danych tabeli przestawnej; pozostaw je wypełnione, nawet jeśli nie ma danych.  Usuń dane w D2: F15

Zapisz skoroszyt jako „VacancyTemplate.xltx. ” w podkatalogu tego, w którym ma znajdować się skoroszyt makr. Odpowiedz „Nie” na wszelkie alerty programu Excel podczas zapisywania.

Będziemy również potrzebować podkatalogu Raporty. Na przykład:

Raporty programu Excel (xlsm przechowywany tutaj)

| _Szablony (xlxt przechowywany tutaj)

       | _Reports (każdy zapisany plik xlsx tutaj)

Po zapisaniu jako xltxzamknij szablon

Makro

Otwórz nowy skoroszyt do przechowywania naszego kodu. Zmień nazwę „Sheet1” na „Main” i „Sheet2” na „Database”.

Umieść przycisk na „Głównym”, aby sterować aplikacją.

Zwykle dane są pobierane z baz danych. Ponieważ nie każdy ma pod ręką bazę danych, arkusz „Baza danych” będzie emulować tabelę bazy danych.

Skopiuj dane znalezione na początku artykułu do zakładki „Baza danych” na stronie A1…Skopiuj dane znalezione na początku tego artykułu do zakładki bazy danych na stronie A1

Kod

Poniższa struktura kodu jasno definiuje procesy:

  • Pobierz dane z „bazy danych”;
  • Otwórz szablon;
  • Wypełnij szablon danymi i zresetuj zakres danych tabeli przestawnej;
  • Zapisz szablon jako raport
Option Explicit
    'Create objects to represent the template workbook and worksheets
    Public wb As Object
    Public XL As Object
    Public connDB As New ADODB.Connection
    Public rs As ADODB.Recordset
    Public eRow As Integer
    Public eRec As Integer
    Public dDate As String

Sub openWorksheet()
    Call GetData
    Call OpenTemplate
    Call PopulateTemplate
    
    'Save template as datestamped xlsx
    On Error Resume Next
    dDate = Format(Now(), "yyyy.mm.dd")
    wb.SaveAs Filename:=ActiveWorkbook.Path & "\Reports\Vacancies" & dDate & ".xlsx", _
         FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False

     Sheets("Main").Activate        'Move off the database tab
     wb.Activate            'Bring the chart to the fore
     Set wb = Nothing
     Set XL = Nothing
     Set rs = Nothing
     Set connDB = Nothing
End Sub

Sub GetData()
    'Emulate database retrieval
    If connDB.State = 1 Then connDB.Close
    Sheets("Database").Activate
    Sheets("Database").Range("A1").Select
    Selection.End(xlDown).Select
    
    eRec = ActiveCell.Row - 1 'establish how many records will be in the recordset
                     'This step won't be needed in a database environment
    eRow = ActiveCell.Row   'the end row, used later in the template
    
    connDB.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
      "Data Source=" & ActiveWorkbook.FullName & ";" & _
      "Extended Properties=Excel 12.0;"
        
    Set rs = New ADODB.Recordset
    rs.Open "Select top " & eRec & " * from [Database$]", connDB, , , adCmdText
End Sub

 Sub OpenTemplate()
    Set XL = CreateObject("Excel.Application")
    XL.Visible = True       'enables us to see what's happening on debug.
    XL.Workbooks.Add ActiveWorkbook.Path & "\Templates\VacancyTemplate.xltx"
    Set wb = XL.ActiveWorkbook             'the new workbook is referenced by "wb"
 End Sub
 
 Sub PopulateTemplate()
    wb.Sheets("Data").Activate
    wb.Sheets("Data").Range("D2").CopyFromRecordset rs
    wb.Sheets("Data").Range("A1").Select
    
    'resize the range driving the pivot table, using the eRow variable.
    wb.Sheets("Data").PivotTables("PivotTable1").ChangePivotCache wb. _
        PivotCaches.Create(SourceType:=xlDatabase, SourceData:="Data!R1C4:R" & eRow & "C6", _
        Version:=xlPivotTableVersion14)
    wb.Sheets("Chart").Select

 End Sub

Obiekty danych ActiveX

Aby zasymulować odczyt bazy danych, musimy odwołać się do biblioteki Active X. Można to zrobić w oknie kodu, wybierając Narzędzia>Odwołania.Odniesienie do biblioteki Active X

Przetestuj kod

Przypisz przycisk „Main” do Sub Openworkbook. Zapisz skoroszyt jako „Populating Templates.xlsm”.

ZAMKNIJ skoroszyt i otwórz go ponownie.

Naciśnij przycisk, aby zobaczyć wynik. Zwiększ liczbę wierszy danych w „Bazie danych” i uruchom ponownie, sprawdzając, czy Wykres został zaktualizowany o dodatkowe informacje.

W powyższym kodzie wcześnie pokazaliśmy szablon z XL.Widoczny = Prawda. W środowisku na żywo można to zrobić na samym końcu, aby aktualizacje ekranu nie były widoczne.

Radzić sobie z katastrofą danych!

Niewiele rzeczy jest bardziej frustrujących niż awaria rozbudowanego pliku Excela, uszkodzenie pliku źródłowego i brak kopii zapasowej. W takich przypadkach, gdy Excel nie jest w stanie odzyskać uszkodzonego pliku, cała praca nad nim zostaje utracona, chyba że masz pod ręką narzędzie, które pomoże Ci go odzyskać. naprawić program Excel akta.

Rozsądne jest również częste tworzenie kopii zapasowych wartościowych prac.

Wprowadzenie autora:

Felix Hooker jest ekspertem w dziedzinie odzyskiwania danych w DataNumen, Inc., która jest światowym liderem w technologiach odzyskiwania danych, w tym naprawa rar i oprogramowanie do odzyskiwania sql. po więcej informacji odwiedź www.datanumen.com

Podziel się teraz:

Możliwość dodawania komentarzy nie jest dostępna.