snasui.com ยินดีต้อนรับ
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ ระบุ Version ของ Excel
คำแสดงเจตนา
ขอผลแห่งการให้ความรู้นี้ จงกลับไปยังผู้ที่เป็นเจ้าของเดิม แม้ข้าพเจ้าจะไม่รู้จักท่านก็ตาม ขอให้แสงแห่งปัญญาที่ท่านเคยจุดไว้ ได้กลับไปเติมเต็มชีวิตของท่านอีกครั้ง และขอให้เจตนาของข้าพเจ้าเป็นการคืนความดีอย่างสงบ
ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and VBA
Forum rules
ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
superbill
Member
Posts: 29 Joined: Sun May 05, 2013 11:59 am
#1
Post
by superbill » Thu Jul 31, 2014 5:06 pm
ต้องการคั่นข้อมูลระหว่าง Column ด้วย Pipe (|) ตอนนี้ผมหา Code VBA ได้แล้ว แต่ติดปัญหาตรงที่ Column ผมมีเยอะตั้งแต่ A-AO พอนำ Code ไปวางแล้วมันฟ้องเหมือนกับว่ายาวเกินไป Code ที่ผมใช้คือ
Code: Select all
Sub AddPipe()
Dim Handle As Integer, File_Name As String
Dim Row As Long, PutStr As String
Dim sh As Worksheet
Dim wb As Workbook
Set wb = ThisWorkbook
For Each sh In wb.Worksheets
File_Name = "D:\" & sh.Name & ".csv"
Handle = FreeFile
If Dir(File_Name) <> "" Then Kill File_Name
Open File_Name For Binary As Handle
Row = 0
Range("A1").Select
Do Until Selection.Value = ""
Row = Row + 1
PutStr = Range("A" & Row).Value & "|" & _
Range("B" & Row).Value & "|" & _
Range("C" & Row).Value & "|" & _
Range("D" & Row).Value & "|" & _
Range("E" & Row).Value & "|" & _
Range("F" & Row).Value & "|" & _
Range("G" & Row).Value & "|" & _
Range("H" & Row).Value & "|" & _
Range("I" & Row).Value & "|" & _
Range("J" & Row).Value & "|" & _
Range("K" & Row).Value & "|" & _
Range("L" & Row).Value & "|" & _
Range("M" & Row).Value & "|" & _
Range("N" & Row).Value & "|" & _
Range("O" & Row).Value & "|" & _
Range("P" & Row).Value & "|" & _
Range("Q" & Row).Value & "|" & _
Range("R" & Row).Value & "|" & _
Range("S" & Row).Value & "|" & _
Range("T" & Row).Value & "|" & _
Range("U" & Row).Value & "|" & _
Range("V" & Row).Value & "|" & _
Range("W" & Row).Value & "|" & _
Range("X" & Row).Value & "|" & _
Range("Y" & Row).Value & "|" & _
Range("Z" & Row).Value & "|" & _
Range("AA" & Row).Value & "|" & _
Range("AB" & Row).Value & "|" & _
Range("AC" & Row).Value & "|" & _
Range("AD" & Row).Value & "|" & _
Range("AE" & Row).Value & "|" & _
Range("AF" & Row).Value & "|" & _
Range("AG" & Row).Value & "|" & _
Range("AH" & Row).Value & "|" & _
Range("AI" & Row).Value & "|" & _
Range("AJ" & Row).Value & "|" & _
Range("AK" & Row).Value & "|" & _
Range("AL" & Row).Value & "|" & _
Range("AM" & Row).Value & "|" & _
Range("AN" & Row).Value & "|" & _
Range("AO" & Row).Value & vbCrLf
Put Handle, , PutStr
Selection.Offset(1, 0).Select
Loop
Close Handle
Next sh
End Sub
ไม่ทราบว่าพอมีวิธีเขียนให้มันสั้นกว่านี้รึเปล่าครับ
snasui
Site Admin
Posts: 31175 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#2
Post
by snasui » Thu Jul 31, 2014 5:36 pm
ลองแนบไฟล์ตัวอย่างพร้อมภาพที่ฟ้องมาด้วยครับ
superbill
Member
Posts: 29 Joined: Sun May 05, 2013 11:59 am
#3
Post
by superbill » Thu Jul 31, 2014 5:42 pm
คือถ้าลองก๊อปปี้ Code จากด้านบนไปใส่ใน Macro ของ Excel จะขึ้น error ว่า Too Many Line Continuations ครับ
snasui
Site Admin
Posts: 31175 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#4
Post
by snasui » Thu Jul 31, 2014 7:33 pm
ตัวอย่างการปรับ Code ครับ
Code: Select all
Sub AddPipe()
...
Row = 0
PutStr = ""
Range("A1").Select
Do Until Selection.Value = ""
Row = Row + 1
For Each r In Range("A" & Row, Range("AO" & Row))
PutStr = PutStr & r & "|"
Next r
PutStr = VBA.Left(PutStr, Len(PutStr) - 1) & vbCrLf
Put Handle, , PutStr
Selection.Offset(1, 0).Select
Loop
...
End Sub
superbill
Member
Posts: 29 Joined: Sun May 05, 2013 11:59 am
#5
Post
by superbill » Thu Jul 31, 2014 10:45 pm
ขอโทษนะครับ ผมไม่ค่อยมีความรู้ด้าน VBA สักเท่าไร ยังงงๆ ดูไม่ออก ว่าควรจะปรับตรงไหน ผมได้แนบไฟล์ตัวอย่างมาให้ครับ รบกวนด้วยนะครับ ด่วนมากๆ เลย
You do not have the required permissions to view the files attached to this post.
snasui
Site Admin
Posts: 31175 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#6
Post
by snasui » Thu Jul 31, 2014 11:19 pm
การใช้ VBA ต้องเป็นไปตามกฎข้อ 5 ด้านบนครับ
หากยังไม่มีความรู้เกียวกับ VBA ยังไม่ควรใช้ เพราะจะปรับเองไม่ได้แม้จะเป็นการปรับเพียงเล็กน้อย จึงต้องศึกษามาก่อนตามลำดับครับ