2017-01-12 169 views
0

我在添加到現有項目之前測試代碼。它看起來像這樣完美運行:VB6'運行時錯誤'424':Object Required'錯誤

Option Explicit 

Dim objShell As Object 
Dim m_EngineRun As Object 

Sub main() 

Set objShell = CreateObject("WScript.Shell") 
Set m_EngineRun = objShell.Exec("notepad.exe") 
Dim objWMIService As Object 
Dim colProcessList As Object 

MsgBox m_EngineRun.ProcessID 

Set objWMIService = GetObject("winmgmts:\\.\root\cimv2") 
Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process Where ProcessID = " & m_EngineRun.ProcessID) 

If colProcessList.Count = 1 Then 
    objShell.run "TASKKILL /F /IM " & m_EngineRun.ProcessID, , True 
    MsgBox m_EngineRun.ProcessID & (" terminated") 
Else 
    MsgBox m_EngineRun.ProcessID & (" does not exist") 
End If 
End Sub 

然後,我添加了下面的行,它失敗,並出現424錯誤。

Option Explicit 

Dim objShell As Object 
Dim m_EngineRun As Object 

'Added this line 
Dim m_PID As Object 

Sub main() 

Set objShell = CreateObject("WScript.Shell") 
Set m_EngineRun = objShell.Exec("notepad.exe") 

'And this line 
Set m_PID = m_EngineRun.ProcessID 
Dim objWMIService As Object 
Dim colProcessList As Object 

'And changed this one 
MsgBox m_PID 

Set objWMIService = GetObject("winmgmts:\\.\root\cimv2") 
Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process Where ProcessID = " & m_EngineRun.ProcessID) 

If colProcessList.Count = 1 Then 
    objShell.run "TASKKILL /F /IM " & m_EngineRun.ProcessID, , True 
    MsgBox m_EngineRun.ProcessID & (" terminated") 
Else 
    MsgBox m_EngineRun.ProcessID & (" does not exist") 
End If 
End Sub 

這絕對是Set m_PID = m_EngineRun.ProcessID行是麻煩製造者。

我根本無法找到與我的具體問題有關的答案。我覺得也許m_PID不應該是一個對象?但如果是這樣,它應該是什麼?

任何幫助,非常感謝。

+0

我認爲這將是一個對象,因爲我缺乏足夠的VB6知識來更好地瞭解:)你有什麼建議工作得很好!謝謝你的幫助。儘管如此,我不能標記你是正確的。 – Chris

回答

2

ProcessID不是一個對象;它是一個整數(數字進程ID)。

取出As ObjectSet,只是直接分配:

Dim m_PID 
'.... 
m_PID = m_EngineRun.ProcessID 

它可能最好不要假定一切都是對象,因爲絕大多數的事情,你會遇到很可能不是。除非你知道否則我會開始不期待一個對象,然後如果遇到問題就轉向嘗試對象。