2017-11-09 2 views
0

問題を解決するのに手助けはできますか?タスクマネージャーvb.netで最後に作成されたExcelインスタンスを強制終了します

Excelのカップルインスタンス(タスクマネージャーにEXCEL.EXEを開いている)があり、最後に開いたインスタンスを強制終了します。今の私は、最初のインスタンスを殺すことができますが、私は最後に殺したい:

Sub Main() 
    Dim dictExe As Object 
    dictExe = CreateObject("Scripting.Dictionary") 

    Dim oServ As Object 
    Dim cProc 
    Dim oProc As Object 
    oServ = GetObject("winmgmts:") 
    cProc = oServ.ExecQuery("Select * from Win32_Process") 
    For Each oProc In cProc 
     If oProc.Name = "EXCEL.EXE" Then 
      dictExe.Add(oProc, oProc.CreationDate) 
     End If 
    Next 

    For Each oProcCatia In dictExe 
     If oProcCatia.Name = "EXCEL.EXE" Then 
      Dim errReturnCode 
      errReturnCode = oProcCatia.Terminate() 
      Exit Sub 
     End If 
    Next 
End Sub 

私は辞書魔女でインスタンスを殺すために考えていた最大の作成日を持っているが、私は方法がわかりません。 質問は、どのように辞書から最大の価値を持つキーを取得することができますか?

+0

はカティアアプリケーション内でこのスクリプトコードですか?または、実際のVB.NETで作業していますか? – Forty3

+0

アプリケーションで作成したExcelインスタンスを削除するクリーンアップルーチンですか? – user8675309

+0

このコードはCatia VBAから取られ、vb.netに置かれました。私はCatiaのアプリケーションを閉じる必要がありますが、より多くの人々がExcelを使用するので、私はExcelのために書いています。そして問題は同じです。 – CodeCatia

答えて

1

私はScripting.Dictionaryの使用を見合わせると、単純に、最新のCreationDateの参照を保持します:

Sub Main() 
    Dim oServ As Object 
    Dim cProc 
    Dim oProc As Object 
    Dim oToBeRemovedProc As Object 
    Dim oToBeRemovedCreationDate As Object 

    oServ = GetObject("winmgmts:") 
    cProc = oServ.ExecQuery("Select * from Win32_Process") 
    For Each oProc In cProc 
     If oProc.Name = "EXCEL.EXE" Then 
      '::: No good checking values against Nothing 
      If oToBeRemovedProc Is Nothing Then 
       oToBeRemovedProc = oProc 
       oToBeRemovedCreationDate = oProc.CreationDate 
      End If 

      '::: Is the current hold value older than this one? 
      If oToBeRemovedCreationDate < oProc.CreationDate Then 
       oToBeRemovedProc = oProc 
       oToBeRemovedCreationDate = oProc.CreationDate 
      End If 
     End If 
    Next 

    '::: Do we actually have something to remove? 
    If Not oToBeRemovedProc Is Nothing Then 
     oToBeRemovedProc.Terminate() 
     oToBeRemovedProc = Nothing 
     oToBeRemovedCreationDate = Nothing 
    End If 
End Sub 
+0

それだけです。ありがとうございました – CodeCatia

関連する問題