Я вижу, что это старый вопрос, но решение с сообщением И помогло мне разобраться в этом, и я поднял его на новый уровень. Это был небольшой прыжок. Спасибо!
Как насчет преобразования вашей функции, которая заполняет словарь именами процессов и идентификаторами, чтобы она возвращала объект словаря? Затем это простая задача - заполнить лист содержимым словаря, что я научился делать из блога. Хотел бы я знать имя автора, но ссылка есть.
Sheet1, конечно, предполагался. Настройте, как хотите. Опять же, это был небольшой скачок по сравнению с тем, что вы оба писали. Абсолютно классная работа, ребята, спасибо!
Sub Test_AllRunningApps()
Dim apps As Dictionary
Set apps = AllRunningApps()
'Populate a sheet with a dictionary - http://exceldevelopmentplatform.blogspot.com/2018/05/vba-writing-dictionaries-to-worksheet.html
Sheet1.Cells(1, 1).Resize(apps.Count, 1).Value2 = Application.Transpose(apps.Keys)
Sheet1.Cells(1, 2).Resize(apps.Count, 1).Value2 = Application.Transpose(apps.Items)
Set apps = Nothing
End Sub
'Similar to: http://msdn.microsoft.com/en-us/library/aa393618%28VS.85%29.aspx
Public Function AllRunningApps() As Dictionary
Dim strComputer As String
Dim objServices As Object, objProcessSet As Object, Process As Object
Dim oDic As Object, oDic2 As Object, a() As Variant
Set oDic = CreateObject("Scripting.Dictionary")
strComputer = "."
Set objServices = GetObject("winmgmts:\\" _
& strComputer & "\root\CIMV2")
Set objProcessSet = objServices.ExecQuery _
("Select Name, ProcessID FROM Win32_Process", , 48)
For Each Process In objProcessSet
If Not oDic.exists(Process.Name) Then
oDic.Add Key:=Process.Properties_("Name").Value, Item:=Process.Properties_("ProcessID").Value
End If
Next
Set AllRunningApps = oDic
Set objProcessSet = Nothing
Set oDic = Nothing
End Function
person
HopWorks
schedule
08.09.2019