วันอาทิตย์ที่ 29 มกราคม พ.ศ. 2555

รับข้อมูลจากผู้ใช้ด้วย Inputbox

กล่องโต้ตอบกับผู้ใช้อีกแบบหนึ่ง ที่สามารถรับข้อมูลจากผู้ใช้ได้ด้วย นั่นก็คือ Input Box ลักษณะของ Input Box นี้จะเป็นกล่องโต้ตอบที่มีข้อความเพื่อบอกให้ผู้ใช้ทำอะไร หรือใส่อะไรลงในช่อง และ ช่องสำหรับให้ผู้ใช้กรอกข้อมูล ลักษณะดังภาพข้างล่าง

ซึ่งในภาพจะเห็นว่า มีข้อความให้ผู้ใช้กรอกชื่อตนเองใส่เข้าไปในช่อง นอกจากนี้ก็ยังมีปุ่ม อยู่ 2 คือ OK และ Cancel เพื่อแสดงการตอบรับหรือปฏิเสธกล่องโต้ตอบนี้

รูปแบบ

     inputbox("ข้อความที่ต้องการแสดงออกทางกล่องโต้ตอบ")


ตัวอย่าง
    ผมต้องการให้ผู้ใช้กรอกชื่อตนเองลงในช่องรับข้อมูล แล้วกดปุ่ม OK ลงในโปรแกรมย่อย (sub)ที่ชื่อว่า request ที่มีหนึ่งคำสั่งคือ inputbox อยู่ภายใน Code ของโปรแกรมสามารเขียนได้ดังนี้


Sub request()
    InputBox ("Please type your name in the box below and then click OK.")
End Sub

เมื่อทำการทดสอบการทำงานของโปรแกรม โดยการกดปุ่ม F5 จะได้ผลลัพท์ดังนี้


ซึ่งจะเห็นว่าในกล่องโต้ตอบแบบ Input box นี้ จะมีการแสดงข้อความของเราออกมาและมีช่องรับข้อมูลให้มาด้วย  แต่โดยทั่วไปกล่องโต้ตอบแบบ Input Box นี้มักจะต้องเกี่ยวข้องกับการนำข้อมูลในช่องรับข้อมูลที่ผู้ใช้กรอกเข้ามาไปประมวลผลต่อ ดังนั้นเราจะต้องเขียน Code เพื่อเก็บค่าที่ผู้ใช้กรอกเข้ามาไว้ด้วย โดยจะเก็บค่าดังกล่าวไว้ในรูปของตัวแปรใดตัวแปรหนึ่ง ตัวอย่างต่อไปนี้คือการนำค่าที่ผู้ใช้กรอกเข้ามาไปเก็บไว้ในตัวแปรที่ชื่อว่า UserName

Sub request()
    UserName = InputBox("Please type your name in the box below and then click OK.")
End Sub

แต่เพื่อต้องการตรวจสอบว่าตัวแปร UserName เก็บค่าที่ถูกต้องตามที่ผู้ใช้กรอกเข้ามาหรือไม่เราอาจทดสอบโดยการเพิ่มคำสั่งให้แสดงกล่องโต้ตอบที่มีข้อความเป็นค่าที่ผู้ใช้กรอกเข้ามาเพิ่มอีกหนึ่งคำสั่งดังนี้

Sub request()
    UserName = InputBox("Please type your name in the box below and then click OK.")
    MsgBox (UserName)
End Sub

เมื่อทำการทดสอบการทำงานของโปรแกรม โดยกดปุ่ม F5 แล้วป้อนคำว่า VBA เข้าไปในช่องรับข้อมูลแล้วกดปุ่ม OK จะพบว่ามีกล่องโต้ตอบแสดงข้อความ VBA ออกมา ซึ่งแสดงว่าตัวแปร UserName เก็บค่าที่เราป้อนเข้าไปถูกต้อง ผลลัพธ์ดังแสดงในภาพข้างล่าง




จะเห็นว่าการใช้งานกล่องโต้ตอบแบบ Input Box นั้นง่ายมาก 

ขอให้สนุกกับการใช้ Input Box นะครับ ^^

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

  1. สามารถให้ Input box แสดงภาษาไทยได้อย่างไรครับ

    ตอบลบ
    คำตอบ
    1. ปกติ พิมพ์ภาษาอะไรก็ออกภาษานั้นเลยนะครับ

      ลบ
    2. เช่น " กรุณาใส่ชื่อลงใน Input box ด้านล่าง แล้วกด click OK " อย่างนี่ของผมทำไม่ได้เลยครับ แต่สามารถอ่านช่องใน cell ที่เป็นภาษาไทยและแสดงให้เห็นออกมาใน box โต้ตอบได้ ...แต่พอป้อนใส้เข้าไปกลับออกมาเป็นภาษาต่างดาว.....ขอบคุณครับ

      ลบ
    3. ใช้ excel เวอร์ชันเท่าไหร่ครับ

      ของผม excel 2007 ผมลองรันโค๊ดด้านล่างนี้ก็ปกตินะครับ ภาษาไทยได้หมดเลย

      Sub request()
      UserName = InputBox("กรุณาใส่ชื่อลงใน ช่องด้านล่าง")
      MsgBox (UserName)
      End Sub

      ลบ
    4. 2003และ2010 ไม่ได้ทั้งหมด และก็ไม่รู้ว่าควรจะไปแก้ปัญหาที่ไหน เลยต้องใช้แต่ภาษาอังกฤษได้อย่างเดียว..... น่าจะลงได้ไม่สมบูรณ์ เลยมีปัญหาก็เป็นได้หรือไม่ ไม่แน่ใจนัก....แต่ถ้าคนอื่นสามารถทำได้ก็ยังมีหวังว่าจะหาทางใช้ได้ในวันหน้า ขอบคุณมากครับ

      ลบ
    5. ครับ อาจไม่สมบูรณ์ ตอนติดตั้งผมลงทุกอย่างเลย เพราะกัวปัญหาแบบนี้อ่ะครับ อาจลงโปรแกรมใหม่ลองดูนะครับ แล้วผมจะลองหาคำตอบเพิ่มเติมเรื่องนี้ให้อีกแรง...^^

      ลบ
    6. คุณ wat ลองดูตรงนี้ดูนะครับเผื่อช่วยได้ ในหน้าต่าง VBA ให้ไปที่เมนู Tool>Option

      แล้วจะมีหน้าต่าง Option ขึ้นมา ไปที่ Tab "Editor Format" ด้านขวามือ จะมีให้เลือก Fonts ให้เลือกเป็นอะไรก็ได้ที่มีวงเล็บไทย ต่อท้ายนะครับเช่น Tahoma(thai) ถ้าไม่มี Font อะไรที่ต่อท้ายด้วยไทย แสดงว่าลงไม่เต็มจริงๆครับ

      ลบ
    7. ครับ ที่ Tool>Option นั้นก็ลองทำแล้ว ตอนเขียนคำสั่งเป็นไทยได้ แต่พอออก MsgBox ก็ไม่ได้ออกเป็นต่างดาวเหมือนเดิม .....ผมก็เดาว่าน่าจะต้องลองลงใหม่ให้สมบูรณ์ ตอนนี้เพิ่งลองใช้ได้ไม่นาน พยายามหาข้อมูลไปก่อน มือใหม่มาก ยังไม่รู้อะไรลองทำตามที่เขาทำมาก่อน เอาแค่ output ให้ได้อย่างที่ต้องการไปก่อน ส่วนความเข้าใจในภาษาคำสั่งคงยังอีกยาวนานมาก....ขอบคุณมากครับ

      ลบ
    8. ลองดูอีกที ตามวีดีโอนี้ อาจช่วยได้ครับ

      http://www.youtube.com/watch?v=B0wRh50cDWA

      ลบ
    9. ขยันตอบจังนะครับ แล้วจะพยายามลองนะครับ ...ตอนนี้มีปัญหาไม่ทราบว่าจะทำอย่างไร ถ้ารบกวนก็ไม่ต้องตอบก็ได้นะครับเกรงใจจริง ๆ ... โดยต้องการหาค่า ใน cell จาก i ถึง last row ว่ามีอยู่หรือไม่ โดยปัญหามีอยู่ว่าต้องการจะใช้ ฺBox เป็นตัวส่งค่า Column ให้สามารถใส่ ได้ตามความต้องการว่าจะให้ หาค่าใน Column ใด .....และผมก็หาทางไปไม่ได้เพราะลองแล้วไม่สามารถทำได้ เมื่อส่งค่า M(ไปใน Box หรือค่าอื่น ๆ ) ไปแล้ว ก็ ไม่รับรู้ และก็ไม่รู้ว่าจะ Dim Column ให้เป็นอะไรดี VBA ถึงจะรับรู้ได้ แล้วจึงจะเอาไปต่อใน Range("Col" & i) เพื่อให้ไปหาค่าใน Column ตามต้องการ....ไม่รู้ว่า เป็นการทำที่ทำได้หรือไม่ครับ.....ขอบคุณมากครับ

      ลบ
  2. มันบังเอิญอยู่หน้าคอมพอดีอ่ะคับ. โอเคนะคับไม่ชอบตอบบ่อยๆ เด่วนานๆมาตอบให้นะคับ ^^

    ตอบลบ
    คำตอบ
    1. ครับต้องรบกวนแล้วครับ.....และตามวีดีโอ ที่แนะนำให้ลองนั้นลองแล้วนะครับ ออกมาเป็นต่างดาวอย่างเดิมเลยครับ ...คงต้องหาเวลาลงใหม่แล้วละครับ.....ขอบคุณอย่างยิ่งอีกครั้งนะครับ...wat....

      ลบ
  3. รบกวนช่วยดูเรื่อง
    code พิมบิล
    ของ ไฟล์นี้ให้หน่อยได้หรือไม่ครับ http://bwaiwai.blogspot.com/2012/06/123-excel.html

    ตอบลบ
    คำตอบ
    1. ดล้วคับ ยังไงต่อคับ

      ลบ
    2. เงียบเลย สงสัยมาแปะลิงค์บทความเฉยๆ อิอิ

      ลบ
  4. ถ้าจะป้อนชื่อหนังสือซักเล่มลงไป(มีหนังสือหลายเล่มในตาราง) แล้วอยากให้ MsgBox ออกค่ามาเป็น รหัสและราคาหนังสือ ที่อยู่ในตาราง จะใช้สูตรอะไรคะ

    ตอบลบ
  5. สมมตินะคับว่า มีข้อมูลอยู่ใน 3 คอลัมน์
    คอลัมน์ A คือชื่อหนังสือ (คอลัมน์ A คือคอลัมน์ที่ 1)
    คอลัมน์ B คือ รหัสหนังสือ (คอลัมน์ B คือคอลัมน์ที่ 2)
    คอลัมน์ C คือ ราคาหนังสือ (คอลัมน์ C คือคอลัมน์ที่ 3)
    และในแถวที่ 1 ไม่มีข้อมูล เพราะว่าเป็นหัวของตาราง นะครับ
    --> ดังนั้น ข้อมูลที่เก็บไว้จะเริ่มมีตั้งแต่บรรทัดที่ 2 เป็นต้นไป (ที่จริงเริ่มที่เท่าไรก็ได้ เพื่อความง่ายในการอธิบาย สมมติแบบนี้ไปก่อน ค่อยไปปรับแก้เอาทีหลังนะครับ)
    --> ข้อมูลที่มีอยู่มีอยู่ลงไปถึงแถวที่ 100 (หรือมากกว่านั้นก็ได้ ถ้าเป็นแถวอื่นก็ปรับตัวเลขเอาเองนะครับ)

    --> แล้วเราใช้ Inputbox ให้คนกรอกชื่อหนังสือมาเก็บไว้ที่ตัวแปรชื่อว่า Book
    คำสั่งแรกก็ประมาณนี้นะครับ Book= inputbox("กรุณาใส่ชื่อหนังสือ")

    -->หลังจากนั้น ให้สั่งโปรแกรมไปเปิดหน้าที่เก็บข้อมูลอยู่ (เช่น หน้าที่เก็บข้อมูลชื่อว่า data ก็ใช้คำสั่ง
    sheets("data").activate
    ทั้งนี้เพื่อว่าถ้าบังเอิญอยู่หน้าอื่นจะได้ไม่เอาข้อมูลมาผิด ถ้าชื่ออื่นก็เปลี่ยนคำว่า data เป็นชื่อนั้น

    --> หลังจากนั้นก็วนลูปเพื่อตรวจสอบข้อมูลในคอลัมน์ A ว่า แถวที่เท่าไรมีข้อมูลตรงกับค่าที่เราเก็บไว้ในตัวแปร Book ชุดคำสั่งก็ประมาณนี้นะคับ

    For i= 2 to 100 ' ถ้าข้อมูลไม่ได้เริ่มต้น ด้วยแถวที่ 2 และจบที่แถวที่ 100 ก็ปรับแต่งตัวเลขเองได้เลยคับ
    เช่น ถ้าเริ่มต้นข้อมูลแถวที่ a และสิ้นสุดที่แถว b คำสั่งก็ประมาณนี้ครับ (ถ้าไม่แน่ใจว่ามีถึงแถวที่เท่าไร ก็ให้ใส่ตัวเลขเกินๆไว้ให้มากกว่าแถวสุดท้ายของข้อมูลนะครับ เวลาตรวจสอบจะได้ครอบคลุมข้อมูลทุกแถว)
    '-----------------------------------------------------------------------------------------------------------------------------
    For i=a to b
    if(Cells(i,1).Value=book Then 'สมมติว่าเริ่มต้นแถวที่ a ถ้าทราบค่า a ก็ใส่เป็นตัวเลขได้เลย
    code=Cells(i,2).Value 'เอารหัสหนังสือออกมา -->เก็บไว้ที่ตัวแปรชื่อว่า code
    price=Cells(i,3).Value 'เอาราคาหนังสืออกมา -->เก็บไว้ที่ตัวแปรชื่อว่า price
    msgbox("Code= " & code & ", Price= " & price) 'แสดงข้อความที่มีรหัสและราคาออกมา
    Stop 'สั่งให้โปรแกรมหยุดทำงาน ถ้าค้นข้อมูลเจอแล้ว และไม่ต้องตรวจสอบในข้อมูลส่วนที่เหลือ
    End if
    Next i
    msgbox("ไม่พบรายการที่ค้นหา") 'เป็นคำสั่งแสดงข้อความว่าไม่พบรายการที่ค้นหาหลังตรวจครบทุกแถว
    '------------------------------------------------------------------------------------------------------------------------------

    หมายเหตุ: ถ้าข้อมูลไม่ได้อยู่ในคอลัมน์ A, B, C ตามที่ยกตัวอย่างมา ก็สามารถดัดแปลงคำสั่งให้ถูกต้องได้ครับ คือให้ใส่ตัวเลขที่ถูกต้องของข้อมูลลงไปแทน เช่น
    ชื่อหนังสืออยู่คอลัมน์ D
    รหัสหนังสืออยู่คอลัมน์ P
    ราคาหนังสืออยู่คอลัมน์ B
    ให้เราแปลงชื่อคอลัมน์เป็นตัวเลขแทน โดยที่คอลัมน์ที่ 1 คือ คอลัมน์ A และเพิ่มขึ้นทีละหนึ่งจากซ้ายมือไปขวามือ ดังนั้นจะได้ว่า
    ชื่อหนังสืออยู่คอลัมน์ D ==> ใช้ตัวเลข 4
    รหัสหนังสืออยู่คอลัมน์ P ==> ใช้ตัวเลข 16
    ราคาหนังสืออยู่คอลัมน์ B ==> ใช้ตัวเลข 2
    แล้วนำไปใส่ในคำสั่งข้างบนแทนที่เลข 1, 2 และ 3 ตามลำดับ ดังนี้

    '-----------------------------------------------------------------------------------------------------------------------------
    For i=a to b
    if(Cells(i,4).Value=book Then 'แทนคาเลข 1 ด้วยเลข 4
    code=Cells(i,16).Value ' แทนคาเลข 2 ด้วยเลข 16
    price=Cells(i,2).Value 'แทนคาเลข 3 ด้วยเลข 2
    msgbox("Code= " & code & ", Price= " & price) 'แสดงข้อความที่มีรหัสและราคาออกมา
    Stop 'สั่งให้โปรแกรมหยุดทำงาน ถ้าค้นข้อมูลเจอแล้ว และไม่ต้องตรวจสอบในข้อมูลส่วนที่เหลือ
    End if
    Next i
    msgbox("ไม่พบรายการที่ค้นหา") 'เป็นคำสั่งแสดงข้อความว่าไม่พบรายการที่ค้นหาหลังตรวจครบทุกแถว
    '------------------------------------------------------------------------------------------------------------------------------

    หวังว่าคงพอจะมีประโยชน์นะครับ
    :D

    ตอบลบ