Page 1 of 2

สอบถามการเขียน vba

Posted: Tue Sep 13, 2011 12:56 pm
by yodpao.b
คำถาม ทำ 1-100 ได้ แต่ถ้าทำเป็นช่วงให้เลือก ช่วงละ25,30,40,50,100,120 เขียน Code ครับทำอย่างไร
code เดิม

Code: Select all

"Private Sub UserForm_Initialize()
    For i = 1 To 100
    ComboBox2.AddItem i
    Next i
End Sub"		

Re: สอบถามการเขียน vba

Posted: Tue Sep 13, 2011 2:00 pm
by snasui
ลองตามนี้ครับ

Code: Select all

Private Sub UserForm_Initialize()
    With ComboBox2
        .AddItem 10
        .AddItem 20
        .AddItem 30
    End With
End Sub
สามารถเพิ่มเข้าไปตามลักษณะด้านบนได้ตามต้องการครับ

Re: สอบถามการเขียน vba

Posted: Tue Sep 13, 2011 2:06 pm
by yodpao.b
ขอบคุณครับ

Re: สอบถามการเขียน vba

Posted: Wed Sep 14, 2011 11:59 am
by yodpao.b
อาจาร์ยครับ และถ้าเป็นวันที่ จะเปลี่ยน Code อย่างไร
ยกตัวอย่าง 1/1/2010-1/2/2010

Code: Select all

Private Sub UserForm_Initialize()
    For i = 1 To 100
    ComboBox2.AddItem i
    Next i
End Sub

Re: สอบถามการเขียน vba

Posted: Wed Sep 14, 2011 12:09 pm
by snasui
:D ลองตามนี้ครับ

Code: Select all

Private Sub UserForm_Initialize()
    For i = #1/1/2010# To #2/1/2010#
    ComboBox2.AddItem i
    Next i
End Sub

Re: สอบถามการเขียน vba

Posted: Wed Sep 14, 2011 2:00 pm
by yodpao.b
เกียวกับวันที่ ไม่ทราบว่าต้องเอาตัวเลขอะไรไปลบ

Code: Select all

Private Sub CommandButton1_Click()
    Range("D4") = TextBox1.Text
End Sub
ผลลัพท์ออกมาในช่องสีเหลื่อง ข้อแม้ต้องแสดงเป็น วัน-เดือน-ค.ศ.

Re: สอบถามการเขียน vba

Posted: Wed Sep 14, 2011 2:04 pm
by snasui
:shock: กำลังจะทำอะไรครับ :?: เซลล์ไหนของชีทไหนเป็นสีเหลือง ช่วยอธิบายให้เข้าใจด้วยครับ คำถามและคำตอบตามด้านบนใช้ได้หรือไม่ได้ควรแจ้งกลับด้วยครับ :twisted:

Re: สอบถามการเขียน vba

Posted: Wed Sep 14, 2011 3:42 pm
by yodpao.b
1. คลิก CommandButton1
2. ได้ผลลัพท์อยู่ในเซล D4 โดยอ้างอิงจาก TextBox1
หมายเหตุ ข้อแม้ต้องแสดงเป็น วัน-เดือน-ค.ศ. ผลที่ได้คือ 1-ม.ค.-2010


อทิบาย เนื่องจากในฟอร์มที่ทำต้องการแสดงให้เป็น พ.ศ.2554 แต่เมื่อส่งให้ไปเก็บใน excel มันจะนับเป็น ค.ศ.
เมื่อนำมาคำนวนจะเกิดการผิดพลาด
1.เข้าใจว่าน่าจะเอาตัวเลขมาลบในTextBox1 ก่อน
2.และใช้ fomat text ให้วันเป็นภาษาไทย
ทั้งข้อ1และ2ผมทำไม่ได้

Re: สอบถามการเขียน vba

Posted: Wed Sep 14, 2011 3:45 pm
by yodpao.b
snasui wrote::shock: คำตอบตามด้านบนใช้ได้หรือไม่ได้ควรแจ้งกลับด้วยครับ :twisted:
ใช้ได้ครับ แต่ที่ถามเป็นหัวข้อใหม่ครับ

Re: สอบถามการเขียน vba

Posted: Wed Sep 14, 2011 3:54 pm
by snasui
:D ช่วยตรวจสอบไฟล์แนบด้วยครับว่าเป็นไฟล์ที่ต้องการแนบมาหรือไม่ เนื่องจาก Code ที่สั่งในการ Run ไม่ตรงกันครับ

Code ในฟอรัม
yodpao.b wrote:Private Sub CommandButton1_Click()
    Range("D4") = TextBox1.Text
End Sub
Code ในไฟล์แนบเป็นตามภาพด้านล่าง ทั้งไม่มี CommandButton1 ให้คลิกเพื่อทดสอบ Code

Re: สอบถามการเขียน vba

Posted: Thu Sep 15, 2011 9:56 am
by yodpao.b
อาจารย์ช่วยเปิดดูไฟล์นี้ใหม่นะครับ ผมทำมาใหม่ อาจารย์ช่วยแนะนำด้วยครับ

Re: สอบถามการเขียน vba

Posted: Thu Sep 15, 2011 10:07 am
by snasui
:D ลองปรับ Code เป็นด้านล่างครับ

Code: Select all

Private Sub CommandButton1_Click()
    Sheets("cal_1").Select
                Range("B13") = CobBox15.Text
                Range("B14") = CobBox16.Text
                Range("B16") = CobBox21.Text
                Range("B18") = DateSerial(Year(Date) + 543, Month(Date), Day(Date))
    Unload Me
End Sub

Re: สอบถามการเขียน vba

Posted: Thu Sep 15, 2011 1:22 pm
by yodpao.b
ใช้ได้เลยครับอาจารย์
คำถามใหม่

Code: Select all

Private Sub CommandButton1_Click()
    Sheets("cal_1").Select
                Range("B13") = CobBox15.Text
                Range("B14") = CobBox16.Text
                Range("B16") = CobBox21.Text   
                Range("B18") = Date                         
    Unload Me
End Sub
อาจาร์ยครับจาก code นี้
Range("B16") จะมีค่า 21-มี.ค.-2554
แต่ถ้าต้องการให้มีค่าเป็น 21-มี.ค.-2011 ต้องเปลียน code ใดครับ

Re: สอบถามการเขียน vba

Posted: Thu Sep 15, 2011 2:35 pm
by snasui
:D ลองทดสอบตัวอย่างตามด้านล่างครับ

Code: Select all

Private Sub CommandButton1_Click()
    Sheets("cal_1").Select
                Range("B13") = CobBox15.Text
                Range("B14") = CobBox16.Text
                Range("B16") = DateSerial(Year(CDate(CobBox21)), Month( _
                    CDate(CobBox21)), Day(CDate(CobBox21)))
                Range("B18") = "=TODAY()"
    Unload Me
End Sub

Re: สอบถามการเขียน vba

Posted: Fri Sep 16, 2011 8:27 am
by yodpao.b

Code: Select all

Range("B18") = DateSerial(Year(Date) + 543, Month(Date), Day(Date))

Code: Select all

Range("B16") = DateSerial(Year(CDate(CobBox21)), Month( _
                    CDate(CobBox21)), Day(CDate(CobBox21)))
อาจารย์ครับ ขอถาม 2 ข้อ
1. จาก Code ด้านบน Range("B18") จำนวนปี บวกด้วย 543 จึงได้เป็น พ.ศ. และทำไม Range("B16") Year(CDate (CobBox21) ถึงไม่ ลบด้วย 543
2. จากรูปด้านล่าง วันแรกเริ่มที่ 8 ม.ค.2554 วันหมดคำสั่งสิ้นสุดที่ 13 ม.ค.2554
ขอถามว่า " วันที่ปฏิบัติงานล่วงเวลา " สามารถให้สิ้นสุดที่ วันที่คำสั่งหมด ได้ไหมครับ
สาเหตุเพื่อลดการผิดพลาดในการเลือกข้อมูล

Code เดิม

Code: Select all

Private Sub CobBox15_Change()
MyCobBox15 = CobBox15.Text
Range("K6").Select
Do While ActiveCell.Value <> MyCobBox15
         ActiveCell.Offset(1, 0).Select
Loop
Do While Not IsEmpty(ActiveCell.Value)
         CobBox16.AddItem ActiveCell.Value
         ActiveCell.Offset(1, 0).Select
Loop

MyCobBox15 = CobBox15.Text                          ' code นี้ที่สั่งให้ CobBox21 ทำงาน
Range("K6").Select
Do While ActiveCell.Value <> MyCobBox15
         ActiveCell.Offset(1, 0).Select
Loop
Do While Not IsEmpty(ActiveCell.Value)
         CobBox21.AddItem ActiveCell.Value
         ActiveCell.Offset(1, 0).Select
Loop
End Sub

Re: สอบถามการเขียน vba

Posted: Fri Sep 16, 2011 9:06 am
by snasui
yodpao.b wrote:1. จาก Code ด้านบน Range("B18") จำนวนปี บวกด้วย 543 จึงได้เป็น พ.ศ. และทำไม Range("B16") Year(CDate (CobBox21) ถึงไม่ ลบด้วย 543
Range("B18") ใช้คำสั่ง Now() จะได้วันที่ที่เป็นปี ค.ศ. มีลักษณะเป็น Number หากต้องการทำให้เป็นปีพ.ศ.ต้องเอา 543 ไปบวกที่ส่วนของปีครับ

ส่วน Range("B16") มาจาก CobBox21 ซึ่งเป็นปี พ.ศ. อยู่แล้วทั้งยังเป็น Text ไม่ใช่ Number เหมือน Range("B18")
yodpao.b wrote:2. จากรูปด้านล่าง วันแรกเริ่มที่ 8 ม.ค.2554 วันหมดคำสั่งสิ้นสุดที่ 13 ม.ค.2554
ขอถามว่า " วันที่ปฏิบัติงานล่วงเวลา " สามารถให้สิ้นสุดที่ วันที่คำสั่งหมด ได้ไหมครับ
ก็ต้องบอกโปรแกรมครับว่าเงื่อนไขคือนำวันที่น้อยกว่าหรือเท่ากับค่าวันหมดคำสั่งไปใช้ ตัวอย่างเช่น

Code: Select all

Do While Not IsEmpty(ActiveCell.Value)
        If ActiveCell <= CobBox16.Text Then
            CobBox21.AddItem ActiveCell.Value
        End If
         ActiveCell.Offset(1, 0).Select
Loop

Re: สอบถามการเขียน vba

Posted: Fri Sep 16, 2011 11:21 am
by yodpao.b

Code: Select all

Do While Not IsEmpty(ActiveCell.Value)
        If ActiveCell <= CobBox16.Text Then
            CobBox21.AddItem ActiveCell.Value
        End If
         ActiveCell.Offset(1, 0).Select
Loop
นำโค้ดนี้ใส่ไว้ที่ไหนครับ
ลองใส่ไว้ที่ CobBox16
CobBox21 ก็ไม่โชว์อะไร

Re: สอบถามการเขียน vba

Posted: Fri Sep 16, 2011 11:34 am
by snasui
:D แนบไฟล์ล่าสุดที่ปรับแล้วมาด้วยครับ จะได้ช่วยทดสอบครับ

Re: สอบถามการเขียน vba

Posted: Fri Sep 16, 2011 11:46 am
by yodpao.b
แนบไฟล์ มาแล้วครับ อาจารย์ช่วยดูหน่อย

Re: สอบถามการเขียน vba

Posted: Fri Sep 16, 2011 12:25 pm
by snasui
:D ปรับ Code เป็นตามด้านล่างครับ

Code: Select all

Private Sub CobBox15_Change()
'MyCobBox15 = CobBox15.Text
Range("K6").Select
'Do While ActiveCell.Value <> MyCobBox15
'         ActiveCell.Offset(1, 0).Select
'Loop
Do While Not IsEmpty(ActiveCell.Value)
    If CDate(ActiveCell.Value) >= CDate(CobBox15.Text) Then
            CobBox16.AddItem ActiveCell.Value
    End If
    ActiveCell.Offset(1, 0).Select
Loop
End Sub

Private Sub CobBox16_Change()
'MyCobBox15 = CobBox15.Text
Range("K6").Select
'Do While ActiveCell.Value <> MyCobBox15
'         ActiveCell.Offset(1, 0).Select
'Loop
Do While Not IsEmpty(ActiveCell.Value)
    If CDate(ActiveCell.Value) >= CDate(CobBox15.Text) And _
        CDate(ActiveCell.Value) <= CDate(CobBox16.Text) Then
        CobBox21.AddItem ActiveCell.Value
    End If
    ActiveCell.Offset(1, 0).Select
Loop
End Sub