วันอังคารที่ 14 กันยายน พ.ศ. 2553

VBA Excel ตอน การเปิดไฟล์ Excel ด้วย VBA

สวัสดีตอนเช้าครับท่านผู้อ่าน How to excel บทความนี้ยังเป็นการนำเสนอ Excel utility สำหรับเตรียมพร้อมในการสร้างระบบการประเมินผลด้วย KPI ที่ผมได้นำเสนอเป็น Serie ค้างไว้ เนื่องด้วยอยากปูพื้นฐานถึงที่มาที่ไปของการทำงานในระบบการประเมินผลของเรา Excel utility ในบทความนี้ขอกล่าวถึงการเปิดไฟล์ Excel ครับ เนื่องด้วยหากท่านผู้อ่านย้อนกลับยัง Serie ระบบการประเมินผลด้วย KPI ท่านจะเห็นว่า เราจำเป็นต้องเข้าไปอ่านข้อมูลการประมวลผล KPI ของ KPI ระดับต่างๆดังแสดงในภาพที่ 1

KPIภาพที่ 1 ลักษณะการเข้าถึงข้อมูลผลการชี้วัด KPI

สิ่งแรกที่ต้องทำในการเข้าไปอ่านข้อมูลและดึงข้อมูลมาเก็บที่ไฟล์ Excel (สรุปผล KPI.xls) ก็คือต้องทำการเปิดไฟล์ก่อนครับ เริ่มจากสร้างปุ่มกด Worksheets ของไฟล์ สรุปผล KPI.xls สำหรับเรียกใช้งาน Macro และสร้าง Macroในการเปิดไฟล์ สมมุติให้ชื่อว่า ImportData_Click ซึ่งมีรายละเอียดดังนี้ครับ

Sub ImportData_Click()
Dim cur As Integer
Dim actWBName As String
actWBName = ActiveWorkbook.Name
With Application.FileDialog(msoFileDialogOpen)
.Title = "Select File"
.AllowMultiSelect = False
.Show
Workbooks.Open (.SelectedItems(1))
cur = Workbooks.Count
Workbooks(cur).Activate

‘ Do some thing


Workbooks(cur).Close
Workbooks(actWBName).Activate
End With
End Sub

สามารอธิบายการทำงานของ VBA โค้ดได้ดังนี้ครับ

Dim cur As Integer
Dim actWBName As String

กำหนดตัวแปร cur สำหรับเก็บตำแหน่งของ workbooks ล่าสุด กำหนดตัวแปร actWBName สำหรับเก็บชื่อไฟล์ Excel ที่เรียกใช้งาน Macro

actWBName = ActiveWorkbook.Name

เก็บชื่อไฟล์ Excel ที่กำลังใช้งานอยู่ไว้ในตัวแปร actWBName

With Application.FileDialog(msoFileDialogOpen)
เรียก Dialog สำหรับเปิดไฟล์ด้วยฟังก์ชัน FileDialog และกำหนดโหมดเปิดไฟล์ด้วยตัวแปร msoFileDialogOpen

.Title = "Select File"
.AllowMultiSelect = False
.Show
กำหนดข้อความใน Title ของDialog เป็น Select File

กำหนดให้ผู้ใช้งานสมารถเลือกเปิดไฟล์ได้ไฟล์เดียวหรือหลายไฟล์ด้วย properties AllowMultiSelect ในตัวอย่างนี้กำหนดให้เลือกได้ไฟล์เดียว (False)

สั่งให้แสดงDialogด้วย properties Show

เมื่อ ถึงคำสั่งในบรรทัดนี้ Excel จะแสดง Dialog สำหรับเปิดไฟล์ ดังแสดงในภาพที่ 2

OpenExcel ภาพที่ 2 Dialog สำหรับเปิดไฟล์

Workbooks.Open (.SelectedItems(1))
cur = Workbooks.Count
Workbooks(cur).Activate

‘ Do some thing


Workbooks(cur).Close

เปิดไฟล์ Excel ที่เลือก (.SelectedItems(1)) ด้วยคำสั่ง Open ของ object Workbooks

เก็บตำแหน่งไฟล์ Excel ล่าสุดที่เปิดไว้ (ตำแหน่งไฟล์ Excel ที่เราเปิดนั่นแหล่ะครับ) เพื่อใช้อ้างอิง Workbooks โดยเก็บไว้ที่ตัวแปร cur

Active ไฟล์ Excel ที่เปิดล่าสุดผ่านการอ้างอิงเพื่อเตรียมเข้าไปอ่านหรือทำงานในไฟล์ Excel นั้น

ดำเนินการภายในไฟล์ Excel ที่ Active

เมื่อเสร็จแล้วปิดไฟล์ Excel ที่ Active ด้วยคำสั่ง Close

Workbooks(actWBName).Activate
End With

ทำการกำหนดให้ไฟล์ Excel ที่เรียกใช้งาน Macro นี้ Activate โดยผ่านการอ้างอิงด้วยชื่อไฟล์ ในตัวแปร actWBName

จบแล้วครับสำหรับการเปิดไฟล์ Excel ก่อนเข้าไปอ่านข้อมูลหรือกระทำการใดๆ หวังว่าคงเป็นประโยชน์กับท่านผู้อ่านนะครับ สวัสดีครับ

5 ความคิดเห็น:

utid กล่าวว่า...

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

if .Show = false Then Exit Sub
เท่านี้ก็ป้องกันการเกิด Run time error กรณีที่ผู้ใช้กดปุ่ม ยกเลิก หรือ Cancel ได้แล้วครับ
สวัสดีครับ

utid กล่าวว่า...

การป้องกันความผิดพลาดหากผู้ใช้เลือกไฟล์ประเภทอื่นๆที่ไม่ตรงกับการทำงานของ VBA ที่เีรากำหนดขึ้น เราสามารถกำหนดการกรองชนิดของไฟล์ที่จะเปิดได้ ให้ท่านผู้อ่านแทรก โค้ด VBA ใต้บรรทัด
.Title = "Select File"

ด้วยโค้ดดังนี้
.Filters.Clear
.Filters.Add "MS Excel(*.xls)", "*.xls"
.Filters.Add "MS Excel(*.xlsx)", "*.xlsx"

เป็นการกำหนดให้ Dialog เปิดไฟล์ของเรากรองให้แสดงเฉพาะไฟล์ Excel และ Excel 2007 เท่านั้น

Unknown กล่าวว่า...

พี่ค่ะเราสามารถใช้ code นี้เปิด file งานอย่างอื่นที่ไม่ใช่ excel ได้ไหมค่ะ

utid กล่าวว่า...

หมายถึงว่าเปิดไฟล์อื่นด้วย excel รึป่าวครับ

Unknown กล่าวว่า...

ขอบคุณมากๆ ครับ เป็นประโยชน์มากๆ

แสดงความคิดเห็น

Yahoo bot last visit powered by  Ybotvisit.com