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
Public Function exampleIsProcessRunning()
Debug.Print IsProcessRunning("CMD.EXE")
Debug.Print IsProcessRunning("Explorer.EXE")
Debug.Print IsProcessRunning("NOTEPAD.EXE")
End Function
Public Function IsProcessRunning(process As String)
Dim objList As Object
Set objList = GetObject("winmgmts:") _
.ExecQuery("select * from win32_process where name='" & process & "'")
If objList.Count > 0 Then
IsProcessRunning = True
Else
IsProcessRunning = False
End If
End Function
Code: Select all
Public Function exampleIsProcessRunning()
Debug.Print IsProcessRunning("CMD.EXE")
Debug.Print IsProcessRunning("Explorer.EXE")
Debug.Print IsProcessRunning("NOTEPAD.EXE")
End Function
Code: Select all
Public Function IsProcessRunning(process As String)
Dim objList As Object
Set objList = GetObject("winmgmts:") _
.ExecQuery("select * from win32_process where name='" & process & "'")
If objList.Count > 0 Then
IsProcessRunning = True
Else
IsProcessRunning = False
End If
End Function
Code: Select all
Sub Run_All()
Call Unhide_PW1 ===> ซ่อน Sheet
Call Clear_IP_Input_PW1 ===> Clear ค่าต่างๆให้ว่าง
Call Sent_IP_Input_PW1 ===> ส่งข้อมูล ip ที่จะ ping และเปิด Bat file และ Run CMD
If Range("A6") = 5 Then
Application.Wait (Now + TimeValue("0:00:10")) ===> ตั้งเวลาหากมี5วงจร ก็หน่วงการดึงค่าของ excel 10 sec
Else
If Range("A4") = 10 Then
Application.Wait (Now + TimeValue("0:00:02")) ===>ตั้งเวลาหลอก หากมี10วงจร ก็หน่วงการดึงค่าของ excel 2 sec เพื่อให้ excel
ทำงานดึงค่าไม่ทัน (ซึ่งต้องการวิธีใหม่ที่ไม่ต้องตั้งเวลา แต่เช็คว่า CMD ปิด จึง
จะไปดึงค่ามาครับ Else
End If
End If
Call Get_Log_PW1 ===> ไปดึงค่า
Call Compare_Result_Before_PW1 ===> option เก็บ Log ก่อนทำ
Call Hide_PW1 ===> ซ่อน sheet
End Sub
Code: Select all
Public Function exampleIsProcessRunning()
Debug.Print IsProcessRunning("CMD.EXE")
End Function
Code: Select all
If objList.Count > 0 Then
IsProcessRunning = True
Sheets("Fomula_PW").Select
Range("A12").Select
Else
IsProcessRunning = False
End If
Code: Select all
Public Function exampleIsProcessRunning()
Debug.Print IsProcessRunning("CMD.EXE")
End Function
Public Function IsProcessRunning(process As String)
Dim objList As Object
Set objList = GetObject("winmgmts:") _
.ExecQuery("select * from win32_process where name='" & process & "'")
If objList.Count > 0 Then
IsProcessRunning = True
Call Sent_IP_Input_PW1 ------- ทำการเปิดเรียก CMD เพื่อทำการ ping อัตโนมัติ
Else
IsProcessRunning = False
Call Get_Log_PW1 ---------- ให้ไปเรียกเพื่อดึงข้อมูล เมื่อ cmd ปิด
Sheets("Menu_PW1").Select --------- กลับ Menu หลัก
Range("A12").Select
End If
End Function
Weravong wrote: Tue Sep 07, 2021 4:21 pm ผมต้องการให้ excel สามารถตรวจสอบว่า
CMD.EXE ปิดไปตอนไหน หากปิดแล้วก็ให้ excel ไปดึงค่ามา
ขอบคุณมากๆครับ เดี๋ยวผมลองทดสอบใหม่อีกครั้งครับsnasui wrote: Tue Oct 05, 2021 11:35 pmWeravong wrote: Tue Sep 07, 2021 4:21 pm ผมต้องการให้ excel สามารถตรวจสอบว่า
CMD.EXE ปิดไปตอนไหน หากปิดแล้วก็ให้ excel ไปดึงค่ามา
ตัวอย่างการใช้งานก็จะเป็นตามลำดับนี้ครับ
Code ที่ให้ไปคือการ Check ว่า CMD (หรือโปรแกรมใด ๆ) ปิดไปแล้วหรือไม่ จึงไม่ใช่ตามที่ปรับปรุงมาครับ
- รันคำสั่งที่ทำให้เปิด CMD
- รัน Code สำหรับเช็ค CMD ว่าปิดแล้วหรือไม่ หากปิดแล้วให้ไปดึงค่ามา
Code: Select all
Sub Run_All()
Call exampleIsProcessRunning
End Sub
Code: Select all
Public Function exampleIsProcessRunning()
Debug.Print IsProcessRunning("CMD.EXE")
End Function
Public Function IsProcessRunning(process As String)
Dim objList As Object
Set objList = GetObject("winmgmts:") _
.ExecQuery("select * from win32_process where name='" & process & "'")
Call Sent_IP_Input_PW1 -------------------------- เรียกใช้ CMD
If objList.Count > 0 Then
IsProcessRunning = True
Sheets("Menu_PW1").Select ----------- ถ้า CMD ยังไม่ปิด ยังคงอยู่หน้า Sheet "Menu_PW1" ซึ่งเป็นหน้า Menu หลัก
Else
IsProcessRunning = False
Sheets("Fomula_PW").Select
Call Get_Log_PW1 ---------- ถ้า CMD ปิดแล้ว ก็ให้ไปดึงค่าจากการทำงานของ CMD
End If
End Function
Code: Select all
Sub Run_All()
'Your code
Do while IsProcessRunning("CMD.EXE")
Application.Wait Now()+TimeValue("0:00:03")
Loop
'Your code
End Sub
ขอบคุณมากๆครับ เดี๋ยวผมลองทดสอบอีกครั้งครับsnasui wrote: Wed Oct 06, 2021 9:50 am Code ที่ผมแนะนำไปนั้น เขียนไปอย่างไรก็ใช้อย่างนั้น ใช้เพื่อการตรวจสอบว่าปิดแล้วหรือไม่ นี่คือหน้าที่ของมันครับ
Code ที่ควรเป็นคือ
สังเกตว่า Run Code แล้วตรวจสอบโดยมีการหน่วงเวลาไว้ 3 วินาที ถ้ายังไม่ปิดก็จะรอใหม่จนกว่าจะมีการปิดCode: Select all
Sub Run_All() 'Your code Do while IsProcessRunning("CMD.EXE") Application.Wait Now()+TimeValue("0:00:03") Loop 'Your code End Sub
ในการ Loop เพื่อรอ ควรจะกำหนดครั้งที่ให้ Loop ไม่เช่นนั้นหาก CMD ไม่มีการปิดจะ Loop ไม่รู้จบครับ
Code: Select all
Sub Run_All()
Call Sent_IP_Input_PW1 --------------เรียกใช้งาน cmd
Do While IsProcessRunning("CMD.EXE")
Application.Wait Now() + TimeValue("0:00:03")
Loop
Call Get_Log_PW1 --------------- ไปดึงค่า log จากการ run cmd เสร็จมาไว้ใน excel เพื่อประมวลผลต่างๆ
End Sub