วิธีการทำให้ Microsoft Excel ทำงานอัตโนมัติจาก Visual Basic

สรุป

บทความนี้อธิบายเกี่ยวกับวิธีการสร้างและใช้งาน Excel โดยใช้การทำงานอัตโนมัติจาก Visual Basic

ข้อมูลเพิ่มเติม

การควบคุมเซิร์ฟเวอร์ Automation สามารถทำได้สองวิธี: โดยใช้การรวมภายหลังหรือการรวมก่อนหน้าอย่างใดอย่างหนึ่ง สำหรับการรวมภายหลัง วิธีการต่างๆ จะไม่ถูกรวมจนกว่าจะใช้งานจริงและเซิร์ฟเวอร์ Automation จะถูกประกาศให้เป็นวัตถุ สำหรับการรวมก่อนหน้า โปรแกรมประยุกต์ของคุณจะรับทราบถึงชนิดของวัตถุที่ถูกต้องที่จะทำการสื่อสารด้วยในขณะออกแบบ และสามารถประกาศวัตถุตามชนิดที่ระบุ ตัวอย่างนี้ใช้การรวมก่อนหน้า ซึ่งโดยส่วนใหญ่แล้ววิธีนี้ได้รับการพิจารณาว่าดีกว่าเนื่องจากทำให้เกิดประสิทธิภาพในการทำงานมากกว่าและความปลอดภัยดีกว่า

ในการรวมก่อนหน้ากับเซิร์ฟเวอร์ Automation คุณจำเป็นต้องตั้งค่าการอ้างอิงไปที่ไลบรารีชนิดของเซิร์ฟเวอร์นั้น ใน Visual Basic การดำเนินการนี้สามารถทำได้ผ่านทางกล่องโต้ตอบ การอ้างอิง ภายใต้เมนู โครงการ | การอ้างอิง สำหรับตัวอย่างนี้ คุณจำเป็นต้องเพิ่มการอ้างอิงไปยังไลบรารีชนิดสำหรับ Excel ก่อนจึงจะสามารถใช้งานโค้ดนี้ได้ ดูขั้นตอนการเพิ่มการอ้างอิงดังแสดงด้านล่าง

การสร้างตัวอย่าง Automation

  1. เริ่ม Visual Basic และสร้างโครงการ EXE แบบมาตรฐานขึ้นใหม่ Form1 จะถูกสร้างขึ้นตามค่าเริ่มต้น
  2. คลิกที่โครงการ แล้วคลิก การอ้างอิง กล่องโต้ตอบ การอ้างอิง จะปรากฏขึ้น เลื่อนลงมาตามรายการจนคุณพบ ไลบรารีวัตถุ Microsoft Excel แล้วเลือกรายการดังกล่าวเพื่อเพิ่มการอ้างอิงให้ Excel ถ้าไลบรารีวัตถุที่ถูกต้องสำหรับ Excel รุ่นของคุณไม่มีอยู่ในรายการ ให้ตรวจสอบว่าคุณได้ติดตั้ง Excel รุ่นที่คุณมีอยู่อย่างถูกต้องแล้ว

    หมายเหตุ
    • ถ้าคุณใช้การทำงานอัตโนมัติสำหรับ Microsoft Office Excel 2007 ไลบรารีชนิดจะปรากฏเป็น ไลบรารีวัตถุ Microsoft Excel 12.0 ในรายการ การอ้างอิง
    • ถ้าคุณใช้การทำงานอัตโนมัติสำหรับ Microsoft Office Excel 2003 ไลบรารีชนิดจะปรากฏเป็น ไลบรารีวัตถุ Microsoft Excel 11.0 ในรายการ การอ้างอิง
    • ถ้าคุณใช้การทำงานอัตโนมัติสำหรับ Microsoft Excel 2002 ไลบรารีชนิดจะปรากฏเป็น ไลบรารีวัตถุ Microsoft Excel 10.0 ในรายการ การอ้างอิง
    • ถ้าคุณใช้การทำงานอัตโนมัติสำหรับ Microsoft Excel 2000 ไลบรารีชนิดจะปรากฏเป็น ไลบรารีวัตถุ Microsoft Excel 9.0 ในรายการ การอ้างอิง
    • ถ้าคุณใช้การทำงานอัตโนมัติสำหรับ Microsoft Excel 97 ไลบรารีชนิดจะปรากฏเป็น ไลบรารีวัตถุ Microsoft Excel 8.0 ในรายการ การอ้างอิง
  3. คลิก ตกลง เพื่อปิดกล่องโต้ตอบ การอ้างอิง
  4. เพิ่ม CommandButton ลงใน Form1
  5. ในหน้าต่างโค้ดสำหรับ Form1 ให้เพิ่มโค้ดดังต่อไปนี้:
       Option Explicit

    Private Sub Command1_Click()
    Dim oXL As Excel.Application
    Dim oWB As Excel.Workbook
    Dim oSheet As Excel.Worksheet
    Dim oRng As Excel.Range


    'On Error GoTo Err_Handler

    ' เริ่ม Excel และรับวัตถุ โปรแกรมประยุกต์
    Set oXL = CreateObject("Excel.Application")
    oXL.Visible = True

    ' เปิดสมุดงานใหม่
    Set oWB = oXL.Workbooks.Add
    Set oSheet = oWB.ActiveSheet

    ' เพิ่มส่วนหัวของตารางทีละเซลล์
    oSheet.Cells(1, 1).Value = "First Name"
    oSheet.Cells(1, 2).Value = "Last Name"
    oSheet.Cells(1, 3).Value = "Full Name"
    oSheet.Cells(1, 4).Value = "Salary"


    ' จัดรูปแบบเซลล์ A1:D1 เป็นแบบตัวหนา การจัดแนวตามแนวตั้ง = กึ่งกลาง
    With oSheet.Range("A1", "D1")
    .Font.Bold = True
    .VerticalAlignment = xlVAlignCenter
    End With

    ' สร้างอาร์เรย์เพื่อตั้งค่าหลายๆ ค่าพร้อมกัน
    Dim saNames(5, 2) As String
    saNames(0, 0) = "John"
    saNames(0, 1) = "Smith"
    saNames(1, 0) = "Tom"
    saNames(1, 1) = "Brown"
    saNames(2, 0) = "Sue"
    saNames(2, 1) = "Thomas"
    saNames(3, 0) = "Jane"

    saNames(3, 1) = "Jones"
    saNames(4, 0) = "Adam"
    saNames(4, 1) = "Johnson"

    ' เติมเซลล์ A2:B6 ด้วยอาร์เรย์ของค่าต่างๆ (ชื่อและนามสกุล)
    oSheet.Range("A2", "B6").Value = saNames

    ' เติมเซลล์ C2:C6 ด้วยสูตรแบบสัมพัทธ์ (=A2 & " " & B2)
    Set oRng = oSheet.Range("C2", "C6")
    oRng.Formula = "=A2 & "" "" & B2"

    ' เติมเซลล์ D2:D6 ด้วยสูตร(=RAND()*100000) และใช้งานรูปแบบ
    Set oRng = oSheet.Range("D2", "D6")
    oRng.Formula = "=RAND()*100000"
    oRng.NumberFormat = "$0.00"

    ' ปรับคอลัมน์ A:D ให้พอดีโดยอัตโนมัติ
    Set oRng = oSheet.Range("A1", "D1")
    oRng.EntireColumn.AutoFit

    ' ใช้จำนวนคอลัมน์ที่เปลี่ยนแปลงได้สำหรับ Quarterly Sales Data
    Call DisplayQuarterlySales(oSheet)

    ' ตรวจสอบให้แน่ใจว่า Excel มองเห็นได้และผู้ใช้สามารถควบคุม
    ' ได้ตลอดการใช้งานของ Microsoft Excel
    oXL.Visible = True
    oXL.UserControl = True

    ' ตรวจสอบให้แน่ใจว่าคุณปล่อยการอ้างอิงวัตถุแล้ว
    Set oRng = Nothing
    Set oSheet = Nothing
    Set oWB = Nothing
    Set oXL = Nothing

    Exit Sub
    Err_Handler:
    MsgBox Err.Description, vbCritical, "Error: " & Err.Number
    End Sub

    Private Sub DisplayQuarterlySales(oWS As Excel.Worksheet)
    Dim oResizeRange As Excel.Range
    Dim oChart As Excel.Chart
    Dim iNumQtrs As Integer
    Dim sMsg As String
    Dim iRet As Integer

    ' กำหนดจำนวนไตรมาสที่จะแสดงข้อมูล
    For iNumQtrs = 4 To 2 Step -1
    sMsg = "Enter sales data for" & Str(iNumQtrs) & " quarter(s)?"
    iRet = MsgBox(sMsg, vbYesNo Or vbQuestion _
    Or vbMsgBoxSetForeground, "Quarterly Sales")
    If iRet = vbYes Then Exit For
    Next iNumQtrs


    sMsg = "Displaying data for" & Str(iNumQtrs) & " quarter(s)."
    MsgBox sMsg, vbMsgBoxSetForeground, "Quarterly Sales"

    ' เริ่มต้นที่เซลล์ E1 เติมส่วนหัวสำหรับจำนวนคอลัมน์ที่เลือกไว้
    Set oResizeRange = oWS.Range("E1", "E1").Resize(ColumnSize:=iNumQtrs)

    oResizeRange.Formula = "=""Q"" & COLUMN()-4 & CHAR(10) & ""Sales"""

    ' เปลี่ยนคุณสมบัติการวางแนวและการตัดข้อความสำหรับส่วนหัว
    oResizeRange.Orientation = 38
    oResizeRange.WrapText = True

    ' เติมสีภายในของส่วนหัว
    oResizeRange.Interior.ColorIndex = 36

    ' เติมค่าสูตรในคอลัมน์และใช้รูปแบบตัวเลข
    Set oResizeRange = oWS.Range("E2", "E6").Resize(ColumnSize:=iNumQtrs)
    oResizeRange.Formula = "=RAND()*100"
    oResizeRange.NumberFormat = "$0.00"

    ' เลือกใช้เส้นขอบสำหรับข้อมูลและส่วนหัวของ Sales
    Set oResizeRange = oWS.Range("E1", "E6").Resize(ColumnSize:=iNumQtrs)
    oResizeRange.Borders.Weight = xlThin

    ' เพิ่มสูตร Totals สำหรับข้อมูลการขายและเลือกใช้เส้นขอบ
    Set oResizeRange = oWS.Range("E8", "E8").Resize(ColumnSize:=iNumQtrs)
    oResizeRange.Formula = "=SUM(E2:E6)"
    With oResizeRange.Borders(xlEdgeBottom)
    .LineStyle = xlDouble
    .Weight = xlThick
    End With

    ' เพิ่มแผนภูมิสำหรับข้อมูลที่เลือกไว้
    Set oResizeRange = oWS.Range("E2:E6").Resize(ColumnSize:=iNumQtrs)
    Set oChart = oWS.Parent.Charts.Add
    With oChart
    .ChartWizard oResizeRange, xl3DColumn, , xlColumns
    .SeriesCollection(1).XValues = oWS.Range("A2", "A6")
    For iRet = 1 To iNumQtrs
    .SeriesCollection(iRet).Name = "=""Q" & Str(iRet) & """"
    Next iRet
    .Location xlLocationAsObject, oWS.Name
    End With

    ' ย้ายตำแหน่งแผนภูมิเพื่อไม่ให้บังข้อมูลของคุณ
    With oWS.Shapes("Chart 1")
    .Top = oWS.Rows(10).Top
    .Left = oWS.Columns(2).Left

    End With

    ' ลบการอ้างอิงใดๆ
    Set oChart = Nothing
    Set oResizeRange = Nothing

    End Sub

  6. กดแป้น F5 เพื่อเรียกใช้โครงการ

ข้อมูลอ้างอิง

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ Office Automation โปรดแวะไปที่เว็บไซต์บริการช่วยเหลือของ Microsoft Office Development ต่อไปนี้: (c) Microsoft Corporation 1999 สงวนลิขสิทธิ์ เขียนโดย Richard R. Taylor, Microsoft Corporation

คุณสมบัติ

รหัสบทความ: 219151 - การตรวจสอบครั้งสุดท้าย: 3 มิ.ย. 2008 - ฉบับแก้ไข: 1

คำติชม