Page 3 of 3

Re: ปัญหาการจัดคำแบบสอบถามใน excel

Posted: Thu Feb 20, 2014 11:39 pm
by snasui
:D ไม่พบไฟล์แนบครับ

Re: ปัญหาการจัดคำแบบสอบถามใน excel

Posted: Thu Feb 20, 2014 11:52 pm
by porkub1
ได้ครับอาจารย์ ขอโทษด้วยนะครับ

Code: Select all

Private Sub CommandButton1_Click()
    If TextBox1.Value = "" Then
        strvaluemsg = MsgBox("อ่าน, vbOKOnly + 64, "อ่าน")
    Else: strvaluemsg = MsgBox("ไปข้อ 1.2")
     
End If
  If OptionButtons("Option Button 9").Value = True Then
     Sheets("บันทึกข้อมูล").Range("a13") = 1
End If
If OptionButtons("Option Button 10").Value = True Then
     Sheets("บันทึกข้อมูล").Range("a13") = 2
End If
       
        Application.Goto reference:="r18c3"
   
   
End Sub
มีปัญหาที่ชีท "แบบสอบถามข้อ3" ตรงปุ่ม "บันทึก" CommandButton1 ครับ อาจารย์

Re: ปัญหาการจัดคำแบบสอบถามใน excel

Posted: Fri Feb 21, 2014 12:10 am
by snasui
:D ลองปรับ Code เป็นตามด้านล่างครับ

Code: Select all

Private Sub CommandButton1_Click()
    If TextBox1.Value = "" Then
        strvaluemsg = MsgBox("ทดสอบ", vbOKOnly + 64, "อ่าน")
    Else: strvaluemsg = MsgBox("ไปข้อ 1.2")
    End If
    If ActiveSheet.OptionButtons("Option Button 9").Value = 1 Then
        Sheets("บันทึกข้อมูล").Range("a13") = 1
    End If
    If ActiveSheet.OptionButtons("Option Button 10").Value = 1 Then
        Sheets("บันทึกข้อมูล").Range("a13") = 2
    End If
    Application.Goto reference:="r18c3"
End Sub

Re: ปัญหาการจัดคำแบบสอบถามใน excel

Posted: Fri Feb 21, 2014 8:52 am
by porkub1
ได้แล้วครับอาจารย์ ขอบคุณมากครับ

Re: ปัญหาการจัดคำแบบสอบถามใน excel

Posted: Sun Feb 23, 2014 2:56 pm
by porkub1
อาจารย์ครับ สอบถาม เรื่องการบันทึกคำตอบ ถ้าอยากให้ การกรอกข้อมูลลงใน textbox1 ในข้อ 1.1 จะมีการบันทึกคำตอบ 3 ครั้ง แต่จากโค้ดที่ผม ทำได้ จะบันทึกได้ ครั้งที่ 1 (ฺB9)และ ครั้งที่ 2(c9) ไม่มีปัญหา พอในครั้งที่ 3 ในเซลล์ (D9) นั้นคำตอบจาก ครั้งที่ 2 จะมาซ้ำในครั้งที่สาม ด้วย รบกวนอาจารย์ชี้แนะด้วยครับ :D

Code: Select all

Private Sub CommandButton1_Click()
    If TextBox1.Value = "" Then
        strvaluemsg = MsgBox("อ่าน", vbOKOnly + 64, "อ่าน")
    Else: strvaluemsg = MsgBox("ไปข้อ 1.2")
        With Worksheets("บันทึกข้อมูล")
            If .Range("b9") = "" Then
                .Range("b9") = TextBox1.Value
            Else
                .Range("b" & Rows.Count).End(xlUp).Offset(0, 1) = TextBox1.Value
           
        
End If
  
       
        Application.Goto reference:="ques1.2"
    End With
    End If
End Sub
โค้ดนี้จะอยู่ในชีท "แบบสอบถาม" อยู่ในปุ่ม บันทึก ใน ข้อ 1.1 ครับ

Re: ปัญหาการจัดคำแบบสอบถามใน excel

Posted: Sun Feb 23, 2014 3:20 pm
by snasui
:D ตัวอย่าง Code ตามด้านล่างครับ

Code: Select all

Private Sub CommandButton1_Click()
    If TextBox1.Value = "" Then
        strvaluemsg = MsgBox("·´Êͺ", vbOKOnly + 64, "ÍèÒ¹")
    Else
        strvaluemsg = MsgBox("仢éÍ 1.2")
        With Worksheets("ºÑ¹·Ö¡¢éÍÁÙÅ")
            If .Range("b9") = "" Then
                .Range("b9") = TextBox1.Value
            ElseIf .Range("c9") = "" Then
                .Range("c9") = TextBox1.Value
            ElseIf .Range("d9") = "" Then
                .Range("d9") = TextBox1.Value
            End If
            Application.Goto reference:="ques1.2"
        End With
    End If
End Sub

Re: ปัญหาการจัดคำแบบสอบถามใน excel

Posted: Sun Feb 23, 2014 3:43 pm
by porkub1
ได้แล้วครับ ขอบคุณครับอาจารย์

Re: ปัญหาการจัดคำแบบสอบถามใน excel

Posted: Fri Feb 28, 2014 3:41 pm
by porkub1
สวัสดีครับ อาจารย์ ผมมีข้อสงสัย ดังนี้ครับ
จากไฟล์ที่แนบ เรื่องแบบสอบถาม จาก ข้อ 2.2 ในชีท "แบบสอบถามข้อ3 " เรื่องการบันทึก ข้อมูลของค่า optionbutton นะครับ คือ ผมได้กำหนดถ้า ตอบ ใช่ มีค่าเท่ากับ 1
ไม่ มีค่าเท่ากับ 2
ทีนี้ ค่าที่ตอบนั้น ในชีท "บันทึกข้อมูล" ในเซลล์ "c5" จะบันทึกค่า ได้ ไม่มีปัญหา แต่ผมต้องการว่า เมื่อมีการตอบแบบสอบถามอีกครั้งซ้ำ กัน เพียงแค่ 3 ครั้ง เท่านั้น
โดยที่จะบันทึกข้อมูล ในเซลล์ "F5 และ I5 " ตามลำดับ

สิ่งที่ผมทำได้ คือ จะบันทึก ค่าคำตอบ ทับ กัน และ เมื่อตอบหลายๆๆครั้งที่มากกว่า 3 ครั้ง จะ จะเกินตารางที่ได้สร้างไว้ครับ ผมต้องการในบันทึก แค่เพียง 3 ครั้ง ครับ
โค้ดจะอยู่ใน ชีท "แบบสอบถามข้อ3 " ปุ่ม "บันทึกครับ(CommandButton1)"
แนบโค้ดครับ

Code: Select all

Private Sub CommandButton1_Click()
    
    If TextBox1.Value = "" Then
        strvaluemsg = MsgBox("ทดสอบ", vbOKOnly + 64, "อ่าน")
    Else: strvaluemsg = MsgBox("ไปข้อ 1.2")
    End If
    If ActiveSheet.OptionButtons("Option Button 9").Value = 1 Then
        Sheets("บันทึกข้อมูล").Range("c5") = 1
    End If
    If ActiveSheet.OptionButtons("Option Button 10").Value = 1 Then
        Sheets("บันทึกข้อมูล").Range("c5") = 2
    End If
    Application.Goto reference:="r18c3"

        With Worksheets("บันทึกข้อมูล")
      If .Range("c6") = "" Then
                .Range("c6") = TextBox1.Value
            ElseIf .Range("f6") = "" Then
                .Range("f6") = TextBox1.Value
            ElseIf .Range("i6") = "" Then
                .Range("i6") = TextBox1.Value
          
End If
 End With

End Sub
ขอบพระคุณอาจารย์ มากครับ

Re: ปัญหาการจัดคำแบบสอบถามใน excel

Posted: Fri Feb 28, 2014 4:52 pm
by porkub1
อีกเรื่องหนึ่งนะครับ จากไฟล์ ในข้อ 2.2 เมื่อกด บันทึกข้อมูล จะมีกล่องเตือนการบันทึกแล้วจะมี User form บันทึกข้อมูล

ทีนี้ผมอยากจะสอบถามว่า ผมอยากจะใช้ user form นี้ในการบันทึกในข้ออื่นๆ ต่อจะได้ไหมครับ
โดยให้ กล่องcombobox1 ที่อยู่ใน userform ไปบันทึก ในเซลล์ d14 g14 j14 ตามลำดับ
และ textbox1 ที่อยู่ใน userform ไปบันทึก ในเซลล์ e14 h14 k14

โดยถ้ากรณีไม่ได้ผมก็คงต้อง สร้าง userform ในทุกข้อขึ้นมาใหม่ ใช่มั้ยครับ รบกวนอาจารย์ด้วยนะครับ ขอบคุณครับ

โค้ดครับ ใน userform4 ในปุ่มบันทึก (commandbutton1)

ต้องดู ไฟล์อันนี้ดูด้วยนะครับ เพราะเป็นที่ไฟล์ที่จะมี Userform ครับ

Code: Select all

Private Sub CommandButton1_Click()
If ComboBox1.Value = "" Then
MsgBox ("กรุณาเลือก"), vbOKOnly + 16, "กรุณาอ่าน"

ElseIf TextBox1.Value = "" Then
MsgBox ("กรุณาระบุข้อที่ท่านตอบ"), vbOKOnly + 16, "กรุณาอ่าน"
Else:
strvaluemsg = MsgBox("ข้อมูลของท่านได้บันทึกแล้ว ", vbOKOnly + 64, "ขอบคุณ")
With Worksheets("บันทึกข้อมูล")
            If .Range("d5") = "" Then
                .Range("d5") = ComboBox1.Value
            ElseIf .Range("g5") = "" Then
                .Range("g5") = ComboBox1.Value
            ElseIf .Range("j5") = "" Then
                .Range("j5") = ComboBox1.Value
            End If
             If .Range("e5") = "" Then
                .Range("e5") = TextBox1.Value
            ElseIf .Range("h5") = "" Then
                .Range("h5") = TextBox1.Value
                ElseIf .Range("k5") = "" Then
                .Range("k5") = TextBox1.Value
                
            End If

Unload Me
End With
End If
End Sub

Re: ปัญหาการจัดคำแบบสอบถามใน excel

Posted: Sat Mar 01, 2014 8:05 am
by snasui
porkub1 wrote:สิ่งที่ผมทำได้ คือ จะบันทึก ค่าคำตอบ ทับ กัน และ เมื่อตอบหลายๆๆครั้งที่มากกว่า 3 ครั้ง จะ จะเกินตารางที่ได้สร้างไว้ครับ ผมต้องการในบันทึก แค่เพียง 3 ครั้ง
:D Code ที่เขียนมาเป็นได้แค่บันทึกซ้ำกัน ไม่มี Code บรรทัดใดบันทึกเกินไปกว่าขอบเขตที่กำหนด

หากต้องการให้บันทึกเพียง 3 ครั้งสามารถใช้การตรวจสอบค่าในคอลัมน์ I ได้ว่าถูกบันทึกแล้วหรือไม่ หากถูกบันทึกแล้วให้ Exit ออกไป ตัวอย่าง Code ตามด้านล่างครับ

Code: Select all

Private Sub CommandButton1_Click()
    If TextBox1.Value = "" Then
        strvaluemsg = MsgBox("ทดสอบ", vbOKOnly + 64, "อ่าน")
    Else: strvaluemsg = MsgBox("ไปข้อ 1.2")
    End If
    If ActiveSheet.OptionButtons("Option Button 9").Value = 1 Then
        Sheets("บันทึกข้อมูล").Range("c5") = 1
    End If
    If ActiveSheet.OptionButtons("Option Button 10").Value = 1 Then
        Sheets("บันทึกข้อมูล").Range("c5") = 2
    End If
    Application.Goto reference:="r18c3"
    With Worksheets("บันทึกข้อมูล")
        If .Range("i6") <> "" Then Exit Sub
        If .Range("c6") = "" Then
            .Range("c6") = TextBox1.Value
        ElseIf .Range("f6") = "" Then
            .Range("f6") = TextBox1.Value
        ElseIf .Range("i6") = "" Then
            .Range("i6") = TextBox1.Value
        End If
    End With
End Sub

Re: ปัญหาการจัดคำแบบสอบถามใน excel

Posted: Sat Mar 01, 2014 8:16 am
by snasui
porkub1 wrote:อีกเรื่องหนึ่งนะครับ จากไฟล์ ในข้อ 2.2 เมื่อกด บันทึกข้อมูล จะมีกล่องเตือนการบันทึกแล้วจะมี User form บันทึกข้อมูล

ทีนี้ผมอยากจะสอบถามว่า ผมอยากจะใช้ user form นี้ในการบันทึกในข้ออื่นๆ ต่อจะได้ไหมครับ
โดยให้ กล่องcombobox1 ที่อยู่ใน userform ไปบันทึก ในเซลล์ d14 g14 j14 ตามลำดับ
และ textbox1 ที่อยู่ใน userform ไปบันทึก ในเซลล์ e14 h14 k14

โดยถ้ากรณีไม่ได้ผมก็คงต้อง สร้าง userform ในทุกข้อขึ้นมาใหม่ ใช่มั้ยครับ รบกวนอาจารย์ด้วยนะครับ ขอบคุณครับ
:D การทำเช่นนั้นจะต้องกำหนดตัวแปรให้กับเซลล์ที่จะบันทึกข้อมูล ไม่ใช่ระบุไปตรง ๆ ว่าเป็น Range("e14"), Range("h14") ฯลฯ

ยกตัวอย่างเช่นให้บรรทัดเป็นค่าตัวแปร i หากค่าแรกคือบรรทัดที่ 6 บรรทัดถัดไปต้องบวกด้วย 8 เราสามารถบวกค่าตัวแปร i ไป 8 เพื่อไปยังบรรทัดถัดไปตามต้องการ เช่น

Code: Select all

dim i as integer
dim j as integer
i = 6
for j = 1 to 5
   range("a" & i) = i
   i = i + 8
next j
จากด้านบนเป็นการยกตัวอย่างให้เห็นว่าเราสามารถสร้างตัวแปรเข้าไปช่วยเพื่อให้บันทึกในบรรทัดใด ๆ ตามต้องการ ไม่จำเป็นต้องสร้าง UserForm ในทุก ๆ ข้อครับ

Re: ปัญหาการจัดคำแบบสอบถามใน excel

Posted: Sat Mar 01, 2014 8:19 pm
by porkub1
:D ขอบพระคุณอาจารย์ครับ ที่ช่วยตอบ แต่ทีนี้ ที่อาจารย์แนะนำ นั้นจะเป็นการบันทึกใน ส่วน ที่ เป็น textbox
แต่ทีนี้ผมต้องการบันทึกในส่วนค่าที่เกิดจาก optionbutton ครับ เนื่องจาก จะตั้งค่า ใช่ =1 ไม่ =2 จากโค้ดที่ผมทำได้นั้น ค่าจะบันทึก ทับกันอยู่ในในช่องเดียว คือเซลล์ C5 ผมอยากให้ บันทึก ครั้งแรก ที่ C5 ครั้งที่ 2 "F5" ครั้งที่ 3 "I5" ตามลำดับครับ ผมงงว่าจะเขียนโค้ดแบบไหนดี เพราะ
ที่ตั้งค่าจะกำหนดแบบเฉพาะเซลล์ อยากจะให้อาจารย์ช่วยชี้แนะ ครับ ขอบคุณครับ
โค้ดอยู่ใน ปุ่ม บันทึก"CommandButton1" ครับ

Code: Select all

Private Sub CommandButton1_Click()
    
   
    If ActiveSheet.OptionButtons("Option Button 9").Value = 1 Then
        Sheets("บันทึกข้อมูล").Range("c5") = 1
    End If
    If ActiveSheet.OptionButtons("Option Button 10").Value = 1 Then
        Sheets("บันทึกข้อมูล").Range("c5") = 2
    End If


      


End Sub

Re: ปัญหาการจัดคำแบบสอบถามใน excel

Posted: Sat Mar 01, 2014 8:37 pm
by snasui
:D ตัวอย่าง Code ตามด้านล่างครับ

Code: Select all

If ActiveSheet.OptionButtons("Option Button 9").Value = 1 Then
    With Sheets("บันทึกข้อมูล")
        If .Range("c5") = "" Then
            .Range("c5") = 1
        ElseIf .Range("f5") = "" Then
            .Range("f5") = 1
        Else
            .Range("i5") = 1
        End If
    End With
End If
If ActiveSheet.OptionButtons("Option Button 10").Value = 1 Then
    With Sheets("บันทึกข้อมูล")
        If .Range("c5") = "" Then
            .Range("c5") = 2
        ElseIf .Range("f5") = "" Then
            .Range("f5") = 2
        Else
            .Range("i5") = 2
        End If
    End With
End If
ส่วนการประยุกต์ให้บันทึกในบรรทัดถัด ๆ ไปก็ใส่ตัวแปรเข้าไปได้เช่นกัน ซึ่งต้องเขียนมาเอง ติดแล้วค่อยถามกันต่อครับ

Re: ปัญหาการจัดคำแบบสอบถามใน excel

Posted: Sat Mar 01, 2014 9:45 pm
by porkub1
:cp: :cp: :thup: :thup: อันนี้แหละครับ ที่ผมติดอยู่ครับ อาจารย์ แต่ขอเพิ่มเติมนะครับ
เรื่อง userform ที่ผมได้เคยถามไป
จาก userform4 จากในไฟล์นะครับ คือ เมื่อคลิกบันทึกในข้อ 3.2 จะมี userform ปรากฏขึ้นมา จากสูตรของอาจารย์ให้ ผมสามารถ บันทึก ได้ 3 ครั้งจากที่ผมกำหนดไว้ แต่ที่นี้ผมจะใช้ userform ดังกล่าว ในข้อ 3.3 หรือ ข้ออื่นๆที่มีได้ หรือไม่ครับ

ในแนวทางแก้ปัญหาที่ผมคิดคือ ต้องสร้าง userform ใหม่ในทุกข้อ แต่ข้อคำถามผมจะมี 80 กว่าข้อเลยครับ

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

โค้ดจะอยู่ใน Userform 4 อยู่ในปุ่ม บันทึก ครับ

Code: Select all

If ComboBox1.Value = "" Then
MsgBox ("กรุณาเลือก"), vbOKOnly + 16, "กรุณาอ่าน"

ElseIf TextBox1.Value = "" Then
MsgBox ("กรุณาระบุข้อที่ท่านตอบ"), vbOKOnly + 16, "กรุณาอ่าน"
Else:
strvaluemsg = MsgBox("ข้อมูลของท่านได้บันทึกแล้ว ", vbOKOnly + 64, "ขอบคุณ")
With Worksheets("บันทึกข้อมูล")
            If .Range("d5") = "" Then
                .Range("d5") = ComboBox1.Value
            ElseIf .Range("g5") = "" Then
                .Range("g5") = ComboBox1.Value
            ElseIf .Range("j5") = "" Then
                .Range("j5") = ComboBox1.Value
            End If
             If .Range("e5") = "" Then
                .Range("e5") = TextBox1.Value
            ElseIf .Range("h5") = "" Then
                .Range("h5") = TextBox1.Value
                ElseIf .Range("k5") = "" Then
                .Range("k5") = TextBox1.Value
                
            End If


    


Unload Me
End With
End If
End Sub

Re: ปัญหาการจัดคำแบบสอบถามใน excel

Posted: Sat Mar 01, 2014 9:54 pm
by snasui
:D สำหรับการใช้ VBA โอกาสที่ไม่สามารถทำได้แทบไม่มี เพราะเป็นการเขียนโปรแกรม แต่จะทำได้แค่ไหนขึ้นอยู่กับผู้ใช้

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

ที่เขียนมานั้นไม่พบว่าได้เขียนตามที่ผมแนะนำไป หากจะเขียน UserForm ให้กับทุกข้อก็แล้วแต่สะดวกครับ

Re: ปัญหาการจัดคำแบบสอบถามใน excel

Posted: Sat Mar 01, 2014 10:05 pm
by porkub1
ได้ครับจะลองดูครับ ขอบคุณครับอาจารย์