Ako otvoriť a naplniť šablónu pomocou programu Excel VBA

Zdieľať teraz:

Šablóny programu Excel sú zvyčajne zošity s rámcom prehľadov, ktoré často podporujú funkcie. Šablóny (xltx) je možné používať opakovane bez toho, aby ste ich znečisťovali údajmi. Po naplnení údajmi sa zošit šablóny uloží ako súbor xlsx, čím sa zachová panenský stav samotného súboru xltx.

V tomto cvičení použijeme kód VBA na otvorenie a vyplnenie šablóny. Šablóna možno nájsť tu a použité Excel Makro nájdete tu.

Tento článok predpokladá, že čitateľ má zobrazenú pásku pre vývojárov a je oboznámený s editorom VBA. Ak nie, navštívte Google kartu „Vývojár Excel“ alebo „Okno kódu Excel“.

Šablóna

Najskôr vytvoríme fiktívnu šablónu vyplnenú údajmi, kontingenčnou tabuľkou a grafom, a to nasledovne:

Otvorte nový súbor programu Excel. Premenujte „List1“ na „Graf“ a „List2“ na „Údaje“

Skopírujte nasledujúci text vrátane nadpisov do časti D1 na karte „Údaje“:

riaditeľstvo JobRef Rod
Deti a rodina CH SW2588 Žena
Deti a rodina CH RS2775 Žena
Deti a rodina CH SW2630 Žena
Deti a rodina CH RS2775 Muž
Deti a rodina CH CC2628 Žena
Deti a rodina CH HT2579 Žena
Zdravie Spoločenstva CW T (2559 Žena
Zdravie Spoločenstva CW QS2774 Žena
Zdravie Spoločenstva CW O2745 Muž
prostredie EE SM2814 Žena
prostredie EE IT2772 Muž
prostredie EE SO2784 Muž
Zdroje RS CO2557 Žena
Zdroje RS HO2539 Muž

Vyberte všetky údaje vrátane nadpisov stĺpcov a vložte kontingenčnú tabuľku do bodu A1 listu „Údaje“, ako je uvedené nižšie.Vložte kontingenčnú tabuľku do A1 tabuľky s údajmi

Vytvorte graf na karte „Graf“ pomocou kontingenčnej tabuľky ako zdroja údajov.Vytvorte graf na karte „Graf“

Odstráňte údaje z D2: F15. Nie je potrebné resetovať rozsah údajov kontingenčnej tabuľky; nechajte ho vyplnený, aj keď nie sú k dispozícii žiadne údaje.  Odstráňte údaje z D2: F15

Uložte zošit ako „VacancyTemplate.xltx. “ v podadresári toho, v ktorom sa má nachádzať zošit makra. Počas ukladania odpovedzte „nie“ na akékoľvek upozornenia z Excelu.

Budeme tiež potrebovať podadresár Reports. Napríklad:

Správy programu Excel (xlsm uložený tu)

| _šablóny (tu je uložený xlxt)

       | _Správy (každý xlsx tu bol uložený)

Po uložení ako xltx, zavrite šablónu

Makro

Otvorte nový zošit, v ktorom bude uložený náš kód. Premenujte „List1“ na „Hlavný“ a „List2“ na „Databáza“.

Ak chcete spustiť aplikáciu, umiestnite tlačidlo na „Hlavná“.

Za normálnych okolností sa údaje získavajú z databáz. Pretože nie každý má databázu po ruke, list „Databáza“ bude emulovať databázovú tabuľku.

Skopírujte údaje nájdené na start tohto článku na kartu „Databáza“ na A1 ...Skopírujte údaje nájdené v Start tohto článku Na kartu Databáza na A1

Kódex

Štruktúra kódu nižšie jasne definuje procesy:

  • Získajte údaje z „databázy“;
  • Otvorte šablónu;
  • Vyplňte šablónu údajmi a vynulujte rozsah údajov kontingenčnej tabuľky;
  • Šablónu uložte ako správu
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

Dátové objekty ActiveX

Aby sme mohli simulovať načítanie databázy, musíme odkazovať na knižnicu Active X librarr. Urobíte to cez Nástroje> Odkazy v okne kódu.Referencia The Active X Library

Vyskúšajte kód

Priraďte tlačidlo na „hlavnej“ k Vedľajší openworkbook. Uložte zošit ako „Populating Templates.xlsm“.

ZATVORTE zošit a znova ho otvorte.

Stlačením tlačidla zobrazíte výsledok. Zvýšte počet riadkov údajov v databáze a znova spustite databázu, aby ste zistili, či bol graf aktualizovaný o ďalšie informácie.

V kóde vyššie sme šablónu zobrazili skôr, s XL.Visible = Pravda. V živom prostredí je to možné urobiť úplne na konci, takže aktualizácie obrazovky nie sú viditeľné.

Zaoberajte sa katastrofou dát!

Máločo je frustrujúcejšie ako zlyhanie veľmi vyvinutého súboru programu Excel, ktorý poškodí zdrojový súbor a nie je k dispozícii žiadna záložná kópia. V takých prípadoch, keď program Excel nedokáže obnoviť poškodený súbor, bude všetka práca na ňom vykonaná lost pokiaľ nemáte po ruke nejaký nástroj opraviť Excel súbory.

Je tiež rozumné často zálohovať hodnotnú prácu.

Úvod autora:

Felix Hooker je expert na obnovu dát v DataNumen, Inc., ktorá je svetovým lídrom v oblasti technológií obnovy dát, vrátane rar oprava a softvérové ​​produkty na obnovenie sql. Pre viac informácií navštívte www.datanumen. S

Zdieľať teraz:

Komentáre sú uzavreté.