Page 1 of 1

VBA อยากสร้าง UserForms สำหรับกรอกข้อมูลลูกค้า และจัดเก็บข้อมูลไว้อีกชีท

Posted: Wed Sep 14, 2016 10:50 am
by markpossawee
จุดประสงค์คือ อยากสร้างให้แม่นำไปใช้รวบรวมข้อมูลของลูกค้า
โดยผมเองพึ่งเริ่มศึกษา VBA ได้ 2-3 วัน จึงเป็นการล้อโค้ดจากเว็บที่ผมศึกษามาใช้

แต่สิ่งที่ต้องการคือจากชีท Order เมื่อกดปุ่ม"สั่งซื้อสินค้า" จะมีหน้าต่างเด้งขึ้นมาให้กรอก แต่ส่วนของ"คำนำหน้า"จะเป็น Drop Down List ให้เลือก เมื่อกรอกข้อมูลเสร็จกดปุ่ม "บันทึกข้อมูล" ข้อมูลที่กรอกเข้าไปจะวิ่งไป เก็บที่ชีท Data ดังรูปในลิ้งนี้
http://www.mx7.com/view2/zmcSniW39EbfIszG
(อันที่จริงอยากให้เมื่อกรอกจำนวนสินค้ากับราคาแล้ว จะแสดงยอดที่ต้องจ่ายขึ้นมาบนหน้าต่างนั้นเลยครับ)


อยากให้ข้อมูลจะวิ่งมาที่ชีท Data ตามหัวฟิลด์ดังนี้
http://www.mx7.com/view2/zmcVCiSJW6ZZFq86


แต่โค้ดที่ผมศึกษามาเหมือนต้องมีที่พักข้อมูลก่อน ผมจึงสร้างชีท Data2 ไว้พักข้อมูลแล้วค่อย Copy ค่าไปวางไว้ที่ชีท Data

แต่เมื่อผมทำการกดรันแล้ว เกิด Error ตั้งแต่การกรอกข้อมูลก็แจ้ง Error ผมจึงอยากรบกวนผู้รู้ช่วยชี้แนะผมด้วยครับ

ผมได้แนบไฟล์ที่ผมทำไว้ด้วยครับ

Re: VBA อยากสร้าง UserForms สำหรับกรอกข้อมูลลูกค้า และจัดเก็บข้อมูลไว้อีกชีท

Posted: Wed Sep 14, 2016 6:41 pm
by snasui
:D ใน UserForm ให้ลบ Code อื่นทิ้งไปหรือ Mark ให้เป็น Comment เสียก่อน

ปรับชื่อ TextBox ที่ชื่อ Name ให้เป็นชื่ออื่นเช่น tbName การใช้ Name จะไปซ้ำกับ Properties ของหลาย ๆ Object จะทำให้ Code มีปัญหาครับ

ตัวอย่างการปรับ Code ในปุ่ม บันทึกข้อมูล เป็นด้านล่างครับ

ในส่วนของการแสดงรายการใน ComboBox ลองดูตามกระทู้นี้ครับ viewtopic.php?t=178#p970

ปกติการนำค่าใด ๆ ไปเพิ่มเป็นรายการใน ComboBox หรือ Object อื่น ๆ จะใช้ Event UserForm_Initialize() เพื่อเตรียมพร้อมสำหรับการใช้งานครับ

Code: Select all

Private Sub CommandButton1_Click()
    Dim rw As Long
    With Sheets("data")
         rw = .Range("a" & .Rows.Count).End(xlUp).Offset(1, 0).Row
         .Range("a" & rw).Value = Me.Title.Value
         .Range("b" & rw).Value = Me.tbName.Value
         .Range("c" & rw).Value = Me.Surname.Value
         .Range("d" & rw).Value = Me.Product.Value
         .Range("e" & rw).Value = Me.Number.Value
         .Range("f" & rw).Value = Me.Price.Value
    End With
    Unload Me
End Sub