계속하기 전에 스크립트를 기다리게 하려면 어떻게 해야 합니까?

계속하기 전에 스크립트를 기다리게 하려면 어떻게 해야 합니까?

Google의 지도 API를 사용하여 주소를 가져와 위도와 경도를 반환하는 환상적인 vba 스크립트를 발견했습니다. 그러나 Google에는 속도 제한 기능이 있으며 많은 수의 주소(약 3mil)에 대해 이 기능을 수행하고 싶습니다. 반면에 스크립트에는 속도 제한이 없으므로 호환되지 않습니다. 이전 요청이 완료될 때까지 다음 셀로 이동하지 않도록 이 스크립트를 편집할 수 있습니까?

    Function MyGeocode(address As String) As String
  Dim strAddress As String
  Dim strQuery As String
  Dim strLatitude As String
  Dim strLongitude As String
  strAddress = URLEncode(address)
  'Assemble the query string
  strQuery = "http://maps.googleapis.com/maps/api/geocode/xml?"
  strQuery = strQuery & "address=" & strAddress
  strQuery = strQuery & "&sensor=false"
  'define XML and HTTP components
  Dim googleResult As New MSXML2.DOMDocument60
  Dim googleService As New MSXML2.XMLHTTP60
  Dim oNodes As MSXML2.IXMLDOMNodeList
  Dim oNode As MSXML2.IXMLDOMNode
  'create HTTP request to query URL - make sure to have
  'that last "False" there for synchronous operation
  googleService.Open "GET", strQuery, False
  googleService.send
  googleResult.LoadXML (googleService.responseText)
  Set oNodes = googleResult.getElementsByTagName("geometry")
  If oNodes.Length = 1 Then
    For Each oNode In oNodes
      strLatitude = oNode.ChildNodes(0).ChildNodes(0).Text
      strLongitude = oNode.ChildNodes(0).ChildNodes(1).Text
      MyGeocode = strLatitude & "," & strLongitude
    Next oNode
  Else
    MyGeocode = "Not Found (try again, you may have done too many too fast)"
  End If
End Function
Public Function URLEncode(StringVal As String, Optional SpaceAsPlus As Boolean = False) As String
  Dim StringLen As Long: StringLen = Len(StringVal)
  If StringLen > 0 Then
    ReDim result(StringLen) As String
    Dim i As Long, CharCode As Integer
    Dim Char As String, Space As String
    If SpaceAsPlus Then Space = "+" Else Space = "%20"
    For i = 1 To StringLen
      Char = Mid$(StringVal, i, 1)
      CharCode = Asc(Char)
      Select Case CharCode
      Case 97 To 122, 65 To 90, 48 To 57, 45, 46, 95, 126
        result(i) = Char
      Case 32
        result(i) = Space
      Case 0 To 15
        result(i) = "%0" & Hex(CharCode)
      Case Else
        result(i) = "%" & Hex(CharCode)
      End Select
    Next i
    URLEncode = Join(result, "")
  End If
End Function

어떤 도움이라도 대단히 감사하겠습니다. 여러분은 최고입니다!

답변1

게시한 코드는 단순히 Excel에 Google 지도를 쿼리하는 방법을 알려줄 뿐 실제로는 그렇게 하지 않습니다. 함수를 호출 MyGeocode하고 Excel에 쿼리할 주소를 알려 주어야 합니다.

먼저 Alt+를 눌러 F11VBE(Visual Basic Editor)에 액세스합니다. 왼쪽 패널에서 통합 문서 이름을 마우스 오른쪽 버튼으로 클릭하고끼워 넣다>기준 치수. VBA를 이 새 모듈에 붙여넣습니다.

이 코드를 실행하려면마이크로소프트 XML, v6.0도서관. VBE에서 클릭도구>참고자료, 아래로 스크롤하여 라이브러리 옆에 있는 상자를 선택합니다. 확인을 클릭하세요.

이제 Excel 자체로 돌아갑니다.

A:D 열에 300만 개의 주소 하위 집합이 있다고 가정해 보겠습니다.

여기에 이미지 설명을 입력하세요

E 열에서 모든 주소 필드를 연결하여 전체 주소를 하나의 셀에 표시합니다.

=A2&" "&B2&" "&C2&" "&D2

그런 다음 F열에서 다음과 같이 Google의 좌표를 호출할 수 있습니다.

=MyGeocode(E2)

호출 사이에 Excel에게 일시 중지를 지시할 필요가 없습니다. Excel에 실행을 지시한 횟수, =MyGeocode()즉 Excel에서 수식을 복사한 행 수에 따라 이를 제어할 수 있습니다.

안전을 위해 하루에 2,500개 이하의 라인에서 이를 실행하여 규정을 준수하세요.Google 이용약관(Seth에게 감사드립니다) 하루에 걸 수 있는 통화 수를 100,000으로 늘리기 위해 현금을 기꺼이 쓰지 않는 한.

답변2

다음과 같이 VBA가 5초 동안 프로그램을 중지하도록 할 수 있습니다.

Application.Wait(Now + TimeValue("0:00:05")) 

어느 것이 당신에게 도움이 될 수 있습니까?

답변3

300만 개의 주소가 있는 경우 속도 제한 없이 서비스를 사용할 수 있는 상업적 액세스를 얻는 것을 고려할 수 있습니다. 그렇지 않으면 다음과 같은 것을 사용하십시오:

Msgbox "Click to go on", , "Example"

에서와 같이이용약관:

디. API 제한

Google은 단독 재량에 따라 귀하의 API 사용에 대한 제한(예: 귀하가 수행할 수 있는 API 요청 수 또는 귀하가 제공할 수 있는 사용자 수 제한)을 설정하고 시행합니다. 귀하는 각 API에 문서화된 제한 사항에 동의하며 이를 회피하려고 시도하지 않습니다. 이러한 제한을 초과하여 API를 사용하려면 Google의 명시적인 동의를 받아야 합니다. Google은 해당 요청을 거부하거나 해당 사용에 대한 추가 약관 및/또는 요금에 대한 동의를 조건으로 수락할 수 있습니다. 승인을 받으려면 관련 Google API 팀에 문의하세요(예: Google 개발자 콘솔 사용).

관련 정보