কীভাবে আমি স্ক্রিপ্টটি চালিয়ে যাওয়ার আগে অপেক্ষা করতে পারি?


3

আমি এই অসাধারণ VBA স্ক্রিপ্টটি খুঁজে পেয়েছি যা একটি ঠিকানা নেয় এবং Google এর মানচিত্র API ব্যবহার করে অক্ষাংশ এবং দ্রাঘিমাংশটি ফেরত দেয়। যাইহোক, গুগল হার-সীমাবদ্ধ বৈশিষ্ট্য রয়েছে, এবং আমি এটি বড় সংখ্যক ঠিকানাগুলির জন্য করতে চাই (প্রায় 3 মিলিয়ন)। অন্যদিকে, স্ক্রিপ্টটি কোন হার-সীমাবদ্ধতা নেই, বরং তাদের সামঞ্জস্যপূর্ণ করে তোলে। এই স্ক্রিপ্টটি সম্পাদনা করা কি সম্ভব যে এটি পূর্ববর্তী অনুরোধটি শেষ না হওয়া পর্যন্ত পরবর্তী কক্ষে চলে না?

    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

কোন সাহায্য ব্যাপকভাবে প্রশংসা করা হবে, আপনি বলছি সেরা!


3
এই কোডটি ব্যবহার করার জন্য ফাংশন সরবরাহ করে কিন্তু আসলে নিজে নিজে কিছু করে না। আপনি এই ফাংশন কল করতে ব্যবহার করছেন যাই হোক না কেন আপনি সীমিত হার প্রয়োগ করতে হবে।
qasdfdsaq

আপনি এই ফাংশন ব্যবহার যেখানে কোড অন্তর্ভুক্ত করুন
thilina R

উত্তর:


1

আপনি যে কোডটি পোস্ট করেছেন সেটি কেবল এক্সেলকে Google মানচিত্রের সাথে কীভাবে জিজ্ঞাসা করা যায় তা আসলেই এটি করে না - আপনাকে কল করতে হবে MyGeocode ফাংশন এবং এক্সেল যা আপনি জিজ্ঞাসা করতে চান ঠিকানা।

প্রথম প্রেস অল্টার + + F11 ভিসুয়াল বেসিক এডিটর (ভিবিই) অ্যাক্সেস করতে। বাম প্যানেলে আপনার ওয়ার্কবুকের নামটি ডান-ক্লিক করুন এবং নির্বাচন করুন সন্নিবেশ করুন & gt; মডিউল । এই নতুন মডিউলে ভিবিএ আটকান।

এই কোডটি চালানোর জন্য আপনাকে একটি রেফারেন্স যুক্ত করতে হবে মাইক্রোসফ্ট এক্সএমএল, v6.0 গ্রন্থাগার। ভিবিই তে ক্লিক করুন সরঞ্জামসমূহ করুন & gt; তথ্যসূত্র , নিচে স্ক্রোল করুন এবং লাইব্রেরির পাশে বাক্সে টিক দিন। ঠিক আছে ক্লিক করুন।

এখন এক্সেল নিজেই ফিরে।

ধরুন আপনার কলাম A: D এ আপনার 3 মিলিয়ন ঠিকানাগুলির উপসেট আছে।

enter image description here

কলাম E এ আপনার সমস্ত ঠিকানা ক্ষেত্রকে সংযোজন করুন যাতে আপনি একটি সেলে পুরো ঠিকানাটি পেতে পারেন:

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

তারপর কলাম এ-এ আমরা গুগল থেকে কোঅর্ডিনেটসকে নিম্নরূপ কল করতে পারি:

=MyGeocode(E2)

এক্সেলগুলিকে কলগুলির মধ্যে বিরতিতে বলার প্রয়োজন নেই - আপনি এটি অ্যাক্সেস চালানোর বার বলার দ্বারা এটি নিয়ন্ত্রণ করেন =MyGeocode() - অর্থাত্ এক্সেলের কতগুলি সারি আপনি সূত্রটি অনুলিপি করেন।

নিরাপদ হতে, এটি অনুসরণ করার জন্য প্রতিদিন ২500 টির বেশি লাইনে চালান গুগল এর টি & সিএস (ধন্যবাদ শেঠ), যতক্ষণ না আপনি প্রতিদিন 100,000 কল করতে পারবেন এমন সংখ্যায় নগদ অর্থ ব্যয় করতে ইচ্ছুক।


1
এটা হতে পারে মনে হচ্ছে এই বিশেষ API: 2.5k প্রিমিয়াম 100 কে একটি দিনের অনুরোধ। যদি এটি সঠিক সংখ্যা হয় তবে আপনি ক্রেডিট ক্রয় না করলে 1২00 থেকে 30 দিনের মধ্যে সময় লাগবে।
Seth

ভাল সন্ধান। আমি সেই অনুযায়ী সম্পাদনা করব।
Andi Mohr

আপনার সাহায্যের জন্য আপনাকে অনেক ধন্যবাদ, এবং আমি T & Cs এর সাথে সঙ্গতিপূর্ণ মনে রাখতে চাইলে হারকে সীমিত রাখব। আপনার সাহায্য সত্যিই প্রশংসা করা হয়।
Lukas Ljungstrom

0

আপনি নিম্নলিখিত হিসাবে 5 সেকেন্ড, বলে, ভিবিএ একটি প্রোগ্রাম স্থগিত করতে পারেন:

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

যা আপনার জন্য কাজ করতে পারে


আরে আমি যে খুঁজছেন তা ঠিক মত মনে হয়; কিন্তু আপনি প্রোগ্রামে যথোপযুক্ত সৃষ্টিকর্তা রাখতে পারেন - আমি মোট শিক্ষিকা! :)
Lukas Ljungstrom

এটি আপনি পোস্ট কোড কোন অন্তর্গত না।
Seth

এর অর্থ কি আমি সেই পদ্ধতি ব্যবহার করতে পারি না?
Lukas Ljungstrom

আপনি এটি ব্যবহার করতে পারেন আপনার কোড শুধুমাত্র একটি ফাটল এবং সাধারণত আপনি যে কোড থেকে বলা হয় যে লুপ এটি রাখা হবে।
Seth

0

আপনার যদি তিন মিলিয়ন ঠিকানা থাকে তবে আপনি বাণিজ্যিক অ্যাক্সেস পেতে বিবেচনা করতে পারেন যা আপনাকে সীমিত হার ব্যতীত পরিষেবাটি ব্যবহার করতে দেয়। অন্যথা ভালো কিছু ব্যবহার করুন:

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

থেকে হিসাবে ব্যবহারের শর্তাবলী :

ঘ। এপিআই সীমাবদ্ধতা

Google আমাদের নিজস্ব বিবেচনার ভিত্তিতে API এর ব্যবহার (যেমন API তৈরির অনুরোধগুলিকে আপনি সীমিত করতে অথবা ব্যবহারকারীদের সংখ্যা সরবরাহ করতে) সীমিত করে সীমাবদ্ধ করে এবং প্রয়োগ করে। আপনি সম্মত হন, এবং প্রতিটি API এর সাথে নথিভুক্ত সীমাবদ্ধতাগুলি রোধ করার চেষ্টা করবেন না। আপনি যদি এই সীমার বাইরে কোনো API ব্যবহার করতে চান তবে আপনাকে অবশ্যই Google এর স্পষ্ট সম্মতিটি গ্রহন করতে হবে (এবং অতিরিক্ত ব্যবহারের শর্তাবলী এবং / অথবা সেই ব্যবহারের জন্য চার্জগুলিতে Google আপনার অনুরোধের শর্ত বা শর্ত স্বীকার করে নেবে)। এই ধরনের অনুমোদন পেতে, তথ্যের জন্য প্রাসঙ্গিক Google API টি দলের সাথে যোগাযোগ করুন (উদাঃ Google ডেভেলপার কনসোল ব্যবহার করে)।


দ্রুত প্রতিক্রিয়ার জন্য ধন্যবাদ, আমি মনে করি না যে আমাকে কমিক্যাল অ্যাক্সেসের প্রয়োজন হবে, এটি কেবল কয়েক দিনের জন্য চলতে পারে এবং সম্পন্ন হতে পারে; তবে, ম্যানুয়ালি ক্লিক করলে নিজে নিজে সীমাবদ্ধ করার জন্য কোন উপায় আছে? উপরন্তু, আমি যদি কোডটিতে এটি যোগ করে থাকি তবে আমি সত্যিই কৃতজ্ঞ থাকব, আমি যে নওব হিসাবে আছি, আমার কোনও ধারণা নেই যে আমি সেই লাইনটিকে পুরো জগাখিচুড়িতে রাখব যেখানে আমার ইতিমধ্যে কোড রয়েছে। ধন্যবাদ আবার শেঠ!
Lukas Ljungstrom

তিন মিলিয়ন এন্ট্রি একটি ডেটাসেট সঙ্গে আপনি সম্ভবত একটি কমিক্যাল ব্যবহারকারী হয়। পাশাপাশি যে কি এবং কি করতে শিখতে প্রোগ্রামিং সম্পর্কে একটি বই নিতে। Superuser আপনার জন্য কাজ করার জন্য জিজ্ঞাসা করার জায়গা নয়। আসলে এটি স্ট্যাকওভারফ্লোতে থাকা উচিত এবং এমনকি এই ভাবে জিজ্ঞাসা করাও ভুল হবে। "জগাখিচুড়ি" কোথাও থেকে কপি করা হয়। যান এবং এটা কি শেখার শুরু।
Seth

আমি সঠিকভাবে জিজ্ঞাসা করছি না যদি আমি দুঃখিত এবং যদি আমাকে এই রকম অনেক কিছু করতে হয় তবে অবশ্যই আমি শিখব। তবে এক অনুরোধের জন্য কিভাবে কোড করবেন তা শিখতে আমার জন্য এটি বিশেষভাবে কার্যকর নয়? আপনি এবং CallumDA3 মাত্র কয়েক মুহুর্ত আগে সাহায্য করার জন্য খুশি মনে হয়েছিল, আমি আপনাকে বিরক্ত করার জন্য দুঃখিত।
Lukas Ljungstrom

আপনি সঠিক উপায় জিজ্ঞাসা করা হয়। কিন্তু আপনি মূলত জিজ্ঞাসা করছেন "আমার এই কাজ আছে, কেউ কি আমার জন্য এটি বিনামূল্যে করবে?"। আপনি এই বেতন কেউ এটা করতে ব্যয় করার সময় না থাকে। আপনি তিন মিলিয়ন এন্ট্রি একটি ডেটা সেট সম্পর্কে কথা বলছেন (ইউরোপীয় মান assuming) যে 3.000.000 এন্ট্রি। এটি শুধুমাত্র কিছুটা গুরুতর কাজ হলেও আপনাকে একবার এটি করতে হবে!
Seth
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.