: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

ขอความช่วยเหลือ CodeVB Export-Import ไฟล์ .csv

ฟอรัมถาม-ตอบปัญหาการใช้งาน Macro และ 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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
User avatar
tigerwit
Silver
Silver
Posts: 556
Joined: Wed Mar 31, 2010 10:51 pm
Location: สกลนคร
Excel Ver: 2019
Contact:

ขอความช่วยเหลือ CodeVB Export-Import ไฟล์ .csv

#1

Post by tigerwit »

จากไฟล์ที่แนบ (ImPCSV.xlsb)

Code: Select all

Sub SaveRangeToCSV()

    Dim myCSVFileName As String
    Dim myWB As Workbook
    Dim tempWB As Workbook
    Dim rngToSave As Range

    Application.DisplayAlerts = False
    On Error GoTo err

    Set myWB = ThisWorkbook
    myCSVFileName = myWB.Path & "\" & "Score" & VBA.Format(VBA.Now, "dd-MMM-yyyy") & ".csv"
'    Set rngToSave = Range("F6:S50")
    Set rngToSave = Range("F6:S50,U6:V50,Z6:AM50,AO6:AP50")
    rngToSave.Copy
    Set tempWB = Application.Workbooks.Add(1)
    With tempWB
        .Sheets(1).Range("A1").PasteSpecial xlPasteValues
        .SaveAs Filename:=myCSVFileName, FileFormat:=xlCSV, CreateBackup:=False
        .Close
    End With

err:
    Application.DisplayAlerts = True
End Sub

1. ส่งออกเป็นไฟล์ .csv ได้ (Score19-เม.ย.-2565.csv)
แต่ยังไม่ตรงกับความต้องการ เพราะข้อมูลที่ส่งออกมานั้นเรียงติดกันทุกคลอลัมน์
ที่ต้องการคือ ให้มีเว้นว่างในคลอลัมน์ O R S T และ AI (เหมือนไฟล์ Exsam1.csv)
จะต้องปรับ Code อย่างไรครับ
2.

Code: Select all

Sub ImportCSVFile()
  Dim fileToOpen As Variant
  Dim fileFilterPattern As String
  Dim wsMaster As Worksheet
  Dim wbTextImport As Workbook
  '
  Application.ScreenUpdating = False
    fileFilterPattern = "Text Files (*.txt; *.csv),*.txt;*.csv"
  fileToOpen = Application.GetOpenFilename(fileFilterPattern)
  If fileToOpen = False Then
    MsgBox "คุณไม่ได้เลือกไฟล์ที่จะนำเข้า", vbOKOnly + vbInformation, "ยกเลิกการนำเข้าข้อมูล"
  Else
    Workbooks.Open Filename:=fileToOpen, UpdateLinks:=0, Local:=True
    Set wbTextImport = ActiveWorkbook
    Set wsMaster = ThisWorkbook.Worksheets("ภาษาไทย2")
    wsMaster.Range("F6:S50,U6:V50,Z6:AM50,AO6:AP50").ClearContents
    wbTextImport.Worksheets(1).Range("A1").CurrentRegion.Copy
    wsMaster.Range("F6").PasteSpecial xlPasteValues
    Application.CutCopyMode = False
    wbTextImport.Close False
  End If
  Application.ScreenUpdating = True
  Range("F6").Select
End Sub
2.จาก Code ต้องการนำเข้าไฟล์ .csv ไปยังชีท ภาษาไทย2
โดยให้ตัวเลขที่นำเข้ามานั้นวางลงในเซลล์ที่ไม่ได้ถูกล็อค ("F6:S50,U6:V50,Z6:AM50,AO6:AP50")
Attachments
ImPCSV.xlsb
(38.29 KiB) Downloaded 11 times
Score19-เม.ย.-2565.csv
(2.7 KiB) Downloaded 11 times
Exsam1.csv
(2.89 KiB) Downloaded 11 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31205
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ขอความช่วยเหลือ CodeVB Export-Import ไฟล์ .csv

#2

Post by snasui »

tigerwit wrote: Tue Apr 19, 2022 2:18 am 1. ส่งออกเป็นไฟล์ .csv ได้ (Score19-เม.ย.-2565.csv)
แต่ยังไม่ตรงกับความต้องการ เพราะข้อมูลที่ส่งออกมานั้นเรียงติดกันทุกคลอลัมน์
ที่ต้องการคือ ให้มีเว้นว่างในคลอลัมน์ O R S T และ AI (เหมือนไฟล์ Exsam1.csv)
:D ลองปรับส่วนที่เป็นการ Save เป็น

.SaveAs Filename:=myCSVFileName, FileFormat:=xlCSV, CreateBackup:=False, local:=True ดูครับ
tigerwit wrote: Tue Apr 19, 2022 2:18 am 2.จาก Code ต้องการนำเข้าไฟล์ .csv ไปยังชีท ภาษาไทย2
โดยให้ตัวเลขที่นำเข้ามานั้นวางลงในเซลล์ที่ไม่ได้ถูกล็อค ("F6:S50,U6:V50,Z6:AM50,AO6:AP50")
จาก Code

Code: Select all

'Other code
wbTextImport.Worksheets(1).Range("A1").CurrentRegion.Copy
    wsMaster.Range("F6").PasteSpecial xlPasteValues
    'Other code
เป็นการ Copy ข้อมูลทั้งหมดมาวางทับยังตำแหน่งเดียว แต่ในการทำงานจริงเป็นการทำงานกับหลายพื้นที่ ดังนั้น จะต้องเลือก Copy ทีละพื้นและวางที่ให้ตรงกับตำแหน่งปลายทาง ซึ่งสามารถ Copy และ Paste ได้หลายครั้งจนครบตามตำแหน่งที่ต้องการ ลองปรับ Code มาเองก่อน ติดตรงไหนค่อยนำมาถามกันต่อครับ
User avatar
tigerwit
Silver
Silver
Posts: 556
Joined: Wed Mar 31, 2010 10:51 pm
Location: สกลนคร
Excel Ver: 2019
Contact:

Re: ขอความช่วยเหลือ CodeVB Export-Import ไฟล์ .csv

#3

Post by tigerwit »

'Other code
wbTextImport.Worksheets(1).Range("A1").CurrentRegion.Copy
wsMaster.Range("F6").PasteSpecial xlPasteValues
'Other code
เป็นการ Copy ข้อมูลทั้งหมดมาวางทับยังตำแหน่งเดียว แต่ในการทำงานจริงเป็นการทำงานกับหลายพื้นที่ ดังนั้น จะต้องเลือก Copy ทีละพื้นและวางที่ให้ตรงกับตำแหน่งปลายทาง ซึ่งสามารถ Copy และ Paste ได้หลายครั้งจนครบตามตำแหน่งที่ต้องการ ลองปรับ Code มาเองก่อน ติดตรงไหนค่อยนำมาถามกันต่อครับ
ไล่ไปเป็นชุด

Code: Select all

'Other code
    wbTextImport.Worksheets(1).Range("A1").CurrentRegion.Copy
    wsMaster.Range("F6:S50").PasteSpecial xlPasteValues
        wbTextImport.Worksheets(1).Range("P1").CurrentRegion.Copy
    wsMaster.Range("U6:V50").PasteSpecial xlPasteValues
................................................................................
   'Other code
ใช่หรือไม่ครับ

สอบถามเพิ่มเรื่องการตั้งชื่อไฟล์ตอนส่งออกครับ

Code: Select all

myCSVFileName = myWB.Path & "\" & "Score" & VBA.Format(VBA.Now, "dd-MMM-yyyy") & ".csv"
ต้องการเปลี่ยนจากตั้งชื่อ Score เป็นชื่อชีทที่ส่งออก และให้ครูผู้ใช้งานเลือกว่าจะ Save ไฟล์ไว้ที่ไหน
User avatar
snasui
Site Admin
Site Admin
Posts: 31205
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ขอความช่วยเหลือ CodeVB Export-Import ไฟล์ .csv

#4

Post by snasui »

tigerwit wrote: Tue Apr 19, 2022 10:32 am

Code: Select all

wbTextImport.Worksheets(1).Range("A1").CurrentRegion.Copy
:D การ Copy ก็ต้องเลือกช่วงเซลล์เป้าหมายที่ไม่ใช่ .CurrentRegion เพราะหมายถึงพื้นที่ที่ติดกับเซลล์ที่เลือก หากข้อมูลติดกันหลายบรรทัดหลายคอลัมน์ก็จะเป็นการ Copy มาทั้งหมดจึงควรเลือกเฉพาะพื้นที่ที่เป็นต้นทางเท่านั้น

การตั้งชื่อไฟล์ด้วยชื่อชีต สามารถใช้ Statement myWB.Worksheets("xyz").Name เพื่อแสดงชื่อชีต xyz ของไฟล์ myWb เช่นนี้เป็นต้นครับ
User avatar
tigerwit
Silver
Silver
Posts: 556
Joined: Wed Mar 31, 2010 10:51 pm
Location: สกลนคร
Excel Ver: 2019
Contact:

Re: ขอความช่วยเหลือ CodeVB Export-Import ไฟล์ .csv

#5

Post by tigerwit »

สวัสดีครับ
ปรับแก้ Code แล้วมีคำถามต่อครับ
จากไฟล์มีชีททั้งหมด 12 ชีท
การส่งออกคะแนน เป็น .csv
ไม่มีปัญหา 1 Code ใช้กับ 12 ชีทได้
แต่ การนำเข้าจา code

Code: Select all

Sub ImportCSV()
  Dim fileToOpen As Variant
  Dim fileFilterPattern As String
  Dim wsMaster As Worksheet
  Dim wbTextImport As Workbook
  '
    If MsgBox("ต้องการนำเข้าผลการเรียน?", 36, "โปรดยืนยัน") = 6 Then
        Application.ScreenUpdating = False
        fileToOpen = Application.GetOpenFilename(Title:="เปิดไฟล์ .csv เพื่อนำเข้า", FileFilter:="Text Files (*.txt; *.csv),*.txt;*.csv")
        If fileToOpen = False Then
                MsgBox "ไม่ได้เลือกไฟล์นำเข้า", vbOKOnly + vbInformation, "ยกเลิกการนำเข้า"
        Else
            Workbooks.Open Filename:=fileToOpen, UpdateLinks:=0, local:=True
                Set wbTextImport = ActiveWorkbook
                Set wsMaster = ThisWorkbook.Worksheets("Math")
                wsMaster.Unprotect Password:="1165"
                wsMaster.Range("F6:S50,U6:V50,Z6:AM50,AO6:AP50").ClearContents
                       wbTextImport.Worksheets(1).Range("A1:N50").Copy
                        wsMaster.Range("F6").PasteSpecial xlPasteValues
                    wbTextImport.Worksheets(1).Range("O1:P50").Copy
                        wsMaster.Range("U6").PasteSpecial xlPasteValues
                    wbTextImport.Worksheets(1).Range("Q1:AD50").Copy
                        wsMaster.Range("Z6").PasteSpecial xlPasteValues
                    wbTextImport.Worksheets(1).Range("AE1:AF50").Copy
                        wsMaster.Range("AO6").PasteSpecial xlPasteValues
                        Application.CutCopyMode = False
                    wbTextImport.Close False
        Range("F6").Select
                wsMaster.Protect Password:="1165"
    End If
        End If
Exit Sub
        Application.ScreenUpdating = True
                wsMaster.Protect Password:="1165"
End Sub

จะปรับแก้ Code อย่างไร เพื่อให้ 1 Code ใช้ได้กับ 12 ชีท
Attachments
ImPCSV.xlsb
(172.31 KiB) Downloaded 14 times
คณิตป.1.csv
(2.69 KiB) Downloaded 13 times
ไทยป.1.csv
(2.7 KiB) Downloaded 10 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31205
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ขอความช่วยเหลือ CodeVB Export-Import ไฟล์ .csv

#6

Post by snasui »

:D กำหนดชื่อแต่ละชีตในไฟล์ที่เป็นนามสกุล .csv ให้ตรงกับชื่อแต่ละชีตของไฟล์ ImPCSV.xlsm จากนั้นที่ Statement Set wsMaster = ThisWorkbook.Worksheets("Math") เปลี่ยนเป็น Set wsMaster = ThisWorkbook.Worksheets(wbTextImport.Sheets(1).Name) ครับ
User avatar
tigerwit
Silver
Silver
Posts: 556
Joined: Wed Mar 31, 2010 10:51 pm
Location: สกลนคร
Excel Ver: 2019
Contact:

Re: ขอความช่วยเหลือ CodeVB Export-Import ไฟล์ .csv

#7

Post by tigerwit »

ขอบคุณครับผม
ได้แนวทางทำงานต่อไปมากเลยครับ
Post Reply