如何使用Excel VBA打開和填充模板

立即分享:

Excel模板通常是工作簿,帶有報錶框架,通常受功能支持。 可以反複使用模板(xltx),而不會污染數據。 填充數據後,將模板工作簿另存為xlsx,以保留xltx本身的原始狀態。

在本練習中,我們將使用VBA代碼打開並填充模板。 模板 可以發現 此處 和使用的Excel宏可以找到 此處.

本文假定讀者已顯示“開發人員”功能區,並且熟悉VBA編輯器。 如果沒有,請使用Google“ Excel開發人員標籤”或“ Excel代碼窗口”。

模板

首先,我們將構建一個虛擬模板,其中填充了數據,數據透視表和圖表,如下所示:

打開一個新的Excel文件。 將“ Sheet1”重命名為“ Chart”,將“ Sheet2”重命名為“ Data”

將以下文本(包括標題)複製到“數據”選項卡的D1中:

首長級 求職者 性別
兒童與家庭 通道SW2588 女性
兒童與家庭 通道 RS2775 女性
兒童與家庭 通道SW2630 女性
兒童與家庭 通道 RS2775 男性
兒童與家庭 CH CC2628 女性
兒童與家庭 HT2579 女性
社區健康 連續波(2559 女性
社區健康 連續波QS2774 女性
社區健康 連續波O2745 男性
環境 EE SM2814 女性
環境 EE IT2772 男性
環境 EE SO2784 男性
資源中心 RS CO2557 女性
資源中心 RS HO2539 男性

選擇所有數據,包括列標題,然後在“數據”表的A1處插入數據透視表,如下所示。在“數據”表的A1處插入數據透視表

使用數據透視表作為數據源,在“圖表”選項卡上創建圖表。在“圖表”選項卡上創建圖表

刪除D2:F15中的數據。 無需重置數據透視表數據范圍; 即使沒有數據,也要填充它。  刪除D2:F15中的數據

將工作簿另存為“ VacancyTemplate。lt。” 在宏工作簿所在的子目錄中。 在保存過程中,對來自Excel的任何警報響應“否”。

我們還將需要一個Reports子目錄。 例如:

Excel報表 (xlsm存儲在此處)

| _模板 (xlxt存儲在此處)

       | _報告 (每個xlsx保存在此處)

一旦另存為 lt,關閉模板

打開一個新的工作簿來保存我們的代碼。 將“ Sheet1”重命名為“ Main”,將“ Sheet2”重命名為“ Database”。

在“ Main”上放置一個按鈕以驅動該應用程序。

通常,數據是從數據庫中檢索的。 由於並非所有人都可以使用數據庫,因此“數據庫”表將模擬數據庫表。

複製在s找到的數據tar將本文的t放入A1的“數據庫”標籤中…複製在S處找到的數據tar本文的詳細信息放入A1的“數據庫”選項卡

守則

下面的代碼結構清楚地定義了過程:

  • 從“數據庫”中獲取數據;
  • 打開模板;
  • 用數據填充模板並重置數據透視表數據范圍;
  • 將模板另存為報告
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

ActiveX數據對象

為了模擬數據庫讀取,我們必須引用Active X庫rary。 通過代碼窗口中的“工具”>“參考”來執行此操作。參考Active X Library

測試代碼

將“主”上的按鈕分配給 子Openworkbook。 將工作簿另存為“ Populating Templates.xlsm”。

關閉工作簿,然後重新打開它。

按下按鈕查看結果。 增加“數據庫”中的數據行數,然後再次運行,查看圖表是否已使用其他信息進行了更新。

在上面的代碼中,我們已經儘早顯示了模板, XL.Visible = 真。 在實時環境中,這可以在最後完成,這樣就不會顯示屏幕更新。

處理數據災難!

沒有什麼比發達的Excel文件崩潰,破壞源文件且沒有可用的備份副本更令人沮喪的了。 在這種情況下,如果Excel無法恢復損壞的文件,則對它所做的所有工作都是ost 除非您有方便的工具 修復Excel 文件。

經常備份有價值的工作也是謹慎的。

作者簡介:

Felix Hooker是的數據恢復專家 DataNumen,Inc.是數據恢復技術的全球領導者,包括 rar 修復 和sql恢復軟件產品。 欲了解更多信息,請訪問 萬維網。datanumen.COM

立即分享:

評論被關閉。