Page 1 of 1

ขอความช่วยเหลือ เรื่อง VBA ที่ทำครับ

Posted: Fri Dec 04, 2015 10:22 pm
by akekorn
สวัสดีครับเพื่อนสมาชิกทุกท่าน
วันนี้ผมมีปัญหามา ขอความช่วยเหลือครับ
คือผมต้องการเช็คข้อมูลวันเดือนปี โดยใส่แยก แต่ละ cell อย่างตัวอย่างคือ
A2 สำหรับวัน B2 สำหรับเดือน C2 สำหรับปี แต่ให้ระบุเป็นได้ทั้ง พ.ศ. หรือ ค.ศ. ได้ทั้งสองอย่าง
แต่ Code ที่ผมทำกลับไม่ได้ตามที่ต้องการ จึงขอความช่วยเหลือมายังเพื่อนสมาชิกทุกท่านครับ
โดยได้แนบ file มาด้วยครับ

ขอบคุณครับ

Re: ขอความช่วยเหลือ เรื่อง VBA ที่ทำครับ

Posted: Fri Dec 04, 2015 10:28 pm
by akekorn
ขออธิบายเพิ่มครับคือ cell E2 วดป กลับไม่ใช่ ค่า ที่อยู่ใน cell A2 B2 C2 คือวันที่ 1/Jan/1973
ขอบคุณครับ

Re: ขอความช่วยเหลือ เรื่อง VBA ที่ทำครับ

Posted: Fri Dec 04, 2015 10:34 pm
by snasui
:D ตัวอย่างการปรับ Code ครับ

Code: Select all

Dim x As Integer, y As Integer
With Sheets("Sheet1")
    x = .Range("c2").Value
    If x > 2400 Then
        y = x - 543
    Else
        y = x
    End If
    .Range("e2").Value = DateSerial(y, .Range("b2"), .Range("a2"))
End With

Re: ขอความช่วยเหลือ เรื่อง VBA ที่ทำครับ

Posted: Fri Dec 04, 2015 10:38 pm
by snasui
:D หัวข้อกระทู้ควรจะเขียนให้สื่อถึงคำถามเกี่ยวกับ "การจัดการวันที่ด้วย VBA" นะครับ

Re: ขอความช่วยเหลือ เรื่อง VBA ที่ทำครับ

Posted: Fri Dec 04, 2015 10:46 pm
by akekorn
ขอบคุณครับ
แต่ผมอยากรบกวนเพิ่มครับคือหาก ใน cell C2 ไม่มีค่า หรือ มีตัวเลขที่ไม่ครบสี่หลัก หรือ เป็นตัวอักษร
จะเช็ค Error ได้ยังไงครับผม

Re: ขอความช่วยเหลือ เรื่อง VBA ที่ทำครับ

Posted: Fri Dec 04, 2015 10:47 pm
by snasui
:D ลองปรับมาเองจากที่ผมเขียนไปให้ ติดตรงไหรค่อยนำมาถามกันต่อครับ

Re: ขอความช่วยเหลือ เรื่อง VBA ที่ทำครับ

Posted: Fri Dec 04, 2015 10:58 pm
by akekorn
ครับผมได้เพิ่ม การดัก error แต่มันไม่ได้ตามที่ต้องการ ครับ
อีกเรื่องผมรบกวนขอ error drescription แต่ละแบบว่ามีความหมายว่าอะไรบ้างครับ
ขอบคุณครับ

Re: ขอความช่วยเหลือ เรื่อง VBA ที่ทำครับ

Posted: Fri Dec 04, 2015 11:17 pm
by snasui
:D ตัวอย่างการปรับ Code ตามด้านล่างครับ

Code: Select all

Dim x As Variant, y As Integer
With Sheets("Sheet1")
    x = .Range("c2").Value
    If Len(x) < 4 Or IsNumeric(x) = False Then
        MsgBox "กรุณาระบุปี พศ หรือ ปี คศ "
        Exit Sub
    End If
    If x > 2400 Then
        y = x - 543
    Else
        y = x
    End If
    .Range("e2").Value = DateSerial(y, .Range("b2"), .Range("a2"))
End With
ส่วน Error Description มีความหมายว่าอย่างไรบ้าง ให้เพิ่ม Code เช่น msgbox err.description แล้วอ่านจากที่โปรแกรมแสดงข้อความครับ

Re: ขอความช่วยเหลือ เรื่อง VBA ที่ทำครับ

Posted: Fri Dec 04, 2015 11:26 pm
by akekorn
ขอบคุณมากๆครับผม

Re: ขอความช่วยเหลือ เรื่อง VBA ที่ทำครับ

Posted: Sat Dec 05, 2015 8:43 am
by akekorn
ผมขอคำปรีกษาเพิ่มครับคือผมได้ปรับ code นี้ไปใช้ใน event worksheet selectionchage หากใน cell C2 ไม่มีตัวเลข หรือเป็น ตัวอักษร มันจะขึ้นข้อความ
"กรุณาระบุปี พศ หรือ ปี คศ " ตลอดเวลา สิ่งที่ผมอยากได้คือ หากเปิดฟอร์มนี้ขึ้นมา หากยังไม่ถึงใน cell ที่ตัองใส่ปีพศ ยังไม่ต้องมีข้อความคำเตือน
ต่อเมื่อถึงcell ดังกล่าวแล้วไม่ใส่ หรือใส่ผิดประเภทจึงเกิด ข้อความ"กรุณาระบุปี พศ หรือ ปี คศ " ผมควรใส่ใน event ใดดีครับ
ผมมีข้อสงสัยด้วยครับเพราะใน worksheet มีหลาย event ที่คล้ายกัน แต่คิดว่่าคงมีอะไรแตกต่างกันบ้าง เช่น event change กับ selectchange
อยากทราบครับว่าแต่ละ event ใช้ในเวลาใดบ้าง ต่างกันอย่างไรครับ
ขอบคุณครับ

Re: ขอความช่วยเหลือ เรื่อง VBA ที่ทำครับ

Posted: Sat Dec 05, 2015 8:47 am
by snasui
:D การทำงานในลักษณะนั้น ใช้ Change Event มาช่วยได้ครับ

Re: ขอความช่วยเหลือ เรื่อง VBA ที่ทำครับ

Posted: Sat Dec 05, 2015 8:50 am
by akekorn
ครับผมแต่พอเปลี่ยนไป cell อื่นมันจะขึ้นฟ้องตลอดหากไม่ใส่ค่าใน cell c2 ที่เป็นพศ หรือ คศ ครับ
มีวิธีไหนที่แก้ไขได้ไหมครับ

Re: ขอความช่วยเหลือ เรื่อง VBA ที่ทำครับ

Posted: Sat Dec 05, 2015 8:53 am
by snasui
:D ลองทบทวนสิ่งที่ผมตอบกับสิ่งที่กำลังทำว่าคือสิ่งเดียวกันหรือไม่อีกรอบครับ

Change กับ SelectionChange นั้น ไม่เหมือนกันนะครับ

Re: ขอความช่วยเหลือ เรื่อง VBA ที่ทำครับ

Posted: Sat Dec 05, 2015 8:57 am
by akekorn
ครับผมขอบคุณครับ