สวัสดีครับ มา update ปัญหาที่เจอครับ จากปัญหาที่เมื่อนำ link จาก DDE มาวางใน excel ในคอลัมน์ที่กำหนด (column B) แล้วเขียน code ใน sheet1 code มันจะทำงานตลอดเวลา ทั้งๆที่ไม่มีข้อมูลใหม่วิ่งเข้ามา
ตอนนี้แก้ไขโดยการสร้าง Sheet2 ขึ้นมา และนำ link จาก DDE มาใส่ใน cell ที่กำหนดของ sheet2 เพิ่มด้วย โดยลบ code ใน sheet1 ออก แล้วเขียน code ที่ sheet2 แทน เพื่อเปรียบเทียบข้อมูล หลังจากนั้นให้ไป call looptable สามารถทำงานได้ตามเงื่อนไข คือเมมื่อมีข้อมูลใหม่เข้ามา
แต่ มีปัญหาที่เกิดขึ้นใหม่คือ เมื่อมันไป call looptable ตัว msgbox มันจะแสดงข้อความเท่ากับบรรทัดที่ในตาราง แทนที่มันจะแสดงแค่ครั้งเดียว นั่นเท่ากับว่าถ้ามี 14 บรรทัดในตาราง มันก็จะแสดง msgbox 14 ครั้ง ถึงจะหยุดแสดง
ตรงนี้ผมไม่แน่ใจว่าต้องไปปรับ code ตรงไหนครับ
code ที่ sheet2 ที่ผมใช้
Code: Select all
Option Explicit
Private Sub Worksheet_Calculate()
Application.EnableEvents = True
If Range("B20").Value > 0 Then
Call LoopTable
Application.EnableEvents = False
End If
End Sub
ส่วนอันนี้เป็น code ของ looptable ที่ผมใช้ครับ
Code: Select all
Public tbl As ListObject
Function GetTableData(projRow)
projDesc = tbl.DataBodyRange.Cells(projRow, tbl.ListColumns("Desc").Index)
projStatus = tbl.DataBodyRange.Cells(projRow, tbl.ListColumns("Status").Index)
projFullMsg = projDesc & " " & vbCrLf & _
"Çѹ·Õè : " & Now()
GetTableData = projFullMsg
End Function
Sub LoopTable()
Set tbl = Sheet1.ListObjects("ProjectTable")
'get value
Value = 0
'check number of rows
NumRows = tbl.DataBodyRange.Rows.Count
'Due Already
CountDue = 0
For i = 1 To NumRows
projStatus = tbl.DataBodyRange.Cells(i, tbl.ListColumns("Status").Index)
If projStatus > Value Then
DueMsg = DueMsg & GetTableData(i) & Chr(13) & Chr(10)
CountDue = CountDue + 1
End If
Next i
MsgBox "Warning : " & CountDue & " items" & Chr(13) & Chr(10) & DueMsg
End Sub