Page 1 of 1
ตัวเลขเกือบทั้งหมดในไฟล์เปลี่ยนรูปแบบเป็นวันที่เอง
Posted: Tue Feb 10, 2015 8:49 am
by DhitiBank
สวัสดีอาจารย์และเพื่อนๆ ครับ
คือผมมีไฟล์ xlsm ที่ใช้เป็นปกติอยู่ประจำทุกวัน อยู่ดีๆ วันนี้เปิดขึ้นมา ตัวเลขแทบจะทุกตำแหน่งเปลี่ยนรูปแบบเองเป็นวันที่หมดเลย ลองปิดไฟล์โดยไม่เซฟแล้วเปิดใหม่ก็เป็นเหมือนเดิมทั้งๆ ที่เมื่อวานก็ใช้งานตามปกติ ก่อนจะปิดก็ดูความเรียบร้อยแล้วก็เซฟ
อาการแบบนี้พอจะระบุสาเหตุได้ไหมครับ จะได้หาทางป้องกันต่อไปครับ
ขอบคุณครับ
(ขออภัยที่ไม่ได้แนบไฟล์เพราะตอนนี้กำลังพยายามแก้รูปแบบกลับมาให้เหมือนเดิมเพื่อจะใช้งานก่อนครับ)
pb01.png
pb02.png
pb03.png
Re: ตัวเลขเกือบทั้งหมดในไฟล์เปลี่ยนรูปแบบเป็นวันที่เอง
Posted: Tue Feb 10, 2015 10:06 am
by DhitiBank
เพิ่มเติมครับ
ผมได้แนบไฟล์มาแล้วครับ
รหัสเปิดไฟล์คือ adMin (M ตัวใหญ่ครับ)
รหัสปลดล็อกชีทคือ sy;gikt (keyboard layout เลือกภาษาอังกฤษ แล้วพิมพ์ตามแป้นไทยว่า "หัวเราะ")
รหัสเข้าแก้ไข VBA คือ rklg;biNf (keyboard layout เลือกอังกฤษ แล้วพิมพ์ตามแป้นไทยว่า "พาสเวิร์ด")
รบกวนเปิดทดสอบหน่อยครับว่า เปิดเครื่องอื่นแล้ว รูปแบบตัวเลขส่วนใหญ่เป็นวันที่หรือไม่ เช่น
ชีท 1PC
เซลล์ B9 และเมื่อคีย์รหัสสินค้าในคอลัมน์ E ตั้งแต่แถวที่ 11 ลงไป จะมีรายละเอียดขึ้นที่คอลัมน์ A ถึง C ในแถวเดียวกัน แต่ที่เป็นตัวเลขจะขึ้นเป็นวันที่หมดเลย
ชีท STK และ Pro ผมแก้ไขไปแล้วเพราะต้องปริ้นท์ออกไปนับครับ (ก่อนหน้านี้พวกรหัสสินค้าเป็นวันที่หมดเลย)
ชีท Search
เวลาคีย์รหัสสินค้าที่เซลล์ B5 จะมีรายการสินค้ามาแสดงในตารางด้านล่าง ตรงรหัส กับ ชิ้นต่อหีบ รูปแบบตัวเลขกลายเป็นวันที่ครับ (ส่วนจำนวนที่อยู่ทางขวาจะแสดงปกติ เพราะกำหนด format ไว้ใน vba ครับ)
ชีท 3List
ตัวเลขก็เปลี่ยนเป็นวันที่หมดเลยในทุกตำแหน่ง
เท่าที่สังเกตคือ ตัวเลขที่แต่ก่อนกำหนดรูปแบบเป็นทั่วไป กับที่ไม่ได้กำหนดด้วย vba จะเปลี่ยนเป็นวันที่หมดเลยครับ สาเหตุเป็นมาจากอะไรครับ
Re: ตัวเลขเกือบทั้งหมดในไฟล์เปลี่ยนรูปแบบเป็นวันที่เอง
Posted: Tue Feb 10, 2015 1:33 pm
by bank9597
ผมโหลดไฟล์ออกมาไม่ได้ เนื่องจากอยู่บริษัท รอท่านอื่นมาช่วยดูอีกที หรือไม่ก็ช่วงเย็นครับ
Re: ตัวเลขเกือบทั้งหมดในไฟล์เปลี่ยนรูปแบบเป็นวันที่เอง
Posted: Tue Feb 10, 2015 7:07 pm
by snasui

หากไม่มี Code ใดทำการ Format ข้อมูลให้เป็นวันที่ ลองกำหนดทุกชีทให้เป็น General ดูอีกครั้งแล้วทดสอบดูผลว่ายังเปลียนกลับมาเป็นวันที่อีกหรือไม่ครบ
Re: ตัวเลขเกือบทั้งหมดในไฟล์เปลี่ยนรูปแบบเป็นวันที่เอง
Posted: Tue Feb 10, 2015 8:45 pm
by DhitiBank
ขอบคุณอาจารย์และคุณ bank9597 มากครับ
ตอนนี้ผมไล่แก้ฟอร์แม็ตเป็นแบบที่เคยเป็นหมดแล้ว ส่วนวิธีที่อาจารย์แนะนำ ผมก็ลองแล้วครับ คือกำหนดส่วนที่มันเพี้ยนกลับเป็น general ก่อน แล้วลองรันโค้ดใหม่ ผลคือกลับมาเป็นวันที่เหมือนเดิม เท่าที่เจอตอนนี้จะเกิดเมื่อ
1. รันคำสั่งให้เอาตัวเลขอีกชีทหนึ่งไปเก็บไว้ในชีทฐานข้อมูล หากไม่มีการกำหนดรูปแบบไว้ด้วย เลขนั้นจะกลายเป็นวันที่เลย
2. รันคำสั่ง .Clear เพื่อเอาค่าอื่นมาใส่ หากไม่มีการกำหนดรูปแบบไว้ เลขนั้นจะกลายเป็นวันที่
ผมเลยงงครับ ทั้งๆที่ใช้ไฟล์นี้มาเป็นปีแล้ว ไม่มีปัญหาเลย เพิ่งมาเป็นแบบนี้เมื่อวาน เหมือนกับว่าค่า default ของตัวเลขที่คีย์กลายเป็นวันที่ ไม่ใช่เป็น general (เป็นแค่ไฟล์นี้ครับ)
Re: ตัวเลขเกือบทั้งหมดในไฟล์เปลี่ยนรูปแบบเป็นวันที่เอง
Posted: Tue Feb 10, 2015 10:09 pm
by snasui

ไม่ทราบว่าคุณ DhitiBank ใช้ Excel Version ใดครับ
Re: ตัวเลขเกือบทั้งหมดในไฟล์เปลี่ยนรูปแบบเป็นวันที่เอง
Posted: Wed Feb 11, 2015 3:04 am
by DhitiBank
2010 ครับ
Re: ตัวเลขเกือบทั้งหมดในไฟล์เปลี่ยนรูปแบบเป็นวันที่เอง
Posted: Wed Feb 11, 2015 6:28 pm
by snasui

ลองตามนี้ครับ
- เข้าเมนู File > Options > Save
- ให้ดู Path ที่ Auto Recovery file location: เพื่อเปิดหา Folder XLSTART ใน Windows Explorer
- ดูว่ามีไฟล์ที่ชื่อ Book.xlt แล้วลองทำตาม Post นี้ครับ http://www.mrexcel.com/forum/excel-ques ... ost1490456
Re: ตัวเลขเกือบทั้งหมดในไฟล์เปลี่ยนรูปแบบเป็นวันที่เอง
Posted: Thu Feb 12, 2015 5:36 pm
by DhitiBank
ขออภัยที่ตอบช้าครับและขอบคุณมากครับสำหรับคำแนะนำ เดี๋ยวจะลองศึกษาดูครับ
ขอถามเรื่องใกล้เคียงกันหน่อยครับ คือตอนนี้ผมแก้ปัญหาไปก่อนโดยการกำหนดรูปแบบตัวเลขลงไปเลยในโค้ด แต่มีปัญหาบ้างกับ 2 โค้ดนี้ครับ
1. =Format(.......,"รูปแบบเลขที่ต้องการ")
2. .Numberformat="รูปแบบเลขที่ต้องการ"
ผมงงว่าโค้ดที่ 1 ทำไมบางครั้งก็ให้ผลที่ต้องการ บางครั้งก็ไม่ได้ เช่น ตั้งรูปแบบ #,##0.00 ผลที่แสดงออกมากลับเป็นเลขทศนิยมธรรมดา ไม่มีเครื่องหมาย , เป็นต้น
ส่วนโค้ด 2 ให้ผลตามต้องการ 100% แต่แค่ต้องเขียนโดยเริ่มบรรทัดใหม่ (จริงๆ แล้วอยากใช้โค้ดบนมากกว่าเพื่อลดความยืดยาวครับ) เลยอยากถามว่าใช้ต่างกันอย่างไรครับ
Re: ตัวเลขเกือบทั้งหมดในไฟล์เปลี่ยนรูปแบบเป็นวันที่เอง
Posted: Thu Feb 12, 2015 11:31 pm
by snasui
Format ใช้กับ Data type ทุกประเภทไม่ใช่เฉพาะตัวเลข ส่วน
.NumberFormat ใช้กับ Number เท่านั้นครับ
ส่วนที่ได้บ้างไม่ได้บ้างนั้น ลองแนบไฟล์ตัวอย่างเฉพาะที่มีปัญหามาดูกันครับว่าข้อมูลเป็นอย่างไร จะได้ช่วยตรวจสอบได้ครับ
Re: ตัวเลขเกือบทั้งหมดในไฟล์เปลี่ยนรูปแบบเป็นวันที่เอง
Posted: Thu Feb 12, 2015 11:54 pm
by DhitiBank
ขอบคุณครับอาจารย์ เดี๋ยววันจันทร์ หากยังมีปัญหาอยู่จะแนบตัวอย่างไฟล์มาให้อาจารย์ช่วยดูครับ
Re: ตัวเลขเกือบทั้งหมดในไฟล์เปลี่ยนรูปแบบเป็นวันที่เอง
Posted: Mon Feb 16, 2015 3:33 pm
by DhitiBank
สวัสดีครับอาจารย์
ผมแนบไฟล์มาแล้ว เพื่อขอคำแนะนำเรื่องการใช้โค้ด
Format หน่อยครับ
ตามไฟล์แนบ จะสนใจที่ชีท Pro และ Memo ครับ
-
ชีท Pro : เวลาใช้งาน ผู้ใช้จะกดปุ่ม "แก้ราคา" แล้วคอลัมน์ J จะปลดล็อคเพื่อให้ใส่แค่ราคาปลีก จากนั้นโปรแกรมจะคำนวณราคาขายส่งให้ แล้วการเปลี่ยนแปลงที่ทำ จะไปบันทึกไว้ในชีท memo เผื่อเอาไว้มาดูย้อนหลังครับ
แต่พอมีปัญหาที่ตัวเลขเปลี่ยนเป็นวันที่เองก็เลยเขียนโค้ดเพิ่ม โดยคิดว่าจะใช้คำสั่ง Format เพื่อกำหนดรูปแบบให้ตัวเลขไปเลย แต่เจอปัญหาครับเช่น ชีท Pro แถว 126 พอใส่ราคาแล้ว รูปแบบตัวเลขยังเป็นวันที่ ทั้งๆ ที่กำหนดรูปแบบไว้ในคำสั่งแล้ว สงสัยผมทำอะไรผิดแน่ๆ คำสั่งอยู่ใน
Sheet 5 (Pro) ชื่อ
Private Sub Worksheet_Change(ByVal Target As Range) ครับ (บรรทัดที่ 91)
Code: Select all
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rw As Integer
Dim lRw As Long
Dim pcsPck As Integer
Dim pcsPrz As Single, pckPrz As Single, sOld As Single
Dim marG1 As Single, marG2 As Single, marG3 As Single
rw = Target.Row
marG1 = ActiveSheet.Range("l2").Value
marG2 = ActiveSheet.Range("m2").Value
marG3 = ActiveSheet.Range("n2").Value
'//if superuser input pack price in column J
If Target.Column = 10 Then
pckPrz = Target.Value
'//check pieces per pack
If ActiveSheet.Cells(rw, "f").Value <= 0 Then
MsgBox "â»Ã´ãÊè¨Ó¹Ç¹ªÔé¹µèÍá¾é¤¡è͹", vbCritical
Exit Sub
End If
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
With ActiveSheet
.Unprotect
sOld = .Cells(rw, "i").Value
.Cells(rw, "i").Value = Format(Round(pckPrz * (1 + marG2) / _
(1 + marG3) + 0.00001, 0), "#,##0")
.Cells(rw, "h").Value = Format(Round(pckPrz * (1 + marG1) / _
(1 + marG3) + 0.00001, 0), "#,##0")
.Cells(rw, "g").Value = Format(Round(pckPrz / (1 + marG3) + 0.00001, 2), "#,##0")
.Cells(rw, "e").Value = Format(Round(.Cells(rw, "g").Value / .Cells(rw, "f").Value + 0.00001, 2), "#,##0.00")
.Protect
.EnableSelection = xlUnlockedCells
End With
With Sheets("memo")
.Unprotect
lRw = .Range("a" & Rows.Count).End(xlUp).Offset(1, 0).Row
.Cells(lRw, "a") = Format(ActiveSheet.Cells(rw, "b"), "0")
.Cells(lRw, "b") = Format(Now(), "dd/mm/yy hh:mm")
.Cells(lRw, "c") = Format(Round(sOld * (1 + marG3) / (1 + marG2) + 0.00001, 0), "#,##0")
.Cells(lRw, "d") = Format(Target.Value, "#,##0")
.Protect , AllowFiltering:=True
End With
With Application
.EnableEvents = True
.ScreenUpdating = True
End With
End If
End Sub
ขอบคุณครับ
Re: ตัวเลขเกือบทั้งหมดในไฟล์เปลี่ยนรูปแบบเป็นวันที่เอง
Posted: Mon Feb 16, 2015 10:00 pm
by DhitiBank
ขออภัยเป็นอย่างสูงครับ ผมปลดแค่รหัสล็อคชีท แต่รหัสเปิดไฟล์กับเข้าแก้ไข vb ไม่ได้เอาออก
DhitiBank wrote:
รหัสเปิดไฟล์คือ adMin (M ตัวใหญ่ครับ)
รหัสเข้าแก้ไข VBA คือ rklg;biNf (keyboard layout เลือกอังกฤษ แล้วพิมพ์ตามแป้นไทยว่า "พาสเวิร์ด")
Re: ตัวเลขเกือบทั้งหมดในไฟล์เปลี่ยนรูปแบบเป็นวันที่เอง
Posted: Mon Feb 16, 2015 10:22 pm
by snasui

ตาม Code ให้ปรับเป็น
.NumberFormat แล้วสังเกตผลลัพธ์ดูใหม่ครับ
Re: ตัวเลขเกือบทั้งหมดในไฟล์เปลี่ยนรูปแบบเป็นวันที่เอง
Posted: Tue Feb 17, 2015 12:54 am
by DhitiBank
ขอบคุณครับอาจารย์