2016-02-01 3 views
0

Я пытаюсь закрыть окно shellChrome через функцию VBA. Моя функция запускает запрос URL, который возвращает файл .csv. Дело в том, что я хотел бы закрыть окно, чтобы оно не всегда показывалось (этот процесс выполняется каждые 3 минуты). Я пока не смог найти решение, с которым я могу работать. Я попробовал добавить SendKeys "%{F4}" после того, как был предложен один сайт. Это просто минимизирует окно, а не закрывает его. Я также попытался добавить DoCmd.Close Shell, "Untitled", но это также не сработало. Я потратил несколько часов на то, чтобы попытаться сделать то, что я себе представляю, это простая задача, и почувствовал, что другой набор глаз может указать мне в правильном направлении. Ниже мой код, который открывается Chrome. Любая помощь очень ценится.Доступ к VBA для закрытия окна Chrome, открытого через оболочку

Public Function RunYahooAPI() 

Dim chromePath As String 

chromePath = """C:\Program Files\Google\Chrome\Application\chrome.exe""" 

Shell (chromePath & " -url http://download.finance.yahoo.com/d/quotes.csv?s=CVX%2CXOM%2CHP%2CSLB%2CPBA%2CATR%2CECL%2CNVZMY%2CMON&f=nsl1op&e=.csv") 

End Function 
+0

Я не могу правильно смотреть в минуту, но, может быть, если вы установите оболочку как объект, воспользуйтесь Chrome? поэтому установите x = shell .... или есть некоторые статьи здесь, чтобы закрыть задачи Windows, например, когда excel зависает или что-то в этом роде, аналогично диспетчер задач. –

+0

Я думал, что 'SendKeys '^ {F4}" 'будет работать. В конце концов это не так. –

+0

Вы можете сделать это в VB Script, используя скрипт VB для sendkeys. –

ответ

0

этот VBA код будет запущен (как в вашем вопросе) хроме, сохраните дескриптор процесса в переменной pHandle, петлевые все процессы с этой ручкой, а затем остановить процесс (после проверки пользователя и домена владельца процесса).

Sub LaunchandStopProcess() 

' 
' As in your Question 
' 
Dim chromePath As String 
Dim pHandle As Variant 

chromePath = "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" 

' 
' Note: Shell pass the Process Handle to the PID variable 
' 
PHandle = Shell(chromePath & " -url http://download.finance.yahoo.com/d/quotes.csv?s=CVX%2CXOM%2CHP%2CSLB%2CPBA%2CATR%2CECL%2CNVZMY%2CMON&f=nsl1op&e=.csv") 

Dim objWMIcimv2 As Object 
Dim objProcess As Object 
Dim objList As Object 
Dim ProcToTerminate As String 
Dim intError As Integer 

Set objWMIcimv2 = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2") 
Set objList = objWMIcimv2.ExecQuery("select * from win32_process where Handle='" & CStr(pHandle) & "'") 

' 
' ObjList contains the list of all process matching the Handle (normally your chrome App, if running) 
' 

If objList.Count = 0 Then 
    ' No matching Process 
    ' Set all objects to nothing 
    Set objWMIcimv2 = Nothing 
    Set objList = Nothing 
    Set objProcess = Nothing 
    Exit Sub 
Else 
    ' 
    ' Parse all matching Processes 
    ' 
    For Each objProcess In objList 
     ' additionally check with actual user 
     colProperties = objProcess.getowner(strNameofUser, strUserdomain) 

     If strUserdomain + "\" + strNameofUser = Environ$("userdomain") + "\" + Environ$("username") Then 
      intError = objProcess.Terminate 
      If intError <> 0 Then 
       ' 
       ' Trap Error or do nothing if code run unattended 
       ' 
      Else 
       ' Confirm that process is killed or nothing if code run unattended 
      End If 
     End If 
    Next 

    Set objWMIcimv2 = Nothing 
    Set objList = Nothing 
    Set objProcess = Nothing 

End If 
End Sub 
Смежные вопросы