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
저에게는 다음과 같은 것이 효과가 있었습니다.
- Internet Explorer 열기
- 도구로 이동
- 인터넷으로 이동 옵션
- 보안 탭으로 전환
- 신뢰할 수 있는 사이트 클릭
- 사이트 클릭
- 사이트 URL이 표시됩니다. 선택하십시오.
- 제거 클릭
- 닫기를 클릭하고 적용한 후 확인
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
'programing' 카테고리의 다른 글
| SQL Developer에서 View를 열 수 없음 ->DBA 메뉴(Oracle 12C Standard Edition 설치됨) (0) | 2023.06.19 |
|---|---|
| C에서 메모리 사용량을 줄이기 위한 모범 사례는 무엇입니까? (0) | 2023.06.19 |
| 를 사용하는 실제 타임스팬 개체입니다.몇 년 & .몇달. (0) | 2023.06.14 |
| Angular2 rc1의 라우팅을 기준으로 요소 숨기기 (0) | 2023.06.14 |
| HOC 대응 및 TypeScript 3.2 (0) | 2023.06.14 |