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

ตัวอย่างการปรับ 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

หัวข้อกระทู้ควรจะเขียนให้สื่อถึงคำถามเกี่ยวกับ "การจัดการวันที่ด้วย 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

ลองปรับมาเองจากที่ผมเขียนไปให้ ติดตรงไหรค่อยนำมาถามกันต่อครับ
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

ตัวอย่างการปรับ 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

การทำงานในลักษณะนั้น ใช้
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

ลองทบทวนสิ่งที่ผมตอบกับสิ่งที่กำลังทำว่าคือสิ่งเดียวกันหรือไม่อีกรอบครับ
Change กับ SelectionChange นั้น ไม่เหมือนกันนะครับ
Re: ขอความช่วยเหลือ เรื่อง VBA ที่ทำครับ
Posted: Sat Dec 05, 2015 8:57 am
by akekorn
ครับผมขอบคุณครับ