Page 1 of 1

Loop แบบมีเงื่อนไข

Posted: Thu Jul 07, 2011 2:06 am
by Bafnet
สวัสดีครับอาจารย์ มีเรื่องรบกวนอีกแล้วครับ ผมสร้างเอกสารที่มี OptionButton ซึ่งได้ตั้งชื่อ Groupnameของแต่ละชุดแล้ว
โดยสร้างบนชีต
ผมมีตารางข้อมูลที่ต้องการสั่งLoop แล้วนำค่าไปแสดงที่หน้าเอกสาร (Loopจนกว่าจะพิมพ์ครบทุกข้อมูล) มีคำสั่งดังนี้(เขียนแบบผมนะ :lol: )
Private Sub CommandButton1_Click()
Dim Ing As Long, rs As Range, ry As Range
Sheet3.Range("AA11").Value = 1
On Error Resume Next
Do While Sheet3.Range("AA11").Value <> Sheet3.Range("Z11").Value 'ให้ทำจนกว่าลำดับค่าเริ่มต้นจะเท่ากับลำดับค่าที่มากที่สุด
With Worksheets("Open2")
Ing = Application.Match(Sheet3.Range("AB11").Value, Sheet3.Range("AA:AA"), 0)
Set rs = Sheet3.Range("AA" & Ing).Resize(, 8)
Set ry = Sheet3.Range("AI1")
End With
rs.Copy: ry.PasteSpecial xlPasteValues
Application.CutCopyMode = False
If Sheet1.Range("Z14").Value = 1 Then 'ผมกำหนดค่า Z14=IF(AI5="นาย",1,IF(AI5="นาง",2,IF(AI5="น.ส",3,FALSE))) ,AI5=LEFT(AI7,3) ,AI7=ชื่อลูกค้า)
Sheet1.OptionButton13.Value = True 'แสดงนาย
Sheet1.OptionButton14.Value = False
Sheet1.OptionButton15.Value = False
End If
If Sheet1.Range("Z14").Value = 2 Then
Sheet1.OptionButton14.Value = True 'แสดงนาง
Sheet1.OptionButton13.Value = False
Sheet1.OptionButton15.Value = False
End If
If Sheet1.Range("Z14").Value = 3 Then
Sheet1.OptionButton15.Value = True 'แสดงนางสาว
Sheet1.OptionButton13.Value = False
Sheet1.OptionButton14.Value = False
End If
If Sheet3.Range("Z15").Value = True Then ' Z15=IF(AI5="นาย",TRUE,FALSE),เพื่อระบุเพศ
Sheet1.OptionButton17.Value = True 'เพศชายแสดง
Sheet1.OptionButton18.Value = False 'เพศหญิง
End If
If Sheet3.Range("Z15").Value = False Then
Sheet1.OptionButton18.Value = True 'เพศหญิงแสดง
Sheet1.OptionButton17.Value = False 'เพศชาย
End If
Sheet1.TextBox1.Value = Sheet3.Range("AP1").Text
Sheet1.TextBox1.Value = Sheet3.Range("AN1").Text
Sheet1.Range("O14").Value = Sheet3.Range("AI1").Value
Sheet1.Range("X27").Value = Sheet3.Range("AL1").Value
Sheet1.PrintOut
Sheet3.Range("AA12").Value = Sheet3.Range("AA11").Value + 1
Sheet3.Range("AA11").Value = Sheet3.Range("AA12").Value
Loop
If Sheet3.Range("AA11").Value = Sheet3.Range("Z11").Value Then
Exit Sub
End If
If Err > 0 Then
Exit Sub
End If
End Sub
การloop เพื่อส่งข้อมูลก็โอเคครับมีข้อมูลในตาราง 10 ข้อมูลก็สามารถพิมพ์เอกสารของลูกค้าแต่ละรายได้ครบตามจำนวน
แต่ประเด็นคือ OptionButton ไม่ยอมแสดงค่าตามเงื่อนไขที่ตั้งไว้
1.JPG
พยายามคิดแก้ยังไงก็ไม่สำเร็จ(16.30-1.59 น.) :flw: รบกวนอาจารย์สอนหน่อยครับ

Re: Loop แบบมีเงื่อนไข

Posted: Thu Jul 07, 2011 4:54 pm
by Bafnet
อาจารย์ครับรบกวนอีกสักเรื่องผมสัยจังครับ
ผมรันงานที่ผมทำขึ้นบนเอ็กเซล 2003 ก็รันได้
แต่พอรันบนเอ็กเซล 2010 มันขึ้นลักษณะนี้ ทั้งๆที่เคยรันได้เป็นเพราะสาเหตุใดครับ
1.jpg
เป็นบ่อยมากครับบนวินโดว์7

Re: Loop แบบมีเงื่อนไข

Posted: Thu Jul 07, 2011 7:41 pm
by snasui
:D จาก Code ด้านบน ช่วยแนบไฟล์ Excel ที่เป็นตัวอย่างมาด้วยครับ จะได้สะดวกในการทดสอบ

Re: Loop แบบมีเงื่อนไข

Posted: Thu Jul 07, 2011 8:55 pm
by โดดเดี่ยวผู้น่ารัก
เป็นปัญหา Excel error เหมือนกันเลยค่ะ ไม่รู้เพราะอะไร

Re: Loop แบบมีเงื่อนไข

Posted: Sun Jul 10, 2011 11:13 pm
by Bafnet
สวัสดีครับอาจารย์ เรื่องที่ได้เรียนถามไป ผมก็ยังคงมีปัญหา แต่ก็แก้ไขโดยการใช้ Checkbox ของเครื่องมือฟอร์มแทนของทูลบ็อกในวีบี
บนเครื่องมือของฟอร์มมีการกำหนดเฟรมได้แต่ไม่สามารถกำหนดรูปแบบได้เหมือนกับเฟรมของทูลบ็อกในวีบี
อาจารย์ครับผมมีปัญหาอีกเรื่องคืออยากทราบว่าเช่นบนUSERFORM ผมใช้ Multipage ประกอบด้วยTEXTBoxหลายอัน
ผมต้องการให้TextBox เหล่านั้นเคลียข้อความเมื่อเปลี่ยนหน้า ลักษณะดังนี้
Private Sub MultiPage2_Change()
Label84.Visible = False
Label85.Visible = False
Label86.Visible = False
Label87.Visible = False
Sheet1.Range("G21").Value = ""
Sheet1.Range("G25").Value = ""
Sheet1.Range("E22").Value = ""
Sheet1.Range("F22").Value = ""
Sheet1.Range("AZ2:BF5").Value = ""
TextBox38.Text = ""
TextBox39.Text = ""
TextBox41.Text = ""
TextBox43.Text = ""
TextBox44.Text = ""
TextBox45.Text = ""
TextBox46.Text = ""
TextBox47.Text = ""
TextBox48.Text = ""
TextBox49.Text = ""
TextBox50.Text = ""
TextBox51.Text = ""
TextBox52.Text = ""
TextBox53.Text = ""
TextBox54.Text = ""
TextBox55.Text = ""
TextBox56.Text = ""
txtrebook.Text = ""
txtbook.Text = ""
Cbocode.Text = ""
ComboBox10.Text = ""
ComboBox10.Text = ""
On Error Resume Next
myPic = "C:\Program Files\BES 4U\DATA\pic\1.jpg"
Image11.Picture = LoadPicture(myPic)
If Err > 0 Then
Exit Sub
End If
End sub

ประเด็นคือมันมีคำสั่งหรือวิธีเขียนแบบว่าสั่งที่เดียวทุกTextBoxที่อยู่หน้านี้เคลียข้อความทั้งหมด
Private Sub MultiPage2_Change()
ALL TextBox.Text="" :lol: อยากได้ประมาณนี้ครับ พอมันเยอะๆแล้วเริ่มมึนครับ อาจารย์ช่วยหน่อยนะครับ แนะนำผมด้วย :roll:

Re: Loop แบบมีเงื่อนไข

Posted: Sun Jul 10, 2011 11:39 pm
by snasui
:D ใช้การ Loop หา TextBox เข้ามาช่วยได้ครับ เช่น

Code: Select all

Sub TextBookCount()
Dim Ctrl As Control
    For Each Ctrl In UserForm1.Controls
        If TypeName(Ctrl) = "TextBox" Then
            Ctrl = ""
        End If
     Next Ctrl
End Sub

Re: Loop แบบมีเงื่อนไข

Posted: Mon Jul 11, 2011 4:38 pm
by Bafnet
:lol: ขอบคุณมากๆครับ เป็นคำสั่งที่ให้ตรวจสอบว่าcontol ตัวที่ชื่อ textBox
หายเหนื่อยครับ ขอบคุณครับ :mrgreen: