Page 1 of 1

ปัญหาการส่งออกไฟล์เป็น .CSV

Posted: Thu Jun 22, 2023 12:21 pm
by tigerwit
จากไฟล์ที่แนบได้ส่งออกไฟล์เป็น .CSV แต่มีปัญหาคือข้อมูลในคลอลัมน์ C ที่เก็บเลขบัตรประชาชน 13 หลัก เมื่อทำการส่งออกไปแล้ว ไม่ตรงกับข้อมูลเดิม คือ ข้อมูลในหลักที่ 6 จะเปลี่ยนไป ไม่ทราบว่าเกิดจากสาเหตุใดและจะแก้ปัญหานี้อย่างไร

ข้อมูลเดียวกันนี้ถ้าส่งออกเป็น excel จะไม่มีปัญหาใดๆ

Code: Select all

    Sub ExpStuToCSV()
    Dim wb As Worksheet
    Dim myCSVFileName As String
    Dim myWB As Workbook
    Dim tempWB As Workbook
    Dim rngToSave As Range
    Dim FilePath As String
    Dim FPath As String
    Call MFolder2
    FPath = "C:\" & Range("A17").Value & "\"
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    On Error GoTo err
    If MsgBox("คุณต้องการส่งออกชื่อนักเรียน ใช่หรือไม่ ?", 36, "ยืนยันการส่งออกชื่อนักเรียน") = 6 Then
    Set myWB = ThisWorkbook
    Set rngToSave = Range("C2:I1500")
    rngToSave.Copy
    Set tempWB = Application.Workbooks.Add(1)
    With tempWB
        .Sheets(1).Range("A1").PasteSpecial xlPasteValues
        .SaveAs Filename:=FPath & Sheet4.Range("A18").Value & ".csv", FileFormat:=xlCSVUTF8, CreateBackup:=False, local:=True
        .Close
                MsgBox "ส่งออกชื่อนักเรียนเรียบร้อยแล้ว.", vbInformation
      Application.ScreenUpdating = True
    End With
err:
    End If
        Application.DisplayAlerts = True
        Range("C3").Select
End Sub


Re: ปัญหาการส่งออกไฟล์เป็น .CSV

Posted: Thu Jun 22, 2023 3:06 pm
by snasui
:D ตัวอย่างการปรับ Code ครับ

Code: Select all

'Other code
With tempWB
    .Sheets(1).Range("A1").PasteSpecial xlPasteValues
    .Sheets(1).Range("a1").CurrentRegion.Resize(, 1).NumberFormat = "0"
    .Sheets(1).Range("a1").EntireColumn.AutoFit
    .SaveAs Filename:=FPath & Sheet4.Range("A18").Value & ".csv", FileFormat:=XlFileFormat.xlCSV, CreateBackup:=False, local:=True
    .Close
    MsgBox "ส่งออกชื่อนักเรียนเรียบร้อยแล้ว.", vbInformation
    Application.ScreenUpdating = True
End With
'Other code

Re: ปัญหาการส่งออกไฟล์เป็น .CSV

Posted: Thu Jun 22, 2023 3:59 pm
by tigerwit
ขอบคุณครับ
กรณีปัญหาเนื่องจากอะไรครับ ถ้าเป็น .xlsx ไม่มีปัญหา
รบกวนช่วยอธิบายสองบรรทัดนี้ว่าทำงานอย่างไร

Code: Select all

.Sheets(1).Range("a1").CurrentRegion.Resize(, 1).NumberFormat = "0"
.Sheets(1).Range("a1").EntireColumn.AutoFit

Re: ปัญหาการส่งออกไฟล์เป็น .CSV

Posted: Thu Jun 22, 2023 7:18 pm
by snasui
:D ปัญหาเกิดจากความกว้างคอลัมน์ไม่พอเลยทำให้การแสดงผลมีปัญหาแสดงตัวเลขให้เห็นไม่ครบหลักและเป็นตัวเลขในเชิงวิทยาศาสตร์ ส่งผลให้การ Save เป็น CSV มีปัญหาตามไปด้วยครับ

สำหรับ 2 บรรทัดนั้น บรรทัดแรกเป็นการกำหนดรูปแบบให้แสดงตัวเลขครบทุกหลัก (ไม่ควรเกิน 15 หลักไม่เช่นนั้นจะผิดพลาดเนื่องจาก Excel แสดงตัวเลขได้แค่ 15 หลัก) บรรทัดถัดมาเป็นการกำหนดความกว้างเซลล์ให้พอดีข้อมูลที่บรรจุอยู่ภายในครับ

Re: ปัญหาการส่งออกไฟล์เป็น .CSV

Posted: Thu Jun 22, 2023 8:46 pm
by tigerwit
กระจ่างครับ
ขอบคุณมากครับ