Nikolas는 정기적으로 외부 데이터를 검색하는 웹 쿼리를 개발했습니다. 문제는 웹 쿼리를 실행할 때 “웹 페이지를 열 수 없습니다 …​”라는 오류 메시지가 자주 나타난다는 것입니다. 이 메시지는 Nikolas와 웹 서버 사이의 인터넷 연결이 약간 중단 될 때 나타나며 Excel을 계속하려면 오류 메시지에서 확인을 클릭해야합니다.

이것은 Nikolas가 컴퓨터에서 멀리 떨어져있을 때 문제가됩니다. 웹 쿼리가 모든 데이터를 수집하지 않아서 문제가 발생했을 때 OK 버튼을 클릭하기를 참을성있게 기다리고 있다는 의미 일 수 있기 때문입니다. Nikolas는 웹 쿼리에 메시지를 표시하지 않고 현재 시도에서 연결할 수없는 경우 대기 상태로 돌아가도록 지시하는 방법을 원합니다.

불행히도 Excel에 원하는 작업을 수행하도록 지시 할 수있는 방법이 없습니다. “웹 페이지를 열 수 없습니다 …​”메시지가 나타나면 메시지를 억제하는 것이 사실상 불가능합니다. 유일한 해결책은 문제를 해결하는 매크로를 만드는 것입니다. 예를 들어 웹 페이지에 도달하는 오류를 테스트하기 위해 문제가없는 Internet Explorer 인스턴스를 만드는 매크로를 개발할 수 있습니다.

다음 매크로는이 접근 방식을 구현합니다.

Option Explicit 'Declare Sleep API Private Declare Sub Sleep Lib "kernel32" (ByVal nMilliseconds As Long)



Function GetData(strStartURL As String) As String     Dim Attempt As Long     Dim Connected As Boolean     Dim ieDocNew As MSHTML.HTMLDocument

GetData = "N/A"

Attempt = 0

retry:

Attempt = Attempt + 1

'Create browser object references and open an IE window     Dim ieNew As New InternetExplorer     'Load page     With ieNew         .Visible = True       'show window         .navigate strStartURL 'open page         While Not .readyState = READYSTATE_COMPLETE             Sleep 500         'wait 1/2 sec before trying again         Wend     End With

'The page should be open in IE, time for parsing     'Create document object model references     Set ieDocNew = ieNew.Document

If ieDocNew.Scripts.Length = 13 _       And ieNew.LocationName = "Microsoft Excel Tips" _       Then         Connected = True         GetData = "Data successfully captured"



'This is where you do something with the data     End If

'Clean up IE objects     Set ieDocNew = Nothing     ieNew.Quit     Set ieNew = Nothing     DoEvents     If Attempt < 10 And Not Connected Then GoTo retry End Function

이 매크로가 제대로 작동하려면 VBA 인터페이스 내에서 일부 구성이 필요합니다. 특히 도구 메뉴에서 참조를 선택하고 프로젝트에 Microsoft HTML 개체 라이브러리 및 Microsoft 인터넷 컨트롤에 대한 참조가 포함되어 있는지 확인해야합니다.

매크로가하는 일은 IE를 사용하여 함수 (strStartURL에서)에 전달 된 URL에 연결 한 다음 거기에서 발견되는 콘텐츠를 가져 오는 것입니다.

연결에 성공하면 Connected가 True로 설정되고 사이트에서 데이터를 구문 분석하고 사용할 수 있습니다. 이 함수는 작성된대로 “데이터가 성공적으로 캡처 됨”을 호출 루틴으로 다시 전달하지만 원격 사이트에서 가져온 일부 값을 쉽게 다시 전달할 수 있습니다. 그런 다음이 값을 워크 시트에 채울 수 있지만 호출 루틴은 워크 시트에 넣습니다.

또한이 함수는 캡처 한 페이지에서 기본적인 구문 분석을 수행하고 URL에서 찾은 페이지 제목에서 예상되는 단어를 찾은 경우에만 연결이 성공한 것으로 간주합니다.

매크로의 작동 방식을 이해하려면 다음과 같은 일부 매크로를 사용하십시오.

Sub TEST_GetData1()

MsgBox GetData("http://excel.tips.net")

End Sub
Sub TEST_GetData2()

MsgBox GetData("http://excel.tipsxx.net")

End Sub
Sub TEST_GetData3()

MsgBox GetData("http://excel.tips.net/junk")

End Sub

첫 번째는 작동합니다. 두 번째 두 개는 “N / A”라는 메시지를 표시해야합니다.

_ 참고 : _

이 페이지 (또는 ExcelTips 사이트의 다른 페이지)에 설명 된 매크로를 사용하는 방법을 알고 싶다면 유용한 정보가 포함 된 특별 페이지를 준비했습니다.

link : / excelribbon-ExcelTipsMacros [새 브라우저 탭에서 특별 페이지를 열려면 여기를 클릭하세요].

_ExcelTips_는 비용 효율적인 Microsoft Excel 교육을위한 소스입니다.

이 팁 (10525)은 Microsoft Excel 2007 및 2010에 적용됩니다.