Page 1 of 1
MsgBox แสดงข้อมูลไม่ครบตามเงื่อนไข
Posted: Fri Feb 07, 2020 4:11 pm
by sosadboy
ผมเขียนโค๊ดเพื่อให้ Excel แจ้งเตือนในรูปแบบของ MsgBox ตามเงื่อนไขที่กำหนด ซึ่งโค๊ดตรวจสอบพบข้อมูลตรงตามเงื่อนไข 10 รายการ
แต่ MsgBox แสดงข้อมูลแค่ 9 รายการ โดยที่รายการที่ 10 แสดงแต่ดูเหมือนพื้นที่การแสดงผลไม่พอ จึงอยากทราบว่า MsgBox มีการจำกัด
ข้อมูลในการแสดงผลหรือไม่ หรือโค๊ดที่ผมเขียนผิดพลาดตรงจุดไหน ฝากท่านผู้รู้ช่วยตรวจสอบด้วยครับ
Code: Select all
Public tbl As ListObject
Function GetTableData(projRow)
projFastwork = tbl.DataBodyRange.Cells(projRow, tbl.ListColumns(" ค้างส่งปัจจุบัน").Index)
projOrder = tbl.DataBodyRange.Cells(projRow, tbl.ListColumns("เลขที่ออร์เดอร์").Index)
projInfo = tbl.DataBodyRange.Cells(projRow, tbl.ListColumns("รายละเอียด").Index)
projFullMsg = " | " & projOrder & " | " & projInfo & " | " & "จน. " & projFastwork & " ผืน"
GetTableData = projFullMsg
End Function
Sub LoopTable()
Set tbl = ActiveSheet.ListObjects("Table5")
'get current date
dateToday = Date
'check number of Rows
NumRows = tbl.DataBodyRange.Rows.Count
'Due Already
CountDue = 0
For i = 1 To NumRows
projFastwork = tbl.DataBodyRange.Cells(i, tbl.ListColumns(" ค้างส่งปัจจุบัน").Index)
projNum = tbl.DataBodyRange.Cells(i, tbl.ListColumns(" ผืนจริง3").Index)
projInfo = tbl.DataBodyRange.Cells(i, tbl.ListColumns("รายละเอียด").Index)
If projFastwork > 0 And projNum <> 0 And projInfo <> 0 Then
DueMsg = DueMsg & GetTableData(i) & Chr(13) & Chr(10)
CountDue = CountDue + 1
End If
Next i
MsgBox "ใกล้ปิดLot แล้ว : " & CountDue & " รายการ" & Chr(13) & Chr(10) & DueMsg
'If CountDue > 0 Then
' Call LineNotify("อย่าลืมจ่ายกันเด้อพี่น้อง", 118, 1)
'End If
End Sub
โค๊ดอยู่ใน Module2 ในไฟล์ที่แนบครับ
Re: MsgBox แสดงข้อมูลไม่ครบตามเงื่อนไข
Posted: Fri Feb 07, 2020 4:27 pm
by sosadboy
ผมลองลดจำนวนตัวอักษรลง ข้อมูลแจ้งเตือนจะแสดงผลครบครับ แต่ข้อมูลจริงมียาวมาก จุดประสงค์จริงๆ คือจะเขียนโค๊ดให้แจ้งเตือนเข้าไปยังโปรแกรม Line โดยที่ข้อมูลที่แจ้งเตือนไปยังโปรแกรม Line ก็ไม่ครบเช่นกันครับ แต่ถ้าส่งแบบแยกข้อมูลเป็นรายการละข้อความจะไม่มีปัญหา แต่ความต้องการอยากจะส่งไปเป็นข้อความเดียวครับ ก็เลยเกิดความสงสัยว่ามีการจำกัดการแสดงผลหรือไม่ครับ แล้วสามารถที่จะเพิ่มพื้นที่การแสดงผลได้หรือไม่ครับ
Re: MsgBox แสดงข้อมูลไม่ครบตามเงื่อนไข
Posted: Fri Feb 07, 2020 9:07 pm
by Bo_ry
Re: MsgBox แสดงข้อมูลไม่ครบตามเงื่อนไข
Posted: Fri Feb 07, 2020 9:41 pm
by sosadboy
ช่วยขยายความหน่อยได้ไหมครับ ยังไม่ค่อยเข้าใจ เพราะผมไม่ค่อยชำนาญเรื่อง VBA ส่วนโค๊ดที่เห็นก็ค้นหาจากเว็ปมาดัดแปลงใช้งานเอาครับ
Re: MsgBox แสดงข้อมูลไม่ครบตามเงื่อนไข
Posted: Fri Feb 07, 2020 11:34 pm
by Bo_ry
1000 characters max
ใส่ข้อความได้ไม่เกิน 1000 ตัวอักษร
Re: MsgBox แสดงข้อมูลไม่ครบตามเงื่อนไข
Posted: Sat Feb 08, 2020 8:02 am
by sosadboy
Bo_ry wrote: Fri Feb 07, 2020 11:34 pm
1000 characters max
ใส่ข้อความได้ไม่เกิน 1000 ตัวอักษร
เข้าใจแล้วครับ ขอบคุณมากครับ สอบถามเพิ่มเติม 1000 ตัวอักษรคือรวมช่องว่างด้วยใช่หรือเปล่าครับ ตามที่ผมเข้าใจ เพราะผมลองนับตัวอักษรจริงในข้อมูลตัวอย่างที่ผมทำแนบไปได้ 880 ตัวอักษรในส่วนของข้อมูลที่ต้องแสดงผล แต่ตอน message box แสดงข้อมูลจะเหลือที่ว่างในส่วนที่เว้นบรรทัดลงไป
Re: MsgBox แสดงข้อมูลไม่ครบตามเงื่อนไข
Posted: Sat Feb 08, 2020 6:54 pm
by snasui

Message Box ของ Excel รับค่าได้ 1,024 อักขระรวมช่องว่าง หากมีมากกว่านั้นจะตัดเหลือ 1,024 อักขระครับ
Re: MsgBox แสดงข้อมูลไม่ครบตามเงื่อนไข
Posted: Mon Feb 10, 2020 6:58 am
by sosadboy
snasui wrote: Sat Feb 08, 2020 6:54 pm

Message Box ของ Excel รับค่าได้ 1,024 อักขระรวมช่องว่าง หากมีมากกว่านั้นจะตัดเหลือ 1,024 อักขระครับ
จาดโค๊ดของผม สามารถเขียนโค๊ดให้ตรวจสอบและทำการแจ้งเตือนข้อมูลเป็นชุดๆ ได้หรือไม่ครับ เพราะตอนนี้มีแต่ตัวอย่างที่สามารถแจ้งเตือนได้ทีละลำดับ กับรวมแล้วแจ้งเตือนทีเดียว แต่แบบรวมติดปัญหาเรื่องจำกัดตัวอักษร หากพอสามารถทำได้ผมจะได้ศึกษาค้นหาแนวทางต่อครับ
Re: MsgBox แสดงข้อมูลไม่ครบตามเงื่อนไข
Posted: Mon Feb 10, 2020 8:13 am
by snasui
sosadboy wrote: Mon Feb 10, 2020 6:58 am
จา
กโค๊ดของผม สามารถเขียนโค๊ดให้ตรวจสอบและทำการแจ้งเตือนข้อมูลเป็นชุดๆ ได้หรือไม่ครับ

กรณีต้องการส่งเป็นชุด ให้สร้างตัวนับขึ้นมาเพิ่มและกำหนดว่าต้องการแจ้งเตือนชุดละกี่รายการ เช่นทุก 5 รายการ เมื่อครบ 5 รายการค่อยแจ้งเตือนและกำหนดตัวแปรการนับให้เริ่มนับใหม่ เช่นนี้เป็นต้นครับ
ตัวอย่าง Code ซึ่งปรับใช้ตัวนับเดิมครับ
Code: Select all
If projFastwork > 0 And projNum <> 0 And projInfo <> 0 Then
dueMsg = dueMsg & GetTableData(i) & Chr(13) & Chr(10)
countDue = countDue + 1
If countDue = 5 Then
'Notify
countDue = 0
dueMsg = ""
End If
End If
Re: MsgBox แสดงข้อมูลไม่ครบตามเงื่อนไข
Posted: Mon Feb 10, 2020 1:12 pm
by sosadboy
snasui wrote: Mon Feb 10, 2020 8:13 am
sosadboy wrote: Mon Feb 10, 2020 6:58 am
จา
กโค๊ดของผม สามารถเขียนโค๊ดให้ตรวจสอบและทำการแจ้งเตือนข้อมูลเป็นชุดๆ ได้หรือไม่ครับ

กรณีต้องการส่งเป็นชุด ให้สร้างตัวนับขึ้นมาเพิ่มและกำหนดว่าต้องการแจ้งเตือนชุดละกี่รายการ เช่นทุก 5 รายการ เมื่อครบ 5 รายการค่อยแจ้งเตือนและกำหนดตัวแปรการนับให้เริ่มนับใหม่ เช่นนี้เป็นต้นครับ
ตัวอย่าง Code ซึ่งปรับใช้ตัวนับเดิมครับ
Code: Select all
If projFastwork > 0 And projNum <> 0 And projInfo <> 0 Then
dueMsg = dueMsg & GetTableData(i) & Chr(13) & Chr(10)
countDue = countDue + 1
If countDue = 5 Then
'Notify
countDue = 0
dueMsg = ""
End If
End If
ขอบพระคุณมากครับอาจารย์
Re: MsgBox แสดงข้อมูลไม่ครบตามเงื่อนไข
Posted: Mon Feb 10, 2020 1:58 pm
by sosadboy
ขอถามเพิ่มเติมเพื่อเป็นความรู้ครับ อยากให้อาจารย์ช่วยอธิบายโค๊ดส่วนนี้หน่อยครับ
ว่ามีความหมายว่าอย่างไร และการทำงานของโค๊ดส่วนนี้เป็นอย่างไรครับ
Re: MsgBox แสดงข้อมูลไม่ครบตามเงื่อนไข
Posted: Mon Feb 10, 2020 2:14 pm
by snasui

แปลว่าให้มันมีค่าเท่ากับค่าว่าง เทียบได้กับลบค่าออกจากเซลล์ เพื่อเตรียมพร้อมเอาไว้รับค่าใหม่ครับ
Re: MsgBox แสดงข้อมูลไม่ครบตามเงื่อนไข
Posted: Mon Feb 10, 2020 2:31 pm
by sosadboy
snasui wrote: Mon Feb 10, 2020 2:14 pm

แปลว่าให้มันมีค่าเท่ากับค่าว่าง เทียบได้กับลบค่าออกจากเซลล์ เพื่อเตรียมพร้อมเอาไว้รับค่าใหม่ครับ
ขอบพระคุณมากครับที่ให้ความรู้เพิ่มเติมครับ
Re: MsgBox แสดงข้อมูลไม่ครบตามเงื่อนไข
Posted: Sat Feb 15, 2020 3:12 pm
by sosadboy
จากโค๊ด
Code: Select all
dueMsg = dueMsg & GetTableData(i) & Chr(13) & Chr(10)
อยากถามเพิ่มเติมเกี่ยวกับการทำงานของส่วนนี้ครับสงสัยตรงตัวแปร
ไม่เข้าใจความหมายตรงส่วนนี้ครับ
Re: MsgBox แสดงข้อมูลไม่ครบตามเงื่อนไข
Posted: Sat Feb 15, 2020 4:34 pm
by snasui
sosadboy wrote: Sat Feb 15, 2020 3:12 pm
dueMsg = dueMsg & GetTableData(i) & Chr(13) & Chr(10)

แปลว่าให้ตัวแปร dueMsg มีค่าเท่ากับตัวเอง เชื่อมกันตัวแปร
GetTableData(i) เชื่อมกับอักขระ
Chr(13) เชื่อมกับอักขระ
Chr(10)
สมมุติ
duMsg คือ A
GetTableData(i) คือ B
Chr(13) คือ C
Chr(10) คือ D
เมื่อแทนค่าก็จะได้เป็น
dueMsg = "A" & "B" & "C" & "D" และจะกลายเป็น
dueMsg = "ABCD"
ส่วน
dueMsg = dueMsg คือให้มีค่าเท่ากับตัวเอง ปกติจะไม่เขียนกันแบบนี้เพราะไม่ได้ให้ประโยชน์ใด ยกเว้น
.range("a1").value = .range("a1").value ที่จะใช้ประโยชน์ได้ เพราะสามารถแปลงสูตรให้กลายเป็นค่าคงที่ได้ครับ
Re: MsgBox แสดงข้อมูลไม่ครบตามเงื่อนไข
Posted: Sat Feb 15, 2020 5:08 pm
by sosadboy
snasui wrote: Sat Feb 15, 2020 4:34 pm
sosadboy wrote: Sat Feb 15, 2020 3:12 pm
dueMsg = dueMsg & GetTableData(i) & Chr(13) & Chr(10)

แปลว่าให้ตัวแปร dueMsg มีค่าเท่ากับตัวเอง เชื่อมกันตัวแปร
GetTableData(i) เชื่อมกับอักขระ
Chr(13) เชื่อมกับอักขระ
Chr(10)
สมมุติ
duMsg คือ A
GetTableData(i) คือ B
Chr(13) คือ C
Chr(10) คือ D
เมื่อแทนค่าก็จะได้เป็น
dueMsg = "A" & "B" & "C" & "D" และจะกลายเป็น
dueMsg = "ABCD"
ส่วน
dueMsg = dueMsg คือให้มีค่าเท่ากับตัวเอง ปกติจะไม่เขียนกันแบบนี้เพราะไม่ได้ให้ประโยชน์ใด ยกเว้น
.range("a1").value = .range("a1").value ที่จะใช้ประโยชน์ได้ เพราะสามารถแปลงสูตรให้กลายเป็นค่าคงที่ได้ครับ
ขอบคุณมากครับอาจารย์ เนื่องจากโค๊ดเอามาจากเว็บแล้วมาดัดแปลง เลยเกิดความสงสัยเพราะการกำหนดค่ามันแปลกไป เลยถามเพื่อเป็นความรู้ครับ ขอบคุณอีกครั้งครับ