เรียน คุณ snasui จาก code ที่คุณ snasui ให้มา ผมมีคำถามดังนี้
Code ด้านล่างนี้เป็นการเปิด Function Debug.print เพื่อให้เราสามารถดูขั้นตอนต่างๆของแต่ละโปรแกรมได้ใช่ไหมครับ
ซึ่งให้กด Ctrl+G ใช่หรือไม่ครับ
Code: Select all
Public Function exampleIsProcessRunning()
Debug.Print IsProcessRunning("CMD.EXE")
Debug.Print IsProcessRunning("Explorer.EXE")
Debug.Print IsProcessRunning("NOTEPAD.EXE")
End Function
และ Code ตามด้านล่างนี้ผมไม่แน่ใจทำงานอย่างไรครับ และการนำไปใช้ ผมต้องนำ Macro name ต่างๆ
มาใส่ใต้ IsProcessRunning = True หรือ IsProcessRunning = False ใช่ไหมครับ
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
และใน Excel กรณีปุ่ม Run สีแดง ซึ่งคือชุดคำสั่งตามด้านล่างนี้ครับ ซึ่งเมื่อกดปุ่ม Run มันจะมีการทำงานโดยไปเปิด Bat File แล้ว
ทำการ Run CMD ซึ่งมีชุดคำสั่งใน CMD ซึ่งมันจะ Runไป10 วงจร โดยผมไม่รู้มันจะหยุดตอนไหน โดยผลลัพธ์จากการ Run
มันจะมีใส่ใน pinglog.txt แล้วผมตั้งเวลา excel เพื่อไปดึงจาก pinglog มาไว้ใน excel ครับ ดังนั้นหากผมตั้งเวลาเร็วไป
ก็จะดึงมาไม่ครบ เพราะ cmd อาจจะยังทำงานไม่เสร็จ ดังนั้นผมไม่แน่ใจว่าจะต้องทำอย่างไรครับ
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
ขอบคุณมากๆครับ