วิธีการเปิดและเติมเทมเพลตด้วย Excel VBA

แบ่งปันเลย:

โดยทั่วไปเทมเพลต Excel เป็นสมุดงานที่มีกรอบการรายงานซึ่งมักได้รับการสนับสนุนโดยฟังก์ชัน สามารถใช้เทมเพลต (xltx) ซ้ำแล้วซ้ำอีกโดยไม่ทำให้ข้อมูลเสียหาย หลังจากใส่ข้อมูลแล้วสมุดงานเทมเพลตจะถูกบันทึกเป็น xlsx โดยรักษาสถานะบริสุทธิ์ของ xltx ไว้

ในแบบฝึกหัดนี้เราจะใช้รหัส VBA เพื่อเปิดและเติมเทมเพลต เทมเพลต สามารถพบได้ Good Farm Animal Welfare Awards และ Excel Macro สามารถพบได้ Good Farm Animal Welfare Awards.

บทความนี้ถือว่าผู้อ่านมี Ribbon ของนักพัฒนาปรากฏอยู่และคุ้นเคยกับ VBA Editor มิฉะนั้นโปรดใช้“ แท็บนักพัฒนา Excel” ของ Google หรือ“ หน้าต่างรหัส Excel”

เทมเพลต

ขั้นแรกเราจะสร้างเทมเพลตจำลองที่มีข้อมูลตาราง Pivot และแผนภูมิดังนี้:

เปิดไฟล์ Excel ใหม่ เปลี่ยนชื่อ "Sheet1" เป็น "แผนภูมิ" และ "Sheet2" เป็น "Data"

คัดลอกข้อความต่อไปนี้รวมทั้งส่วนหัวลงใน D1 ของแท็บ "ข้อมูล":

กองอำนวยการ อ้างอิงงาน เพศ
เด็กและครอบครัว ชSW2588 หญิง
เด็กและครอบครัว ช RS2775 หญิง
เด็กและครอบครัว ชSW2630 หญิง
เด็กและครอบครัว ช RS2775 ชาย
เด็กและครอบครัว ช CC2628 หญิง
เด็กและครอบครัว ช HT2579 หญิง
สุขภาพชุมชน CW T (2559 หญิง
สุขภาพชุมชน CW QS2774 หญิง
สุขภาพชุมชน ซีดับบลิว O2745 ชาย
สภาพสิ่งแวดล้อม ศ. 2814 หญิง
สภาพสิ่งแวดล้อม ศ ธ . 2772 ชาย
สภาพสิ่งแวดล้อม ศศศ. 2784 ชาย
แหล่งข้อมูล RS CO2557 หญิง
แหล่งข้อมูล อาร์เอส HO2539 ชาย

เลือกข้อมูลทั้งหมดรวมถึงส่วนหัวของคอลัมน์และแทรกตาราง Pivot ที่ A1 ของแผ่นงาน“ Data” ดังที่แสดงด้านล่างแทรกตาราง Pivot ที่ A1 ของแผ่น "ข้อมูล"

สร้างแผนภูมิบนแท็บ "แผนภูมิ" โดยใช้ตาราง Pivot เป็นแหล่งข้อมูลสร้างแผนภูมิบนแท็บ "แผนภูมิ"

ลบข้อมูลใน D2: F15 ไม่จำเป็นต้องรีเซ็ตช่วงข้อมูลตาราง Pivot ปล่อยทิ้งไว้แม้ว่าจะไม่มีข้อมูลก็ตาม  ลบข้อมูลใน D2: F15

บันทึกเวิร์กบุ๊กเป็น“ VacancyTemplatexltx.” ในไดเร็กทอรีย่อยของไดเร็กทอรีที่ใช้มาโครเวิร์กบุ๊ก ตอบสนอง“ ไม่” สำหรับการแจ้งเตือนใด ๆ จาก Excel ในระหว่างการบันทึก

เราจะต้องมีไดเรกทอรีย่อยของรายงานด้วย ตัวอย่างเช่น:

รายงาน Excel (xlsm เก็บไว้ที่นี่)

| _แม่แบบ (xlxt เก็บไว้ที่นี่)

       | _ รายงาน (แต่ละ xlsx บันทึกไว้ที่นี่)

เมื่อบันทึกเป็นไฟล์ xltxปิดเทมเพลต

มาโคร

เปิดสมุดงานใหม่เพื่อเก็บรหัสของเรา เปลี่ยนชื่อ“ Sheet1” เป็น“ Main” และ“ Sheet2” เป็น“ Database”

วางปุ่มบน“ หลัก” เพื่อขับเคลื่อนแอปพลิเคชัน

โดยปกติข้อมูลจะถูกดึงมาจากฐานข้อมูล เนื่องจากไม่ใช่ทุกคนที่มีฐานข้อมูลสะดวกแผ่นงาน "ฐานข้อมูล" จึงจำลองตารางฐานข้อมูล

คัดลอกข้อมูลที่พบใน start ของบทความนี้ลงในแท็บ“ ฐานข้อมูล” ที่ A1 …คัดลอกข้อมูลที่พบใน Start ของบทความนี้ลงในแท็บฐานข้อมูลที่ A1

รหัส

โครงสร้างโค้ดด้านล่างกำหนดกระบวนการอย่างชัดเจน:

  • รับข้อมูลจาก "ฐานข้อมูล";
  • เปิดเทมเพลต
  • เติมเทมเพลตด้วยข้อมูลและรีเซ็ตช่วงข้อมูล Pivot Table
  • บันทึกเทมเพลตเป็นรายงาน
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 librarย. ดำเนินการผ่านเครื่องมือ> การอ้างอิงจากหน้าต่างรหัสอ้างอิง Active X Library

ทดสอบรหัส

กำหนดปุ่มบน“ หลัก” ให้ Openworkbook ย่อย บันทึกเวิร์กบุ๊กเป็น“ Populating Templates.xlsm”

ปิดเวิร์กบุ๊กแล้วเปิดใหม่

กดปุ่มเพื่อดูผลลัพธ์ เพิ่มจำนวนแถวข้อมูลใน "ฐานข้อมูล" และเรียกใช้อีกครั้งเพื่อดูว่าแผนภูมิได้รับการอัปเดตด้วยข้อมูลเพิ่มเติมหรือไม่

ในโค้ดด้านบนเราได้แสดงเทมเพลตก่อนหน้านี้ด้วย XL.Visible = จริง. ในสภาพแวดล้อมแบบสดสามารถทำได้ในตอนท้ายเพื่อไม่ให้เห็นการอัปเดตหน้าจอ

จัดการกับภัยพิบัติของข้อมูล!

มีบางสิ่งที่น่าผิดหวังกว่าไฟล์ Excel ที่ได้รับการพัฒนาอย่างมากการขัดข้องทำให้ไฟล์ต้นฉบับเสียหายและไม่มีสำเนาสำรอง ในกรณีเช่นนี้เมื่อ Excel ไม่สามารถกู้คืนไฟล์ที่เสียหายงานทั้งหมดที่ทำในไฟล์นั้นคือ lost เว้นแต่คุณจะมีเครื่องมือที่มีประโยชน์ แก้ไข Excel ไฟล์

นอกจากนี้ควรระมัดระวังในการสำรองงานที่มีคุณค่าบ่อยๆ

บทนำผู้เขียน:

Felix Hooker เป็นผู้เชี่ยวชาญด้านการกู้คืนข้อมูลใน DataNumen, Inc. ซึ่งเป็นผู้นำระดับโลกด้านเทคโนโลยีการกู้คืนข้อมูล ได้แก่ rar ซ่อมแซม และผลิตภัณฑ์ซอฟต์แวร์กู้คืน sql ดูข้อมูลเพิ่มเติมได้ที่ wwwdatanumenด้วย.

แบ่งปันเลย:

ความเห็นถูกปิด