programing

Excel VBA를 사용하여 Internet Explorer 로컬 인트라넷 제어

jooyons 2023. 6. 19. 21:26
반응형

Excel VBA를 사용하여 Internet Explorer 로컬 인트라넷 제어

나는 엑셀 VBA 코드를 사용하여 우리 웹사이트의 버튼을 클릭하고 있습니다.이것이 최선이 아니라는 것은 알지만, 저에게 있어 가장 거부감이 적은 선택입니다.

저는 이 코드를 사용할 수 있고, imdb.com , 구글 등을 성공적으로 로드할 수 있습니다.하지만 우리의 로컬 사이트를 로드할 때, 나는 ie 객체에 대한 통제력을 잃고, readyState를 확인할 수 없고, 그만둘 수 없습니다.

여기 제가 받는 오류가 있습니다.

런타임 오류 '-2147023179(800706b5)':
입니다.
를 알 수 없습니다.

매번 대신 다음과 같은 메시지를 받습니다.

런타임 오류 '-2147417848(80010108)':
입니다.
호출된 개체와 클라이언트의 연결이 끊어졌습니다.

[]을 하면 [디버깅]이 됩니다.ie.readyState내가 그것에 대해 언급했고 그리고 그것은 그것을 가리킵니다.ie.Quit

Sub dothestuff()
    Dim ie As InternetExplorer
    Set ie = New InternetExplorer
    ie.Visible = True

    ie.Navigate "http://www.google.com/"
    anerror = webload(ie)

    ie.Quit
    Set ie = Nothing
End Sub

Function webload(ie)
    Do Until ie.ReadyState = READYSTATE_COMPLETE
        DoEvents
    Loop
End Function

다음은 이 문제에 대한 빠르고 쉬운 해결책입니다.

다음 대신:

set IE = createobject("internetexplorer.application")

사용:

Set IE = New InternetExplorerMedium

IE 설정을 조정할 필요 없음

이게 지금 일어나고 있는 일입니다.브라우저가 내부적으로 다른 보안 영역(예: 로컬 주소에서 인트라넷 주소 또는 인터넷 주소로)으로 "점프"할 때 IE는 IE의 현재 프로세스를 닫고 더 엄격한 보안으로 다른 프로세스를 엽니다.이전 및 새 IE 프로세스는 상위 IE 작업에 대한 IE 하위 프로세스이므로 브라우저를 보거나 작업 관리자에서 프로세스를 관찰해도 해당 프로세스가 발생하지 않습니다.프로세스 탐색기(마이크로소프트에서 무료)를 사용하는 경우 이러한 현상을 확인할 수 있습니다.

이러한 유형의 환경에서 수행해야 하는 작업은 위의 AnupUpadhay 솔루션을 사용하는 것입니다.그의 코드 스니펫은 모든 IE 작업(부모와 자녀는 차이가 없음)을 살펴보고 원래 프로세스가 제공된 웹 주소를 가리키는 새 IE 프로세스를 찾습니다.동일한 주소에 대해 여러 브라우저를 열지 않는 한 새 프로세스를 안정적으로 검색하고 예상대로 계속합니다.

참고: Internet Explorer 개체 대신 Internet ExplorerMedium 개체를 사용해야 할 수도 있습니다.또한 세션을 "보류"하는 것이 더 좋습니다.

아누프의 버전과 거의 비슷한 제 버전입니다.

MS Office VBA에 대한 참조:

  • Microsoft 인터넷 제어

  • 마이크로소프트 셸 제어 및 자동화

n

Dim IE As InternetExplorerMedium ' This object (the "medium" variety as opposed to "InternetExplorer") is necessary in our security climate
Dim targetURL As String
Dim webContent As String
Dim sh
Dim eachIE

targetURL = "[your URL here]"
Set IE = New InternetExplorerMedium
IE.Visible = False ' Set to true to watch what's happening
IE.Navigate targetURL

While IE.Busy
  DoEvents
  Wend

Do
  Set sh = New Shell32.Shell
  For Each eachIE In sh.Windows
    If InStr(1, eachIE.LocationURL, targetURL) Then
      Set IE = eachIE
      'IE.Visible = False  'This is here because in some environments, the new process defaults to Visible.  
      Exit Do
      End If
    Next eachIE
  Loop
Set eachIE = Nothing
Set sh = Nothing

While IE.Busy  ' The new process may still be busy even after you find it
  DoEvents
  Wend

사용해 보십시오.

Set IE = GetObject("new:{D5E8041D-920F-45e9-B8FB-B1DEB82C6E5E}")

IE9을 사용할 때 이 문제가 발생했습니다.보안 설정 때문에 발생합니다."인터넷 옵션" 대화 상자의 "보안" 탭에 "보호 모드 사용"이라는 설정이 있습니다(도구...선택할 수 있습니다.각 "영역"에는 "보호 모드 사용"에 대한 설정이 다를 수 있습니다. "보호 모드 사용"을 선택 취소하면 문제가 해결되었습니다.보호 모드에 있는 영역으로 전환하면 IE가 해당 영역의 트래픽을 처리하기 위한 새로운 프로세스를 시작합니다(이전 프로세스를 삭제할 수도 있음).이 경우 VBA의 IE 개체 변수와 Internet Explorer의 연결이 끊어집니다.

좋아요, 방금 해결책을 찾았고, 필사적으로 로컬 호스트 대신 127.0.0.1을 로드하기로 결정했습니다. 물론 문제가 없습니다. 그래서 로컬 인트라넷 서버의 IP 주소를 해결했고, 이제 저는 괜찮습니다.왜 그런지는 잘 모르겠지만, 이것이 제 문제를 해결했습니다.

Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = False
IE.Navigate "C:\abc.html"

'여기서 오류가 발생했습니다. 아래 'Microsoft Shell Controls 및 Automation에 대한 참조' 아래와 같이 이에 대한 작고 까다로운 대체 솔루션을 찾았습니다. 연결 끊김 문제에 대해 IE 개체를 재할당하려면 아래 코드를 사용하십시오.

Dim sh
Dim eachIE
Do

    Set sh = New Shell32.Shell
    For Each eachIE In sh.Windows
        ' Check if this is the desired URL

' Here you can use your condition except .html
' If you want to use your URL , then put the URL below in the code for condition check.
    ' This code will reassign your IE object with the same reference for navigation and your issue will resolve.
' 
        If InStr(1, eachIE.locationurl, ".html") Then 
        Set IE = eachIE
        Exit Do
        End If
    Next eachIE
Loop

저에게는 다음과 같은 것이 효과가 있었습니다.

  1. Internet Explorer 열기
  2. 도구로 이동
  3. 인터넷으로 이동 옵션
  4. 보안 탭으로 전환
  5. 신뢰할 수 있는 사이트 클릭
  6. 사이트 클릭
  7. 사이트 URL이 표시됩니다. 선택하십시오.
  8. 제거 클릭
  9. 닫기를 클릭하고 적용한 후 확인

ps. 나는 IE 8 브라우저에서 이 단계들을 테스트했습니다.

혹시 제본에 문제가 있는 건 아닐까요?이것은 이상한 오류입니다.

코드를 사용해 보십시오(http://www.excely.com/excel-vba/ie-automation.shtml) 참조).도움이 되길 바랍니다.

Option Explicit

' lasts for the life of Excel being open
Dim ie As Object

Sub dothestuff()
    Set ie = CreateObject("InternetExplorer.Application")
    ie.Visible = True
    ie.Navigate "http://www.google.com/"

    Do While ie.Busy
        DoEvents
    Loop

    ie.Quit
    Set ie = Nothing
End Sub

회사 인트라넷 내에 있고 신뢰할 수 있는 사이트에도 포함된 웹 사이트를 사용하는 경우와 동일한 문제가 발생하고 있습니다.보호 모드를 사용하지 않도록 설정하면 준비 상태를 확인할 수 있지만 인트라넷 및 신뢰할 수 있는 사이트 외에도 인터넷 영역에 대해 사용하지 않도록 설정한 경우에만 확인할 수 있습니다.

신뢰할 수 있는 사이트에서 ReadyState를 확인할 때 인터넷 영역에 대해 보호 모드를 사용하도록 설정하면 자동화 오류가 발생하는 이유는 무엇입니까?인터넷 영역에 대한 보호 모드를 비활성화하지 않고 이 문제를 해결할 수 있는 방법이 있습니까?

또 다른 해결책..

Set IE = CreateObject("InternetExplorer.Application")
IE.Navigate ("http://URLOnMyIntranet/site.html")
IE.Visible = True

Set IE = nothing
Set objShellApp = CreateObject("Shell.Application")
For Each objWindow In objShellApp.Windows
    Debug.Print objWindow.LocationName
     If LCase(objWindow.LocationName) = LCase("Your windows name, use debug to find out") Then
            Set IE = objWindow
     End If
Next

참고로, Internet Explorer(인터넷 익스플로러) 매체(다른 답변 참조)를 사용하면 일반적으로 필요한 것은 모두 사용할 수 있으며, 참고로 Url 속성 obj도 사용할 수 있습니다.위치창 이름 대신 URL이 더 정확합니다.다른 답변을 참조하십시오.

Dim IE As InternetExplorer
Set IE = New InternetExplorerMedium
IE.Navigate "yousite.org"
IE.Visible = True

Do While IE.Busy
    DoEvents
Loop    

Set HTML = IE.document
Do
var8 = HTML.DocumentElement.innerHTML
v3 = var8
v4 = InStrRev(v3, "the class or ID you are looking for when the _    
page final loads", -1)
Loop While v4 = 0

Do While IE.Busy
    DoEvents
Loop 

'Your in the new page look for elements and click rinse and repeat
'the Do loop. This method works with my intranet corporate site

언급URL : https://stackoverflow.com/questions/12965032/controlling-internet-explorer-local-intranet-using-excel-vba

반응형