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
Bo_ry wrote: Fri Feb 07, 2020 9:07 pm https://notify-bot.line.me/doc/en/
1000 characters max
ช่วยขยายความหน่อยได้ไหมครับ ยังไม่ค่อยเข้าใจ เพราะผมไม่ค่อยชำนาญเรื่อง 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
:D 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 :D 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 จาโค๊ดของผม สามารถเขียนโค๊ดให้ตรวจสอบและทำการแจ้งเตือนข้อมูลเป็นชุดๆ ได้หรือไม่ครับ
:D กรณีต้องการส่งเป็นชุด ให้สร้างตัวนับขึ้นมาเพิ่มและกำหนดว่าต้องการแจ้งเตือนชุดละกี่รายการ เช่นทุก 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 จาโค๊ดของผม สามารถเขียนโค๊ดให้ตรวจสอบและทำการแจ้งเตือนข้อมูลเป็นชุดๆ ได้หรือไม่ครับ
:D กรณีต้องการส่งเป็นชุด ให้สร้างตัวนับขึ้นมาเพิ่มและกำหนดว่าต้องการแจ้งเตือนชุดละกี่รายการ เช่นทุก 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
ขอถามเพิ่มเติมเพื่อเป็นความรู้ครับ อยากให้อาจารย์ช่วยอธิบายโค๊ดส่วนนี้หน่อยครับ

Code: Select all

dueMsg = ""
ว่ามีความหมายว่าอย่างไร และการทำงานของโค๊ดส่วนนี้เป็นอย่างไรครับ

Re: MsgBox แสดงข้อมูลไม่ครบตามเงื่อนไข

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

Re: MsgBox แสดงข้อมูลไม่ครบตามเงื่อนไข

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

Re: MsgBox แสดงข้อมูลไม่ครบตามเงื่อนไข

Posted: Sat Feb 15, 2020 3:12 pm
by sosadboy
จากโค๊ด

Code: Select all

 dueMsg = dueMsg & GetTableData(i) & Chr(13) & Chr(10) 
อยากถามเพิ่มเติมเกี่ยวกับการทำงานของส่วนนี้ครับสงสัยตรงตัวแปร

Code: Select all

 dueMsg = dueMsg 
ไม่เข้าใจความหมายตรงส่วนนี้ครับ

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)
:D แปลว่าให้ตัวแปร 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)
:D แปลว่าให้ตัวแปร 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 ที่จะใช้ประโยชน์ได้ เพราะสามารถแปลงสูตรให้กลายเป็นค่าคงที่ได้ครับ
ขอบคุณมากครับอาจารย์ เนื่องจากโค๊ดเอามาจากเว็บแล้วมาดัดแปลง เลยเกิดความสงสัยเพราะการกำหนดค่ามันแปลกไป เลยถามเพื่อเป็นความรู้ครับ ขอบคุณอีกครั้งครับ