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

ลองตามนี้ครับ
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

กำลังจะทำอะไรครับ

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

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:
คำตอบตามด้านบนใช้ได้หรือไม่ได้ควรแจ้งกลับด้วยครับ

ใช้ได้ครับ แต่ที่ถามเป็นหัวข้อใหม่ครับ
Re: สอบถามการเขียน vba
Posted: Wed Sep 14, 2011 3:54 pm
by snasui

ช่วยตรวจสอบไฟล์แนบด้วยครับว่าเป็นไฟล์ที่ต้องการแนบมาหรือไม่ เนื่องจาก 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

ลองปรับ 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

ลองทดสอบตัวอย่างตามด้านล่างครับ
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

แนบไฟล์ล่าสุดที่ปรับแล้วมาด้วยครับ จะได้ช่วยทดสอบครับ
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

ปรับ 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