: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

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

ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and VBA
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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
yodpao.b
Gold
Gold
Posts: 1536
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

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

#1

Post 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"		
User avatar
snasui
Site Admin
Site Admin
Posts: 30761
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

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

#2

Post by snasui »

ลองตามนี้ครับ

Code: Select all

Private Sub UserForm_Initialize()
    With ComboBox2
        .AddItem 10
        .AddItem 20
        .AddItem 30
    End With
End Sub
สามารถเพิ่มเข้าไปตามลักษณะด้านบนได้ตามต้องการครับ
yodpao.b
Gold
Gold
Posts: 1536
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

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

#3

Post by yodpao.b »

ขอบคุณครับ
yodpao.b
Gold
Gold
Posts: 1536
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

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

#4

Post 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
User avatar
snasui
Site Admin
Site Admin
Posts: 30761
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

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

#5

Post 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
yodpao.b
Gold
Gold
Posts: 1536
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

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

#6

Post by yodpao.b »

เกียวกับวันที่ ไม่ทราบว่าต้องเอาตัวเลขอะไรไปลบ

Code: Select all

Private Sub CommandButton1_Click()
    Range("D4") = TextBox1.Text
End Sub
ผลลัพท์ออกมาในช่องสีเหลื่อง ข้อแม้ต้องแสดงเป็น วัน-เดือน-ค.ศ.
User avatar
snasui
Site Admin
Site Admin
Posts: 30761
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

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

#7

Post by snasui »

:shock: กำลังจะทำอะไรครับ :?: เซลล์ไหนของชีทไหนเป็นสีเหลือง ช่วยอธิบายให้เข้าใจด้วยครับ คำถามและคำตอบตามด้านบนใช้ได้หรือไม่ได้ควรแจ้งกลับด้วยครับ :twisted:
yodpao.b
Gold
Gold
Posts: 1536
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

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

#8

Post by yodpao.b »

1. คลิก CommandButton1
2. ได้ผลลัพท์อยู่ในเซล D4 โดยอ้างอิงจาก TextBox1
หมายเหตุ ข้อแม้ต้องแสดงเป็น วัน-เดือน-ค.ศ. ผลที่ได้คือ 1-ม.ค.-2010


อทิบาย เนื่องจากในฟอร์มที่ทำต้องการแสดงให้เป็น พ.ศ.2554 แต่เมื่อส่งให้ไปเก็บใน excel มันจะนับเป็น ค.ศ.
เมื่อนำมาคำนวนจะเกิดการผิดพลาด
1.เข้าใจว่าน่าจะเอาตัวเลขมาลบในTextBox1 ก่อน
2.และใช้ fomat text ให้วันเป็นภาษาไทย
ทั้งข้อ1และ2ผมทำไม่ได้
yodpao.b
Gold
Gold
Posts: 1536
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

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

#9

Post by yodpao.b »

snasui wrote::shock: คำตอบตามด้านบนใช้ได้หรือไม่ได้ควรแจ้งกลับด้วยครับ :twisted:
ใช้ได้ครับ แต่ที่ถามเป็นหัวข้อใหม่ครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 30761
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

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

#10

Post by snasui »

:D ช่วยตรวจสอบไฟล์แนบด้วยครับว่าเป็นไฟล์ที่ต้องการแนบมาหรือไม่ เนื่องจาก Code ที่สั่งในการ Run ไม่ตรงกันครับ

Code ในฟอรัม
yodpao.b wrote:Private Sub CommandButton1_Click()
    Range("D4") = TextBox1.Text
End Sub
Code ในไฟล์แนบเป็นตามภาพด้านล่าง ทั้งไม่มี CommandButton1 ให้คลิกเพื่อทดสอบ Code
You do not have the required permissions to view the files attached to this post.
yodpao.b
Gold
Gold
Posts: 1536
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

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

#11

Post by yodpao.b »

อาจารย์ช่วยเปิดดูไฟล์นี้ใหม่นะครับ ผมทำมาใหม่ อาจารย์ช่วยแนะนำด้วยครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 30761
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

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

#12

Post 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
yodpao.b
Gold
Gold
Posts: 1536
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

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

#13

Post 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 ใดครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 30761
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

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

#14

Post 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
yodpao.b
Gold
Gold
Posts: 1536
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

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

#15

Post 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
User avatar
snasui
Site Admin
Site Admin
Posts: 30761
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

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

#16

Post 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
yodpao.b
Gold
Gold
Posts: 1536
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

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

#17

Post 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 ก็ไม่โชว์อะไร
User avatar
snasui
Site Admin
Site Admin
Posts: 30761
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

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

#18

Post by snasui »

:D แนบไฟล์ล่าสุดที่ปรับแล้วมาด้วยครับ จะได้ช่วยทดสอบครับ
yodpao.b
Gold
Gold
Posts: 1536
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

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

#19

Post by yodpao.b »

แนบไฟล์ มาแล้วครับ อาจารย์ช่วยดูหน่อย
User avatar
snasui
Site Admin
Site Admin
Posts: 30761
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

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

#20

Post 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
Post Reply