EXCEL TOOLS
Excel Add-ins ที่พัฒนาโดยคุณสันติพงศ์ ณสุย (MVP Excel 2010-2020) ด้วยภาษา C# เพื่อแก้ไขปัญหาไฟล์ใหญ่ คำนวณนาน ทำงานช้า จัดการข้อมูลต่าง ๆ ที่ทำงานประจำวันได้อย่างสะดวกรวดเร็ว สนใจคลิกไปดูได้ที่นี่ครับ => Excel Tools
Excel Add-ins ที่พัฒนาโดยคุณสันติพงศ์ ณสุย (MVP Excel 2010-2020) ด้วยภาษา C# เพื่อแก้ไขปัญหาไฟล์ใหญ่ คำนวณนาน ทำงานช้า จัดการข้อมูลต่าง ๆ ที่ทำงานประจำวันได้อย่างสะดวกรวดเร็ว สนใจคลิกไปดูได้ที่นี่ครับ => Excel Tools
[code]
และปิดด้วย [/code]
ตัวอย่างเช่น [code]dim r as range[/code]
เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)Code: Select all
Dim TimerActive As Boolean
Sub StartTimer()
Start_Timer
End Sub
Private Sub Start_Timer()
'TimerActive = True
Application.OnTime Now() + TimeValue("00:00:01"), "Timer"
End Sub
Private Sub Stop_Timer()
'TimerActive = False
On Error Resume Next
Application.OnTime Now() + TimeValue("00:00:01"), "Timer", , False
End Sub
Sub Timer()
If Sheet3.Range("C50") = 10 Then change
If Sheet3.Range("C50") = 20 Then change1
Sheet3.Range("C50").Value = Sheet3.Range("C50") + 1
Start_Timer
End Sub
Sub StopTimer()
Stop_Timer
End Sub
Sub change()
Sheets("CL-MONITOR(1)").Select
End Sub
Sub change1()
Sheets("CL-MONITORING(2)").Select
clear
End Sub
Sub clear()
Sheet3.Range("C50").clear
End Sub
snasui wrote: ต้องแยกปุ่มกัน Start กับ Stop จะเรียกพร้อมกันไม่ได้ครับ
หากต้องการจะเรียกจากปุ่มเดียวก็จะต้องเขียนให้โปรแกรมทราบว่า เมื่อไดจะ Call Start เมื่อใดจะ Call Stop ครับ
ที่เรียกใช้ module "StopTimer" กับ "StartTimer"Private Sub CommandButton1_Click()
With CommandButton1
If .Caption = "RUNING" Then
ActiveSheet.CommandButton1.Caption = "STOP"
ActiveSheet.CommandButton1.BackColor = RGB(255, 0, 0)
ActiveSheet.CommandButton1.Font.Size = 9
ActiveSheet.CommandButton1.Font.Name = "Arial"
Title_Show
displayonsheet1
displayonsheet2
StopTimer
Worksheets("CL-MONITORING(2)").CommandButton1.Font.Size = 9
Worksheets("CL-MONITORING(2)").CommandButton1.Caption = "STOP"
Worksheets("CL-MONITORING(2)").CommandButton1.BackColor = RGB(255, 0, 0)
ElseIf .Caption = "STOP" Then
ActiveSheet.CommandButton1.Caption = "RUNING"
ActiveSheet.CommandButton1.BackColor = RGB(0, 255, 0)
ActiveSheet.CommandButton1.Font.Size = 9
ActiveSheet.CommandButton1.Font.Name = "Arial"
Title_Hide
displayclosesheet1
displayclosesheet2
StartTimer
Worksheets("CL-MONITORING(2)").CommandButton1.Caption = "RUNING"
Worksheets("CL-MONITORING(2)").CommandButton1.BackColor = RGB(0, 255, 0)
Worksheets("CL-MONITORING(2)").CommandButton1.Font.Size = 9
End If
End With
End Sub
Code: Select all
Sub Start_Timer()
'TimerActive = True
Application.OnTime Now() + TimeValue("00:00:01"), "Timer"
End Sub
Sub Stop_Timer()
'TimerActive = False
On Error Resume Next
Application.OnTime Now() + TimeValue("00:00:01"), "Timer", , False
End Sub
Code: Select all
Private Sub CommandButton1_Click()
With CommandButton1
If .Caption = "RUNING" Then
Call Module2.Stop_Timer
ActiveSheet.CommandButton1.Caption = "STOP"
ActiveSheet.CommandButton1.BackColor = RGB(255, 0, 0)
ActiveSheet.CommandButton1.Font.Size = 9
ActiveSheet.CommandButton1.Font.Name = "Arial"
Title_Show
displayonsheet1
displayonsheet2
Worksheets("CL-MONITOR(1)").CommandButton1.Font.Size = 9
Worksheets("CL-MONITOR(1)").CommandButton1.Caption = "STOP"
Worksheets("CL-MONITOR(1)").CommandButton1.BackColor = RGB(255, 0, 0)
ElseIf .Caption = "STOP" Then
Call Module2.Start_Timer
ActiveSheet.CommandButton1.Caption = "RUNING"
ActiveSheet.CommandButton1.BackColor = RGB(0, 255, 0)
ActiveSheet.CommandButton1.Font.Size = 9
ActiveSheet.CommandButton1.Font.Name = "Arial"
Title_Hide
displayclosesheet1
displayclosesheet2
Worksheets("CL-MONITOR(1)").CommandButton1.Caption = "RUNING"
Worksheets("CL-MONITOR(1)").CommandButton1.BackColor = RGB(0, 255, 0)
Worksheets("CL-MONITOR(1)").CommandButton1.Font.Size = 9
End If
End With
End Sub
snasui wrote: ตัวอย่างการปรับ Code ครับ
ใน Module2 ปรับ Code ให้เป็น Public โดยลบ Private ออก ตามด้านล่างตัวอย่างการปรับ Code ที่ชีต CL-MONITORING(2)Code: Select all
Sub Start_Timer() 'TimerActive = True Application.OnTime Now() + TimeValue("00:00:01"), "Timer" End Sub Sub Stop_Timer() 'TimerActive = False On Error Resume Next Application.OnTime Now() + TimeValue("00:00:01"), "Timer", , False End Sub
Code: Select all
Private Sub CommandButton1_Click() With CommandButton1 If .Caption = "RUNING" Then Call Module2.Stop_Timer ActiveSheet.CommandButton1.Caption = "STOP" ActiveSheet.CommandButton1.BackColor = RGB(255, 0, 0) ActiveSheet.CommandButton1.Font.Size = 9 ActiveSheet.CommandButton1.Font.Name = "Arial" Title_Show displayonsheet1 displayonsheet2 Worksheets("CL-MONITOR(1)").CommandButton1.Font.Size = 9 Worksheets("CL-MONITOR(1)").CommandButton1.Caption = "STOP" Worksheets("CL-MONITOR(1)").CommandButton1.BackColor = RGB(255, 0, 0) ElseIf .Caption = "STOP" Then Call Module2.Start_Timer ActiveSheet.CommandButton1.Caption = "RUNING" ActiveSheet.CommandButton1.BackColor = RGB(0, 255, 0) ActiveSheet.CommandButton1.Font.Size = 9 ActiveSheet.CommandButton1.Font.Name = "Arial" Title_Hide displayclosesheet1 displayclosesheet2 Worksheets("CL-MONITOR(1)").CommandButton1.Caption = "RUNING" Worksheets("CL-MONITOR(1)").CommandButton1.BackColor = RGB(0, 255, 0) Worksheets("CL-MONITOR(1)").CommandButton1.Font.Size = 9 End If End With End Sub
Code: Select all
Call Module2.Start_Timer
Code: Select all
ElseIf .Caption = "STOP" Then
ActiveSheet.CommandButton1.Caption = "RUNING"
ActiveSheet.CommandButton1.BackColor = RGB(0, 255, 0)
ActiveSheet.CommandButton1.Font.Size = 9
ActiveSheet.CommandButton1.Font.Name = "Arial"
Title_Hide
displayclosesheet1
displayclosesheet2
Worksheets("CL-MONITOR(1)").CommandButton1.Caption = "RUNING"
Worksheets("CL-MONITOR(1)").CommandButton1.BackColor = RGB(0, 255, 0)
Worksheets("CL-MONITOR(1)").CommandButton1.Font.Size = 9
Call Module2.Start_Timer
End If
snasui wrote: การจะวางไว้ที่บรรทัดใดแล้วได้หรือไม่ได้ผมไม่ได้ทดสอบโดยละเอียดครับ เพียงแต่เห็นว่าความต้องการหลักคือต้องการที่จะกำหนดการจับเวลาหรือหยุดจับเวลา ดังนั้น จึงยกมาให้ทำงานเสียก่อน
โค้ดที่แนบมาเป็นการจัดการกับ Object ของ Worksheet อีกหลาย ๆ อย่างอาจจะกระทบกับการ Start และ Stop Timer ได้ หากไว้บรรทัดท้าย ๆ อาจจะต้องใช้ DoEvents เข้าไปช่วยเพื่อให้ทำงานได้ตรงกับที่ต้องการครับ