קבלת שער הדולר באקסס באמצעות פונקציה

FullTime

משתמש מקצוען
יש כאן קוד.

דבר ראשון, תודה רבה מוישי.
אני משתמש עם הפונקציה הזאת GetBankOfIsraelExchangeRate ?


הוא מחזיר שגיאה 13 של אי התאמת סוג והפונקציה הנ"ל מקבלת ערך 0
איך אני אמור להשתמש איתו, אולי הבעיה בי....
 

moishy

משתמש סופר מקצוען
מנוי פרימיום
תוקן במקור.
 

יאיר משה

משתמש פעיל
מנוי פרימיום
בוגר/תלמיד פרוג
איך משתמשים בפונקציה זאת?
תודה
 

FullTime

משתמש מקצוען
דוגמה:
לחצן 'קבל שער הדולר'
תיבת טקסט 'טקסט0'

הגדרת הלחצן 'בעת לחיצה'
קוד:
טקסט0 = GetBankOfIsraelExchangeRate()
 

moishy

משתמש סופר מקצוען
מנוי פרימיום
הנה גרסא משופרת ובו כמה תיקונים

קוד:
Option Explicit

Public Declare Function InternetGetConnectedState Lib "wininet.dll" (lpdwFlags As Long, ByVal dwReserved As Long) As Boolean

Public Function GetNISExchangeRate(Optional dtDate As Date = #1/1/1900#, Optional strCurr As String = "01") As Double

    Dim strURL As String
    Dim strResult As String
    Dim pos As Long
    Dim strSearch As String
    Dim dtPreviousDate As Date
    Dim i As Integer

    strSearch = Chr(60) & "RATE" & Chr(62)

    If dtDate = #1/1/1900# Then
        dtDate = Date
    End If

    Select Case strCurr
        Case "01", "02", "03", "05", "06", "12", "17", "18", "27", "28", "31", "69", "70", "79"
        Case Else
            MsgBox "קוד מטבע לא חוקי!", vbCritical + vbMsgBoxRtlReading + vbMsgBoxRight
            Exit Function
    End Select

    If IsConnected Then
        strURL = "http://www.boi.org.il/currency.xml?rdate=" & Format(IIf(dtPreviousDate > 1, dtPreviousDate, dtDate), "YYYYMMDD") & "&curr=" & strCurr
        strResult = GetHTML(strURL)
        If InStr(1, strResult, strSearch) < 1 Then
            For i = 1 To 6
                dtPreviousDate = dtDate - i
                strURL = "http://www.boi.org.il/currency.xml?rdate=" & Format(dtPreviousDate, "YYYYMMDD") & "&curr=" & strCurr
                strResult = GetHTML(strURL)
                If InStr(1, strResult, strSearch) > 0 Then Exit For
            Next i
        End If
    Else
        MsgBox "לא זוהה חיבור לאינטרמת!", vbCritical + vbMsgBoxRtlReading + vbMsgBoxRight
    End If

    If Len(strResult) > 0 Then
        pos = InStr(1, strResult, strSearch, vbTextCompare)
        If pos > -1 Then
            GetNISExchangeRate = Mid(strResult, pos + Len(strSearch), 5)
        End If
    End If
    
End Function

Function IsConnected() As Boolean
    Dim Stat As Long
    IsConnected = (InternetGetConnectedState(Stat, 0&) <> 0)
End Function

Function GetHTML(strURL As String) As String
    Dim HTML As String
    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", strURL, False
        .Send
        GetHTML = .ResponseText
    End With
End Function
 

FullTime

משתמש מקצוען
מה השדרוג שלו, לפי מה שנראה לי, לפני נסיון, אפשר לבחור מטבע?
 

moishy

משתמש סופר מקצוען
מנוי פרימיום
גם בגירסא הקודמת אפשר לבחור תאריך ומטבע.

להלן השינויים:

1. בדיקה שקוד המטבע תקין, אם לא - יציאה מהפוקציה.
2. dtPreviousDate > 1 במקום Not IsNothing(dtPreviousDate).
3. הוספת vbMsgBoxRtlReading + vbMsgBoxRight לMsgBox
 

HUBHCBH

משתמש מקצוען
אוטומציה עסקית
למה לא מסתדר לי?
 

קבצים מצורפים

  • תמונה1.png
    KB 157.3 · צפיות: 6

moishy

משתמש סופר מקצוען
מנוי פרימיום
תוקן.
 

HUBHCBH

משתמש מקצוען
אוטומציה עסקית
איך אני קורא לפונקציה של דולר?
 

moishy

משתמש סופר מקצוען
מנוי פרימיום
שיניתי את שם הפונקציה, כיון שלמען הדיוק הוא מציג רק את השערים ביחס לשקל. שם הפונקציה היא .GetNISExchangeRate
 

יאיר משה

משתמש פעיל
מנוי פרימיום
בוגר/תלמיד פרוג
בכל מחשב שאני פותח את הפונקציה הזאת יש הודעת שגיאה.
אולי מישהו יודע למה?
תודה
 

קבצים מצורפים

  • לכידה.JPG
    KB 78.6 · צפיות: 6

moishy

משתמש סופר מקצוען
מנוי פרימיום
מה הודעת השגיאה?
 

יאיר משה

משתמש פעיל
מנוי פרימיום
בוגר/תלמיד פרוג
צרפתי
תודה.
 

קבצים מצורפים

  • לכידה.JPG
    KB 24.6 · צפיות: 5

moishy

משתמש סופר מקצוען
מנוי פרימיום
תשנה את הספרה 5 בסוף השורה ל 4.
 

יאיר משה

משתמש פעיל
מנוי פרימיום
בוגר/תלמיד פרוג
אין צורך לשנות, זה חזר לעבוד.
כנראה היתה בעיה באתר בנק ישראל.
תודה רבה מאוד.
 

moishy

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

moishy

משתמש סופר מקצוען
מנוי פרימיום
לחילופין ניתן (ורצוי להשתמש בגירסה זו)
קוד:
Option Explicit

Public Declare Function InternetGetConnectedState Lib "wininet.dll" (lpdwFlags As Long, ByVal dwReserved As Long) As Boolean

Public Function GetNISExchangeRate(Optional dtDate As Date = #1/1/1900#, Optional strCurr As String = "01") As Double

    Dim strURL As String
    Dim strResult As String
    Dim pos As Long
    Dim strSearch As String
    Dim dtPreviousDate As Date
    Dim i As Integer

    strSearch = Chr(60) & "RATE" & Chr(62)

    If dtDate = #1/1/1900# Then
        dtDate = Date
    End If

    Select Case strCurr
        Case "01", "02", "03", "05", "06", "12", "17", "18", "27", "28", "31", "69", "70", "79"
        Case Else
            MsgBox "קוד מטבע לא חוקי!", vbCritical + vbMsgBoxRtlReading + vbMsgBoxRight
            Exit Function
    End Select

    If IsConnected Then
        strURL = "http://www.boi.org.il/currency.xml?rdate=" & Format(IIf(dtPreviousDate > 1, dtPreviousDate, dtDate), "YYYYMMDD") & "&curr=" & strCurr
        strResult = GetHTML(strURL)
        If InStr(1, strResult, strSearch) < 1 Then
            For i = 1 To 6
                dtPreviousDate = dtDate - i
                strURL = "http://www.boi.org.il/currency.xml?rdate=" & Format(dtPreviousDate, "YYYYMMDD") & "&curr=" & strCurr
                strResult = GetHTML(strURL)
                If InStr(1, strResult, strSearch) > 0 Then Exit For
            Next i
        End If
    Else
        MsgBox "לא זוהה חיבור לאינטרמת!", vbCritical + vbMsgBoxRtlReading + vbMsgBoxRight
    End If

    If Len(strResult) > 0 Then
        pos = InStr(1, strResult, strSearch, vbTextCompare)
        If pos > -1 Then
            GetNISExchangeRate = ExtractNumber(Mid(strResult, pos + Len(strSearch), 5))    ' / 1000
        End If
    End If

End Function

Function IsConnected() As Boolean
    Dim Stat As Long
    IsConnected = (InternetGetConnectedState(Stat, 0&) <> 0)
End Function

Function GetHTML(strURL As String) As String
    Dim HTML As String
    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", strURL, False
        .Send
        GetHTML = .ResponseText
    End With
End Function

Function ExtractNumber(strText As String)
    Dim iCount As Integer, i As Integer
    Dim lNum As String

    For iCount = Len(strText) To 1 Step -1
        If IsNumeric(Mid(strText, iCount, 1)) Then
            i = i + 1
            lNum = Mid(strText, iCount, 1) & lNum
        Else
            If Mid(strText, iCount, 1) = Chr(46) Then
                i = i + 1
                lNum = Mid(strText, iCount, 1) & lNum
            End If
        End If
        If i = 1 Then lNum = CDbl(Mid(lNum, 1, 1))
    Next iCount

    ExtractNumber = CDbl(lNum)
End Function
 

אולי מעניין אותך גם...

הפרק היומי

הפרק היומי! כל ערב פרק תהילים חדש. הצטרפו אלינו לקריאת תהילים משותפת!


תהילים פרק קלב

א שִׁיר הַמַּעֲלוֹת זְכוֹר יְהוָה לְדָוִד אֵת כָּל עֻנּוֹתוֹ:ב אֲשֶׁר נִשְׁבַּע לַיהוָה נָדַר לַאֲבִיר יַעֲקֹב:ג אִם אָבֹא בְּאֹהֶל בֵּיתִי אִם אֶעֱלֶה עַל עֶרֶשׂ יְצוּעָי:ד אִם אֶתֵּן שְׁנַת לְעֵינָי לְעַפְעַפַּי תְּנוּמָה:ה עַד אֶמְצָא מָקוֹם לַיהוָה מִשְׁכָּנוֹת לַאֲבִיר יַעֲקֹב:ו הִנֵּה שְׁמַעֲנוּהָ בְאֶפְרָתָה מְצָאנוּהָ בִּשְׂדֵי יָעַר:ז נָבוֹאָה לְמִשְׁכְּנוֹתָיו נִשְׁתַּחֲוֶה לַהֲדֹם רַגְלָיו:ח קוּמָה יְהוָה לִמְנוּחָתֶךָ אַתָּה וַאֲרוֹן עֻזֶּךָ:ט כֹּהֲנֶיךָ יִלְבְּשׁוּ צֶדֶק וַחֲסִידֶיךָ יְרַנֵּנוּ:י בַּעֲבוּר דָּוִד עַבְדֶּךָ אַל תָּשֵׁב פְּנֵי מְשִׁיחֶךָ:יא נִשְׁבַּע יְהוָה לְדָוִד אֱמֶת לֹא יָשׁוּב מִמֶּנָּה מִפְּרִי בִטְנְךָ אָשִׁית לְכִסֵּא לָךְ:יב אִם יִשְׁמְרוּ בָנֶיךָ בְּרִיתִי וְעֵדֹתִי זוֹ אֲלַמְּדֵם גַּם בְּנֵיהֶם עֲדֵי עַד יֵשְׁבוּ לְכִסֵּא לָךְ:יג כִּי בָחַר יְהוָה בְּצִיּוֹן אִוָּהּ לְמוֹשָׁב לוֹ:יד זֹאת מְנוּחָתִי עֲדֵי עַד פֹּה אֵשֵׁב כִּי אִוִּתִיהָ:טו צֵידָהּ בָּרֵךְ אֲבָרֵךְ אֶבְיוֹנֶיהָ אַשְׂבִּיעַ לָחֶם:טז וְכֹהֲנֶיהָ אַלְבִּישׁ יֶשַׁע וַחֲסִידֶיהָ רַנֵּן יְרַנֵּנוּ:יז שָׁם אַצְמִיחַ קֶרֶן לְדָוִד עָרַכְתִּי נֵר לִמְשִׁיחִי:יח אוֹיְבָיו אַלְבִּישׁ בֹּשֶׁת וְעָלָיו יָצִיץ נִזְרוֹ:
נקרא  29  פעמים

אתגר AI

תקווה לעתיד טוב יותר • אתגר 17

לוח מודעות

למעלה