תודה על השיתוף.
וכעת להערות
ראשית כמה הערות כלליות שלא קשורות דוקא (אבל בהחלט גם) לקובץ המוכחי שהעלת:
1. כדאי מאוד מאוד מאוד (ושוב פעם מאוד) להקפיד על הזחה (indentation בלע"ז) מתאימה לקוד. ההזחה מקילה על הקריאה וההבנה ומונעת הרבה מאוד שגיאות תחביר ובאגים.יש כלי נפלא להזחה אוטומטית, ניתן להוריד אותו
כאן. בגירסאות האחרונות ההתקנה שלו טיפה מסובכת (תשאל כאן בפורום אם צריך

) אבל הוא שוה את זה. כשתתרגל לא תבין איך הסתדרת בלעדיו.
2. כדאי מאוד לשמור על מוסכמות למתן שמות לאובייקטים ופקדים. לא חשוב כ"כ מה הסגנון, אתה יכול אפי' לפתח סגנון משלך (אם כי לדעתי מומלץ להיצמד לקיים כדי האחרים יבינו את הקוד שלך) אבל חשוב שהוא יהיה עקבי. דבר זה עוזר לקורא להבין את הלוגיקה והזרימה של האלגוריתם, וגם מונע טעויות טפשיות רבות. הנה כמה קישורים העוסקים בנושא:
https://msdn.microsoft.com/en-us/library/aa263493(v=vs.60).aspx
https://en.wikipedia.org/wiki/Leszynski_naming_convention
http://ss64.com/access/syntax-naming-variables.html
http://www.xoc.net/standards/rvbanc.asp#Access
3. יש להקפיד על הצהרת משתנים. זה טוב לביצועים (משתנה שלא הוצהר הוא מסוג variant) שצורך יותר זכרון ואיטי יותר בביצועים, וגם מונע טעויות טפשיות רבות. ע"מ להכריח הצהרת משתנים (מומלץ בחום), בראש כל מודול יש להוסיף את צמד המילים Option Explicit. ניתן לשנות הגדרה בVBE כדי שזה יקרה אוטומטית (בתוך הVBE מתפריט tools>>options לוודא ש require variable declaration מסומן).
4. כדאי לתת לפקדים ואובייקטים שמות בעלי משמעות, כך שהקורא את הקוד יבין מה ומתי עושה כל קוד. במקרה שלך יש רק שני אירועים כך שלא קשה לנחש למה בדיוק משמש כל אחד מהם, אבל בפרוייקטים גדולים שיכולים להיות עשרות או מאות הקורא יאבד את ידיו ורגליו.
5. את השמות לפקדים ואובייקטים רצוי לכתוב באותיות לועזיות, מאוד קשה לקרוא קוד ארוך שמשולב באנגלית ועברית (במיוחד בשאילתות או בקבוצות קוד ארוכות).
6. הזכרון למשתנים מוקצה לפני שהקוד עצמו רץ, כך שאין הגיון להצהיר על משתנה באמצע הקוד. הצהרת משתנים בתחילת הקוד בלבד, לביצועים טובים יותר ולמעם הסדר הטוב.
וכעת לכמה הערות ספציפיות לקובץ שהעלת (אני לא מדבר על החסרונות שבודאי שמת לב אליהן והחלטת להתעלם, לדוגמא שאין לך שדה כניסה (יש מקומות בארץ שלכל בנין יש מיקוד שונה), או שאתה לא מחזיר תשובה מדוייקת במקרה של שגיאה מלבד התשובה הלאקונית לא אותר מיקוד לכתובת הנוכחית):
1. עובדתית, ברוב המקרים שניסיתי את הדוגמא שלך, המיקוד לא הוחזר נכון, השורה mikud = Mid(mikud, 49, 8) לא עושה את מה שציפית. (מה עוד שהמיקוד אמור להיות 7 ספרות ואילו כאן אתה מחזיר 8 תוים). לדעתי הפונקציה הבאה היא הדרך הכי קלה ונקיה להוציא את המיקוד מהHTML:
קוד:
Function fGetZip(strResponse As String) As String
With CreateObject("VBScript.RegExp")
.Pattern = "RES[0-9]+"
If .Test(strResponse) Then
fGetZip = Right(.Execute(strResponse)(0), 7)
End If
End With
End Function
2. לאיחזור הHTML בחרת להשתמש עם האינטרנט אקספלורר (MSXML2.XMLHTTP), החסרונות בזה הם כדלהלן:
א. לא לכל מחשב יש אינטרנט אקספלורר
ב. הקוד צריך להמתין לטעינת הדף ולאחר מכן לבדוק את הסטטוס.
הייתי ממליץ במקום זה להשתמש עם האפשרות המובנה בתוך וינדוס, הנה דוגמא:
קוד:
Dim objHttpRequest As Object
Dim strResponse As String
Set objHttpRequest = CreateObject("WinHttp.WinHttpRequest.5.1")
objHttpRequest.Open "GET", strUrl
objHttpRequest.Send
strResponse = oHttpRequest.responseText
Set objHttpRequest = Nothing
אגב, שים לב למרווחים בין השורות, הם לא מקריים, הם מחלקים בין קבוצות הפעולות.
ושוב לסיום, תודה על השיתוף.