บทที่ 7 การสร้างกล่องรับข้อความ และ User Form อ.สุรินทร์ทิพ ศักดิ์ภูวดล สำนักวิชาเทคโนโลยีสารสนเทศและการสื่อสาร
แบบฝึกหัด 7.1 ปฏิบัติตามขั้นตอนต่อไปนี้เพื่อให้โปรแกรมสร้างคำสั่งให้อัตโนมัติ 1. Click Mouse ที่cell A1 2. Click ปุ่ม Record Macro 3. ตั้งชื่อ Macro “InputData” > OK 4. Click ยกเลิกปุ่ม Relative reference (ถ้าปุ่มนี้ไม่ถูกเลือกให้ข้ามไป) 5. Click Mouse ที่ B10 6. กด End > กด ลูกศรเลื่อนขึ้น 7. เลือก Relative Reference (กำหนดการไปแบบ Relative ) 8. กดลูกศรลง 1 ครั้ง 9. Stop Recording 10. สร้างปุ่มให้ Macro เลือก Macro ชื่อ InputData
จากนั้นให้เขียนโปรแกรมเพิ่มดังนี้ Sub InputData() Range("B10").Select Selection.End(xlUp).Select ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.Value = Inputbox("please Enter Name", "Input Info.") ActiveCell.Offset(0, 1).Select ActiveCell.Value = Inputbox("please Enter Address", "Input Info.") ActiveCell.Value = Inputbox("please Wnter Salary", "Input Info.") End Sub
จากโปรแกรมจะได้ Input Box ที่สามารถทำงานได้ดังภาพ
คำสั่ง IsDate (ค่าที่ต้องการเช็ค) IsNumeric (ค่าที่ต้องการเช็ค) ActiveCell.Offset(0, 1).NumberFormat = "#,##0"
แบบฝึกหัด 7.2 ให้นิสิตศึกษาคำสั่งต่อไปนี้ คำสั่ง การตรวจสอบว่าเป็นข้อมูลวันที่หรือไม่และให้แสดง Message Box Sub TestDate() Range("B2").Select Mydate = InputBox("Please Enter Date") If Mydate <> "" And IsDate(Mydate) Then ActiveCell.Value = Mydate Else MsgBox "Invalid Date Format" ActiveCell.Value = "" Call TestDate ‘’’ การเขียนโปรแกรมลักษณะนี้ต้องระวัง เนื่องจากโปรแกรมจะไม่หยุดทำงาน ‘’’’หากข้อมูลที่ใส่ยังไม่ถูกต้อง End If End Sub
คำสั่งตรวจสอบว่าเป็นตัวเลขหรือไม่ Sub TestNumeric() Range("B6").Select MyNum = InputBox("Please Enter Numeric") If MyNum <> "" And IsNumeric(MyNum) Then ActiveCell.Value = MyNum Else MsgBox "Invalid Numeric Format" ActiveCell.Value = "" Call TestNumeric End If End Sub
แบบฝึกหัด 7.3 การหาส่วนลดของหนังสือ ให้นิสิต Copy คำสั่งลงใน Program อ่านค่า และแปรความหมายของแต่ละบรรทัดส่งอาจารย์ Sub calculateNetAmount() Range("E3").Select MyDiscount = InputBox("Enter discount rate", "Discount rate", 0.1) Do While Not IsEmpty(ActiveCell.Value) ActiveCell.Offset(0, 1).Value = ActiveCell.Value * (1 - MyDiscount) ActiveCell.Offset(0, 1).NumberFormat = "#,##0.00" ActiveCell.Offset(1, 0).Select Loop End Sub
ผลลัพธ์จากคำสั่ง
Format ตัวเลข ตัวเลข #,#00.00 #,###.## #,##0.00 1 01.00 1. 1.00 55 55.00 55. 299 299.00 299. 2500.555 2,500.56
คำสั่ง Insert Sheet Sub Insertworksheet() nameSheet = InputBox("ป้อนชื่อ Sheet", "กำหนดชื่อ Sheet") If nameSheet <> "" Then ActiveWorkbook.Sheets.Add ActiveSheet.Name = nameSheet End If End Sub
หลังจาก Run คำสั่งจะมี Message Box ขึ้นมาให้ใส่ชื่อ Sheet ใหม่ หลังจากนั้นจะได้ผลลัพธ์ดังภาพถัดไป
การทำงานที่ระบุ Worksheet รูปแบบคำสั่งหาผลรวมจากบทเรียนที่ผ่านมา ActiveCell.Formula = "=Sum(" & cellrange & ")" ActiveCell.Offset(0, 1).Formula = "=Sum(" & DataRange & ")" ActiveCell.Offset(0, 1).Value = "=Sum(" & DataRange & ")“ หรืออาจหาผลรวมได้จาก Result = WorksheetFunction.Sum(Worksheets(“Sheet1").Range("C3:C5"))
การคำนวณข้าม Sheet
สร้างข้อมูลดังตาราง
ให้ Copy คำสั่งต่อไปนี้ Sub SumAmount() Dim result As Double Result = WorksheetFunction.Sum(Worksheets(“ข้อมูลรายการสินค้าในร้าน").Range("C3:C5")) Worksheets(“ผลรวม").Range("A1").Value = “ผลรวมยอดขายสินค้าทั้งหมดคือ" Worksheets(“ผลรวม").Range("B1").Value = result Worksheets(“ผลรวม").Range("C1").Value = “บาท" End Sub
จะได้ผลลัพธ์ดังนี้
จากนั้นให้นิสิตศึกษาความแตกต่างระหว่าง การเขียนคำสั่งใน Sheet1 การเขียนคำสั่ง Module
การสร้าง User Form
การใช้ Text box ActiveCell.Value = txtDate.Text ActiveCell.Offset(0, 1) = txtName.Text ActiveCell.Offset(0, 2).Value = txtSurName.Text ActiveCell.Offset(0, 3).Value = txtAddress.Text ActiveCell.Offset(0, 4).Value = Lstdepartment.Value ActiveCell.Offset(0, 5).Value = txtSalary.Text ActiveCell.Offset(0, 6).Value = CboCountry.Text
การ Add Combo box Private Sub AddCountry() CboCountry.AddItem "China" CboCountry.AddItem "Japan" CboCountry.AddItem "Korea" CboCountry.AddItem "Taiwan" CboCountry.AddItem "Thailand" CboCountry.Text = CboCountry.List(0) ''' ข้อมูลลำดับแรกที่แสดงใน Combo Box คือ List (0) End Sub
การแสดงค่าจาก Combo Box ActiveCell.Offset(0, 6).Value = CboCountry.Text
การ Add List Box Private Sub AddDepartment() Lstdepartment.AddItem "Accounting" Lstdepartment.AddItem "IT" Lstdepartment.AddItem "Marketing" Lstdepartment.AddItem "Human Resource" Lstdepartment.ListIndex = 0 End Sub
การแสดงค่าจาก List Box ActiveCell.Offset(0, 4).Value = Lstdepartment.Value
การแสดงค่าจาก Option Button If optMale.Value = True Then ActiveCell.Offset(0, 7).Value = “พนักงานชาย" End If
การแสดงค่าจาก Check Box If chk01.Value = True Then ActiveCell.Offset(0, 8).Value = “ท่องเที่ยว" End If
การบ้าน
1. สร้าง Form ชื่อ frmEmployee
2. Insert Module Sub showForm() frmEmployee.show End Sub
3. ปุ่มบันทึกข้อมูลพนักงานเรียก Procedure Showform
การทำงานของปุ่ม Close Private Sub CmdClose_Click() Unload Me End Sub
การทำงานของปุ่มบันทึกข้อมูล ให้นำข้อมูลที่บันทึกจากหน้าจอลงสู่ Excel
หนังสืออ้างอิง เรียนลัด VBA บน Excel, วิศัลย์ พัวรุ่งโรจน์ Excel VBA Programming, วิชา ศิริธรรมจักร์ และสุรเชษฐ์ วงศ์ชัยพรพงษ์