โดย คุณอรวีร์
ก่อนอื่นขออธิบายลักษณะการทำงานของ VBA สักเล็กน้อยค่ะ
Application สมัยใหม่เปิดโอกาสให้ Application อื่นเข้าใช้ทรัพยากรของตนเอง ดังนี้
ภาษาคอมพิวเตอร์รุ่นใหม่มักจะมีช่องทางให้สามารถเรียกบริการหรือส่วนของ Application
อื่นมาใช้งานได้ เช่น
ถ้าต้องการให้ Cell A1 ของ Excel มีเลข 10 และ B1 มีสูตร =BahtText(A1) สามารถใชัภาษา javascript ดังนี้
ExcelSheet = new ActiveXObject("Excel.Sheet");
Excel = ExcelSheet.Application;
Excel.Workbooks(1).Sheets(1).Range("A1").Value = 10;
Excel.Workbooks(1).Sheets(1).Range("B1").Formula = "=BahtText(A1)";
alert(Excel.Workbooks(1).Sheets(1).Range("B1").Value);
Excel.Workbooks(1).Close;
ถ้างานเดียวกันใช้ Visual Basic จะเขียนได้แบบนี้
Set ExcelSheet = CreateObject("Excel.Sheet")
Set Excel = ExcelSheet.Application
Excel.Workbooks(1).Sheets(1).Range("A1").Value = 10
Excel.Workbooks(1).Sheets(1).Range("B1").Formula = "=BahtText(A1)"
MsgBox Excel.Workbooks(1).Sheets(1).Range("B1").Value
Excel.Workbooks(1).Close
จะเห็นว่า ทั้งสองภาษาข้างต้น ต้องมีการประกาศอ้างถึง
ActiveX ของ Excel Application ก่อน เมื่อต้องการอ้างถึง Cell A1
ต้องเริ่มตั้งแต่อ้างถึง Excel Application --> Workbook --> Sheet --> จนถึง A1
Excel ได้จัดเตรียม Objects และ Method , Properties ของมัน จำนวนหนึ่งเพื่อให้
Application อื่นสามารถเข้าถึง-ใช้งานได้ นอกจากนั้นยังมีภาษา Script ฝังใน Excel
เอง เรียกว่า VBA (Visual Basic for Application)
ซึ่งภาษาแบบเดียวกันนี้มีอยู่ในผลิตภัณฑ์อื่นๆของ Microsoft ด้วย
และเนื่องจากการที่ VBA เป็นภาษา Script ฝังใน Excel Application อยู่แล้ว
ทำให้ไม่ต้องประกาศแบบ 2 บรรทัดนี้
Set ExcelSheet = CreateObject("Excel.Sheet")
Set Excel = ExcelSheet.Application
โดยสามารถเริ่มที่ . . .
Excel.Workbooks(1).Sheets(1).Range("A1").Value = 10
Excel.Workbooks(1).Sheets(1).Range("B1").Formula = "=BahtText(A1)"
ได้เลย. ผลการทำงานจะเหมือนกันทุกประการ
และสามารถตัดการอ้างถึง Excel Application ออกได้โดยถือว่า Excel Application เป็น
Object แม่ของทุก Objects และสามารถละการอ้างถึง Workbook ได้โดยถือว่าเป็น
ActiveWorkbook และสามารถละการอ้างถึง Worksheet ได้โดยถือว่าเป็น ActiveWorksheet
จึงสามารถเขียน Code เป็น . . .
Range("A1").Value = 10
Range("B1").Formula = "=BahtText(A1)" ก็ทำงานได้
ขณะที่ Run โปรแกรมภาษา VBA
จะใช้ช่องทางสื่อสารในการเข้าถึงทรัพยากรของ Excel ก็เหมือนกับที่ภาษา VB ,
Javascript และภาษาอื่นๆใช้ เพียงแต่ละบางอย่างไว้ในฐานที่เข้าใจเท่านั้น
เหมือนกับมี 2 Application แยกกัน 2 ตัวคือ Excel และภาษา VBA
Function บางตัวที่ชื่อเหมือนกัน แต่วิธีใช้ต่างกัน(เล็กน้อย)
บางครั้งก็อาจทำให้เราสับสนได้ เช่น MID( ) ของ Excel และ VBA จำเป็นต้องใช้จำนวน
Argument ไม่เท่ากัน MID("123456",3) ใช้ใน VBA ได้ แต่ใช้ใน Excel Worksheet
ไม่ได้.
ตอนหน้าจึงจะเข้าเรื่อง Evaluate Method ค่ะ ถ้ายังไม่เบื่ออ่านกันซะก่อน
ตอนต่อไป ... การใช้ Evaluate method -
ตอนที่ 2
| Home |
|
www.xls.i.am www.tpa.or.th/xlsiam |
21/06/2545 |