: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

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

Post a reply


This question is a means of preventing automated form submissions by spambots.
Smilies
:D :thup: :cp: :flw: :rz: :sg: :tt: :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :arrow: :ard: :arl: :aru: :| :mrgreen: :geek: :ugeek:

BBCode is ON
[img] is ON
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: สอบถามการเขียน vba

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

#26

by yodpao.b » Fri Sep 16, 2011 3:05 pm

เรียบร้อยอีก forum

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

#25

by snasui » Fri Sep 16, 2011 2:40 pm

:lol: ลองปรับเป็นตามด้านล่างครับ

Code: Select all

Private Sub CobBox15_Change()
Dim i As Integer
If CobBox16.ListCount > 1 Then
    For i = CobBox16.ListCount To 1 Step -1
        CobBox16.RemoveItem i - 1
    Next i
End If
Range("K6").Select
CobBox16.Text = ""
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()
Dim i As Integer
If CobBox21.ListCount > 1 Then
    For i = CobBox21.ListCount To 1 Step -1
        CobBox21.RemoveItem i - 1
    Next i
End If
CobBox21.Text = ""
Range("K6").Select
If CobBox16 = "" Then Exit Sub
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

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

#24

by yodpao.b » Fri Sep 16, 2011 2:14 pm

อาจาร์ยครับ ในกรณีที่เราได้เลือกครบทั้ง 3 ช่อง แต่มีความจำเป็นต้อง มาแก้ไขช่องแรก
ขั้นตอน
1. หลังจากเลือกครบ 3 ช่อง
2. กับมาเลือกช่องแรก
untitled41.GIF
ผลที่ได้คือ ช่อง 2 และ 3 ว่าง
untitled42.GIF

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

#23

by yodpao.b » Fri Sep 16, 2011 1:24 pm

ขอบคุณครับ

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

#22

by snasui » Fri Sep 16, 2011 1:06 pm

yodpao.b wrote:Do While Not IsEmpty(ActiveCell.Value) หมายถึงอะไร
ควรเขียนเป็น

Code: Select all

Do While Not IsEmpty(ActiveCell.Value)
   'Other code
Loop
ActiveCell.Value คือเซลล์ที่กำลังทำงาน
IsEmpty(ActiveCell.Value) เป็นการตรวจสอบว่าเซลล์ที่กำลังทำงานเป็นค่าว่างหรือไม่

Code: Select all

Do While Not IsEmpty(ActiveCell.Value)
   'Other code
Loop
เป็นการ Run Code ที่เกียวข้องหากพบว่าเซลล์ที่กำลังทำงานไม่เป็นค่าว่าง
yodpao.b wrote:CobBox21.AddItem ActiveCell.Value หมายถึงอะไร
หมายถึงให้เพิ่มรายการใน CobBox21 ด้วยค่าในเซลล์ที่กำลังทำงาน

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

#21

by yodpao.b » Fri Sep 16, 2011 12:55 pm

ขอบคุณครับอาจารย์ ขั้นตอนนี้จะลดความผิดพลาดจากคนได้เลยครับ ผมจะเอาเกี่ยวกับที่ทำ ot ไปทำ qcc
อย่าว่าอย่านั้นอย่านี้เลยอยากถามว่า

Do While Not IsEmpty(ActiveCell.Value) หมายถึงอะไร

CobBox21.AddItem ActiveCell.Value หมายถึงอะไร

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

#20

by snasui » Fri Sep 16, 2011 12:25 pm

: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

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

#19

by yodpao.b » Fri Sep 16, 2011 11:46 am

แนบไฟล์ มาแล้วครับ อาจารย์ช่วยดูหน่อย

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

#18

by snasui » Fri Sep 16, 2011 11:34 am

:D แนบไฟล์ล่าสุดที่ปรับแล้วมาด้วยครับ จะได้ช่วยทดสอบครับ

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

#17

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

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

#16

by snasui » Fri Sep 16, 2011 9:06 am

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

#15

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

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

#14

by snasui » Thu Sep 15, 2011 2:35 pm

: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

#13

by yodpao.b » Thu Sep 15, 2011 1:22 pm

ใช้ได้เลยครับอาจารย์
คำถามใหม่

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

#12

by snasui » Thu Sep 15, 2011 10:07 am

: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

#11

by yodpao.b » Thu Sep 15, 2011 9:56 am

อาจารย์ช่วยเปิดดูไฟล์นี้ใหม่นะครับ ผมทำมาใหม่ อาจารย์ช่วยแนะนำด้วยครับ

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

#10

by snasui » Wed Sep 14, 2011 3:54 pm

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

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

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

#9

by yodpao.b » Wed Sep 14, 2011 3:45 pm

snasui wrote::shock: คำตอบตามด้านบนใช้ได้หรือไม่ได้ควรแจ้งกลับด้วยครับ :twisted:
ใช้ได้ครับ แต่ที่ถามเป็นหัวข้อใหม่ครับ

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

#8

by yodpao.b » Wed Sep 14, 2011 3:42 pm

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


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

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

#7

by snasui » Wed Sep 14, 2011 2:04 pm

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

Top