:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser

ต้องการให้ข้อมูลเปลี่ยนแปลงตาม Combobox

ฟอรัมถาม-ตอบปัญหาการใช้งานสูตรและฟังก์ชัน Excel
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
akekorn
Bronze
Bronze
Posts: 416
Joined: Wed Mar 09, 2011 5:19 pm

ต้องการให้ข้อมูลเปลี่ยนแปลงตาม Combobox

#1

Post by akekorn »

สวัสดีครับเพื่อนสมาชิกทุกท่าน
ผมมีปัญหาจะขอความอนุเคราะห์จากเพื่อนสมาชิก คือผมทำ ฟอร์ม ขึ้นมาโดยมีการเรียกข้อมูลของกลุ่มผ่าน combobox อย่างในตัวอย่างที่แนบมาให้
จะมี combobox 2 ตัว คือ combobox ที่แสดงจำนวนเดือน และ combobox ที่แสดง ชื่อห้อง
จากตัวอย่างที่แนบหากผมเลือกเดือน january และ ห้อง 2A ข้อมูลในชีท Jan จะโชว์รายละเอียดของห้อง 2A แต่เนื่องจากห้องมีเยอะมากหากต้องเขียนโค๊ดแบบนี้ยาวไปคงลำบากจึงอยากรบกวนว่ามีวิธีใดที่จะให้มีการวนลูปหาห้องมาใส่เพื่อเวลาเลื่อนห้องต่อไปของเดือน จะแสดงรายละเอียดเกี่ยวกับห้องนั้นได้ครับ

ขอบคุณในความอนุเคราะห์ล่วงหน้าครับ

เอกกร
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31257
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ต้องการให้ข้อมูลเปลี่ยนแปลงตาม Combobox

#2

Post by snasui »

:D อ่านแล้วไม่เข้าใจครับ

ในชีท Menu เป็นการเรียก Form ขึ้นมาแล้วให้ทำงานกับชีทเมนู โดยที่ข้อมูลอยู่ในชีทอื่น ๆ ย่อมไม่ได้คำตอบตามต้องการ

จากตัวอย่าง Code

Code: Select all

If cbomonth.Value = "January" Then
    Range("a6").Select
หากต้องการจะให้ทำงานถูกต้องจะต้องกำกับหรือระบุชีทให้กับ Range("a6") ด้วย

ช่วยอธิบายมาลำดับขั้นตอนของงานนี้มาด้วยจะได้เข้าถึงปัญหาโดยไว ควรจะแจ้งมาว่า Code ที่เป็นปัญหาอยู่ใน Procedure ใด ติดปัญหาที่บรรทัดใด ฯลฯ
akekorn
Bronze
Bronze
Posts: 416
Joined: Wed Mar 09, 2011 5:19 pm

Re: ต้องการให้ข้อมูลเปลี่ยนแปลงตาม Combobox

#3

Post by akekorn »

ครับคือว่าที่ผมอยากขอความรู้ในการดัดแปลงโค๊ดตัวนี้คือ

Code: Select all

Private Sub cboroom_Change()
myroom = cboroom.Text
If cboroom.Value = "2A" Then  'อ้างถึงชื่อห้อง
    Sheets("Jan").Select
    Range("b6").Select
    Do While True
    If myroom = ActiveCell.Value Then
   
        TextBox1.Text = ActiveCell.Offset(0, i + 1).Value
        TextBox6.Text = ActiveCell.Offset(0, i + 2).Value
        TextBox2.Text = ActiveCell.Offset(0, i + 3).Value
        TextBox7.Text = ActiveCell.Offset(0, i + 4).Value
        TextBox4.Text = ActiveCell.Offset(0, i + 5).Value
        TextBox8.Text = ActiveCell.Offset(0, i + 6).Value
        TextBox9.Text = ActiveCell.Offset(0, i + 7).Value
        TextBox10.Text = ActiveCell.Offset(0, i + 8).Value
        TextBox12.Text = ActiveCell.Offset(0, i + 9).Value
        TextBox11.Text = ActiveCell.Offset(0, i + 10).Value
        TextBox13.Text = ActiveCell.Offset(0, i + 11).Value
        Exit Do
    End If
    ActiveCell.Offset(1, 0).Select
   Loop
End If
End Sub
จะสังเกตว่าผมจะต้องแทนค่าห้องเข้าไปเนื่องจากมีถึง 42 ห้องหากเขียนโปรแกรมแบบนั้จะทำให้ต้องเขียนโปรแกรมยาวทำทีละห้องจนครบ
ผมจึงอยากขอความรุ้จะมีวิธีไหนไหมครับที่จะเขียนโปรแกรมให้สั้นลงได้ครับผม
ขอบคุณครับ

เอกกร
akekorn
Bronze
Bronze
Posts: 416
Joined: Wed Mar 09, 2011 5:19 pm

Re: ต้องการให้ข้อมูลเปลี่ยนแปลงตาม Combobox

#4

Post by akekorn »

ขอรบกวนอีกข้อครับ คือต้องเดือนด้วยครับเนื่องจากมี 42 ห้องต่อเดือน ควรใส่ตัวแปรอย่างไรดีครับ
akekorn
Bronze
Bronze
Posts: 416
Joined: Wed Mar 09, 2011 5:19 pm

Re: ต้องการให้ข้อมูลเปลี่ยนแปลงตาม Combobox

#5

Post by akekorn »

โค๊ดของเดือนจะยาวมากครับ

Code: Select all

Private Sub cboroom_Change()
myroom = cboroom.Text
If cbomonth.Value = "January" And cboroom.Value = "2A" Then
    Sheets("Jan").Select
    Range("b6").Select
    Do While True
    If myroom = ActiveCell.Value Then
   
        TextBox1.Text = ActiveCell.Offset(0, i + 1).Value
        TextBox6.Text = ActiveCell.Offset(0, i + 2).Value
        TextBox2.Text = ActiveCell.Offset(0, i + 3).Value
        TextBox7.Text = ActiveCell.Offset(0, i + 4).Value
        TextBox4.Text = ActiveCell.Offset(0, i + 5).Value
        TextBox8.Text = ActiveCell.Offset(0, i + 6).Value
        TextBox9.Text = ActiveCell.Offset(0, i + 7).Value
        TextBox10.Text = ActiveCell.Offset(0, i + 8).Value
        TextBox12.Text = ActiveCell.Offset(0, i + 9).Value
        TextBox11.Text = ActiveCell.Offset(0, i + 10).Value
        TextBox13.Text = ActiveCell.Offset(0, i + 11).Value
        Exit Do
    End If
    ActiveCell.Offset(1, 0).Select
   Loop
ElseIf cbomonth.Value = "January" And cboroom.Value = "2B" Then
    Sheets("Jan").Select
    Range("b6").Select
    Do While True
    If myroom = ActiveCell.Value Then
   
        TextBox1.Text = ActiveCell.Offset(0, i + 1).Value
        TextBox6.Text = ActiveCell.Offset(0, i + 2).Value
        TextBox2.Text = ActiveCell.Offset(0, i + 3).Value
        TextBox7.Text = ActiveCell.Offset(0, i + 4).Value
        TextBox4.Text = ActiveCell.Offset(0, i + 5).Value
        TextBox8.Text = ActiveCell.Offset(0, i + 6).Value
        TextBox9.Text = ActiveCell.Offset(0, i + 7).Value
        TextBox10.Text = ActiveCell.Offset(0, i + 8).Value
        TextBox12.Text = ActiveCell.Offset(0, i + 9).Value
        TextBox11.Text = ActiveCell.Offset(0, i + 10).Value
        TextBox13.Text = ActiveCell.Offset(0, i + 11).Value
        Exit Do
    End If
    ActiveCell.Offset(1, 0).Select
   Loop
   ElseIf cbomonth.Value = "January" And cboroom.Value = "2C" Then
    Sheets("Jan").Select
    Range("b6").Select
    Do While True
    If myroom = ActiveCell.Value Then
   
        TextBox1.Text = ActiveCell.Offset(0, i + 1).Value
        TextBox6.Text = ActiveCell.Offset(0, i + 2).Value
        TextBox2.Text = ActiveCell.Offset(0, i + 3).Value
        TextBox7.Text = ActiveCell.Offset(0, i + 4).Value
        TextBox4.Text = ActiveCell.Offset(0, i + 5).Value
        TextBox8.Text = ActiveCell.Offset(0, i + 6).Value
        TextBox9.Text = ActiveCell.Offset(0, i + 7).Value
        TextBox10.Text = ActiveCell.Offset(0, i + 8).Value
        TextBox12.Text = ActiveCell.Offset(0, i + 9).Value
        TextBox11.Text = ActiveCell.Offset(0, i + 10).Value
        TextBox13.Text = ActiveCell.Offset(0, i + 11).Value
        Exit Do
    End If
    ActiveCell.Offset(1, 0).Select
   Loop
   
End If
End Sub
User avatar
snasui
Site Admin
Site Admin
Posts: 31257
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ต้องการให้ข้อมูลเปลี่ยนแปลงตาม Combobox

#6

Post by snasui »

:D ค่อย ๆ ถามตอบกันไปครับ

ก่อนที่จะตอบเรื่องเปลี่ยน Code ผมยังไม่ทราบว่าคุณต้องการจะทำอะไร ช่วยลำดับสิ่งที่คุณต้องการมาก่อนเป็นอันดับแรก เช่นเอาค่าใดมาวางใน Object ใด ด้วยเงื่อนไขใด ฯลฯ
User avatar
snasui
Site Admin
Site Admin
Posts: 31257
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ต้องการให้ข้อมูลเปลี่ยนแปลงตาม Combobox

#7

Post by snasui »

:D ตัวอย่างการปรับ Code กรณีเปลี่ยนห้อง

Code: Select all

Private Sub cboroom_Change()
    myroom = cboroom.Text
    'If cboroom.Value = "2A" Then
    On Error Resume Next
    Sheets(Left(cbomonth.Text, 3)).Select
    If Err > 0 Then Exit Sub
    Range("b6").Select
    Do While ActiveCell <> ""
        If myroom = ActiveCell.Value Then
            TextBox1.Text = ActiveCell.Offset(0, 1).Value
            TextBox6.Text = ActiveCell.Offset(0, 2).Value
            TextBox2.Text = ActiveCell.Offset(0, 3).Value
            TextBox7.Text = ActiveCell.Offset(0, 4).Value
            TextBox4.Text = ActiveCell.Offset(0, 5).Value
            TextBox8.Text = ActiveCell.Offset(0, 6).Value
            TextBox9.Text = ActiveCell.Offset(0, 7).Value
            TextBox10.Text = ActiveCell.Offset(0, 8).Value
            TextBox12.Text = ActiveCell.Offset(0, 9).Value
            TextBox11.Text = ActiveCell.Offset(0, 10).Value
            TextBox13.Text = ActiveCell.Offset(0, 11).Value
            Exit Do
        End If
        ActiveCell.Offset(1, 0).Select
    Loop
    'End If
End Sub
akekorn
Bronze
Bronze
Posts: 416
Joined: Wed Mar 09, 2011 5:19 pm

Re: ต้องการให้ข้อมูลเปลี่ยนแปลงตาม Combobox

#8

Post by akekorn »

ขอบคณมากครับหากมีปัญหาเพิ่มเติมจะรบกวนอีกครับผม
User avatar
bank9597
Guru
Guru
Posts: 3868
Joined: Wed Aug 17, 2011 11:49 am

Re: ต้องการให้ข้อมูลเปลี่ยนแปลงตาม Combobox

#9

Post by bank9597 »

:D อีกวิธีที่อยากเสนอแนะครับ

ลองสร้างชีท temp ขึ้นมา แล้วใส่สูตรเพื่อดึกค่าที่ต้องการมาวางก่อน จากนั้นค่อยดึงขึ้นโชว์บน Userform ครับ

ตัวอย่างโค๊ด

Code: Select all

Private Sub cbomonth_AfterUpdate()
            Dim shTemp As Worksheet
            Set shTemp = Worksheets("shTemp")
            shTemp.Range("B1") = Null
            shTemp.Range("A1") = Me.cbomonth
End Sub

Code: Select all

Private Sub cboroom_Change()
            Dim shTemp As Worksheet
            Set shTemp = Worksheets("shTemp")
            
            If IsNull(Me.cbomonth) Then
                    MsgBox "Please Input Month", vbCritical
            Else
                    shTemp.Range("B1") = Me.cboroom
                    Me.TextBox1 = shTemp.Range("A3")
                    Me.TextBox6 = shTemp.Range("B3")
                    Me.TextBox2 = shTemp.Range("C3")
                    Me.TextBox7 = shTemp.Range("D3")
                    Me.TextBox4 = shTemp.Range("E3")
                    Me.TextBox8 = shTemp.Range("F3")
                    Me.TextBox9 = shTemp.Range("G3")
                    Me.TextBox10 = shTemp.Range("H3")
                    Me.TextBox12 = shTemp.Range("I3")
                    Me.TextBox11 = shTemp.Range("J3")
                    Me.TextBox13 = shTemp.Range("K3")

            End If
End Sub
ด้วยวิธีการนี้จะทำให้เขียนโค๊ดได้ง่ายขึ้น แต่จะเขียนสูตรยากแทน :mrgreen:
กรณีมีความามารถด้านการใช้สูตรอยู่แล้ว ก็จะพอช่วยได้ ในกรณีที่ไม่เก่ง VBA ครับ
You do not have the required permissions to view the files attached to this post.
Forum Rules
  1. อย่าใช้ภาษาแชทในการตอบ-ถาม
  2. ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
  3. ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
  4. ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
  5. หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
  6. แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
Post Reply