@Y-Excel-Access אכן במקרה כזה הקוד לא יעבוד.
אמנם הוא לא מחזיר שגיאה, אבל גם לא את הערך המבוקש.
ארי
-
קבלת ערך Enum ממספר - VBA -
שערים יציגים מבנק ישראל - VBA אקססערב טוב.
לאחר עדכון הAPI של בנק ישראל לקבלת שערי חליפין, יצרתי קוד VBA לקבלת הנתונים העדכניים.
מצורף לתועלת הציבור, וכמובן אשמח לכל הערה!Option Compare Database Option Explicit Public Enum StrCurr USD = 1 GBP = 2 SEK = 3 CHF = 4 CAD = 5 NZD = 6 DKK = 7 SGD = 8 HKD = 9 ZAR = 10 AUD = 11 EUR = 12 JOD = 13 NOK = 14 JPY = 15 RUB = 16 PLN = 17 MXN = 18 CZK = 19 TRY = 20 LBP = 21 EGP = 22 HUF = 23 INR = 24 CNY = 25 End Enum Public Type Rate Sum As Double CuDate As Date End Type Public Function test() Dim Rates As Rate Rates = GetExchangeRates With Rates Debug.Print .CuDate Debug.Print .Sum End With End Function Public Function GetExchangeRates(Optional Dtdate As Date, Optional StrCurr As StrCurr = USD) As Rate Dim str As String Dim Json As Object Dim item As Variant Dim element As Variant Dim CurrName As String Dim Sum As Double Dim i As String If Dtdate = "00:00:00" Then Dtdate = Date Select Case StrCurr Case 1: CurrName = "USD" Case 2: CurrName = "GBP" Case 3: CurrName = "SEK" Case 4: CurrName = "CHF" Case 5: CurrName = "CAD" Case 6: CurrName = "NZD" Case 7: CurrName = "DKK" Case 8: CurrName = "SGD" Case 9: CurrName = "HKD" Case 10: CurrName = "ZAR" Case 11: CurrName = "AUD" Case 12: CurrName = "EUR" Case 13: CurrName = "JOD" Case 14: CurrName = "NOK" Case 15: CurrName = "JPY" Case 16: CurrName = "RUB" Case 17: CurrName = "PLN" Case 18: CurrName = "MXN" Case 19: CurrName = "CZK" Case 20: CurrName = "TRY" Case 21: CurrName = "LBP" Case 22: CurrName = "EGP" Case 23: CurrName = "HUF" Case 24: CurrName = "INR" Case 25: CurrName = "CNY" Case Else: CurrName = "" End Select Select Case CurrName Case "" MsgBox "קוד מטבע לא חוקי!", vbCritical + vbMsgBoxRtlReading + vbMsgBoxRight Case Else str = "https://edge.boi.gov.il/FusionEdgeServer/sdmx/v2/data/dataflow/BOI.STATISTICS/EXR/1.0/RER_" & CurrName & "_ILS?startperiod=" & Format(Dtdate - 7, "YYYY-MM-DD") & "&endperiod=" & Format(Dtdate, "YYYY-MM-DD") & "&format=sdmx-json" With CreateObject("MSXML2.ServerXMLHTTP.6.0") .Open "GET", str, False .send str = .responseText End With Set Json = JsonConverter.ParseJson(str) For Each item In Json("data")("dataSets")(1)("series")("0:0:0:0:0:0")("observations") GetExchangeRates.Sum = Json("data")("dataSets")(1)("series")("0:0:0:0:0:0")("observations")(item)(1) Next item For Each item In Json("data")("structure")("dimensions")("observation")(1)("values") GetExchangeRates.CuDate = item("name") Next item End Select End Function
-
קבלת ערך Enum ממספר - VBAערב טוב.
לצורך ייעול קוד שלי היה לי רצון למצוא דרך לקבל נתון מתוך רשימת Enum בקוד VBA באקסס.
כלומר, כידוע רשימה זו מחזירה רק מספר ולא ערך, ורציתי לקבל את הערך ולא רק את המספר (מקווה שאני מובן).
לצורך זה כתבתי את הקוד הבא, ובקשתי היא האם חברי הפורום יוכל לעבור עליו, אשמח לקבל כל הערה/הארה.
תודה.Option Compare Database Option Explicit Public Enum EnumTest a = 1 b = 2 c = 3 E = 15 End Enum Public Function FindEnumString(EnumNum As String, EnumName As String, Optional ModuleName As String) As String Dim ModStr As String Dim EnumStr() As String Dim i If ModuleName = "" Then ModuleName = VBE.ActiveCodePane.CodeModule ModStr = VBE.ActiveVBProject.VBComponents.item(ModuleName).CodeModule.Lines(1, VBE.ActiveVBProject.VBComponents.item(ModuleName).CodeModule.CountOfLines) ModStr = Mid(ModStr, InStr(1, ModStr, "Enum " & EnumName) + Len("Enum " & EnumName), InStr(1, ModStr, "End Enum") - (InStr(1, ModStr, "Enum " & EnumName) + Len("Enum " & EnumName))) EnumStr = Split(ModStr, vbCrLf) For i = LBound(EnumStr) To UBound(EnumStr) If Trim(Right(EnumStr(i), Len(EnumStr(i)) - InStr(1, EnumStr(i), "="))) = EnumNum Then FindEnumString = Trim(Left(EnumStr(i), InStr(1, EnumStr(i), "=") - 1)) End If Next i End Function Public Function test() Dim En As String En = EnumTest.b Debug.Print En & " (" & FindEnumString(En, "EnumTest") & ")" End Function
-
חילוץ נתון ממחרוזת JSON - אקסס@dovid תודה!
עובד מצוין!!!
שבת שלום. -
חילוץ נתון ממחרוזת JSON - אקסס@dovid לא עובד...
-
חילוץ נתון ממחרוזת JSON - אקסס@dovid לא עוזר.
הקוד שלי הוא כך:Dim str As String Dim Json As Object Dim element As Variant str = SendGet("https://edge.boi.gov.il/FusionEdgeServer/sdmx/v2/data/dataflow/BOI.STATISTICS/EXR/1.0/RER_USD_ILS?startperiod=2023-01-01&endperiod=2023-01-06&format=sdmx-json") Set Json = JsonConverter.ParseJson(str) For Each element In Json Debug.Print element("data")("dataSets")(1)("series")("0:0:0:0:0:0")("observations")("2") Next element
ואני מקבל שגיאה
תודה. -
חילוץ נתון ממחרוזת JSON - אקססערב טוב.
אני מנסה לקבל נתונים מהאתר החדש של בנק ישראל של שערי חליפין, אני שולח בקשה עם תאריכים ומטבע ומקבל חזרה את הנתונים הבאים:{ "meta": { "id": "IDREF2232d456-2a97-43fd-8dda-921bebed16c8", "prepared": "2023-01-05T15:30:43", "test": false, "datasetId": "a8e45406-dcaf-4418-a21d-3228709d25f0", "sender": { "id": "UNKNOWN" }, "receiver": { "id": "guest" }, "links": [{ "rel": "self", "href": "/data/dataflow/BOI.STATISTICS/EXR/1.0/RER_USD_ILS?endperiod=2023-01-06&format=sdmx-json&startperiod=2023-01-01", "uri": "https://raw.githubusercontent.com/sdmx-twg/sdmx-json/develop/structure-message/tools/schemas/1.0/sdmx-json-structure-schema.json" }] }, "data": { "dataSets": [{ "links": [{ "rel": "dataflow", "urn": "urn:sdmx:org.sdmx.infomodel.datastructure.Dataflow=BOI.STATISTICS:EXR(1.0)" }], "action": "Information", "series": { "0:0:0:0:0:0": { "attributes": [0, 0, 0, 0, 0, null], "observations": { "0": ["3.532"], "1": ["3.527"], "2": ["3.529"] } } } }], "structure": { "links": [{ "rel": "dataflow", "urn": "urn:sdmx:org.sdmx.infomodel.datastructure.Dataflow=BOI.STATISTICS:EXR(1.0)" }, { "rel": "datastructure", "urn": "urn:sdmx:org.sdmx.infomodel.datastructure.DataStructure=BOI.STATISTICS:EXR(1.0)" }], "name": "שערי חליפין", "names": { "he": "שערי חליפין" }, "dimensions": { "dataset": [], "series": [{ "id": "SERIES_CODE", "name": "שם סדרה", "keyPosition": 0, "role": null, "values": [{ "id": "RER_USD_ILS", "name": "שער יציג דולר ארה\"ב - שקל" }] }, { "id": "FREQ", "name": "תדירות", "keyPosition": 1, "role": null, "values": [{ "id": "D", "name": "יומי" }] }, { "id": "BASE_CURRENCY", "name": "מטבע בסיס", "keyPosition": 2, "role": null, "values": [{ "id": "USD", "name": "דולר ארה\"ב" }] }, { "id": "COUNTER_CURRENCY", "name": "מטבע נגדי", "keyPosition": 3, "role": null, "values": [{ "id": "ILS", "name": "ש\"ח" }] }, { "id": "UNIT_MEASURE", "name": "יחידות מידה", "keyPosition": 4, "role": null, "values": [{ "id": "ILS", "name": "ש\"ח" }] }, { "id": "DATA_TYPE", "name": "סוג נתון", "keyPosition": 5, "role": null, "values": [{ "id": "OF00", "name": "שער יציג" }] }], "observation": [{ "id": "TIME_PERIOD", "name": "Time period", "description": "The period of time or point in time to which the measured observation refers.", "keyPosition": 6, "role": "time", "values": [{ "start": "2023-01-03T00:00:00", "end": "2023-01-03T23:59:59", "id": "2023-01-03", "name": "2023-01-03" }, { "start": "2023-01-04T00:00:00", "end": "2023-01-04T23:59:59", "id": "2023-01-04", "name": "2023-01-04" }, { "start": "2023-01-05T00:00:00", "end": "2023-01-05T23:59:59", "id": "2023-01-05", "name": "2023-01-05" }] }] }, "attributes": { "dataset": [], "series": [{ "id": "DATA_SOURCE", "name": "מקור נתונים", "relationship": { "dimensions": ["SERIES_CODE", "FREQ", "BASE_CURRENCY", "COUNTER_CURRENCY", "UNIT_MEASURE"] }, "role": null, "values": [{ "id": "BOI_MRKT", "name": "בנק ישראל - חטיבת השווקים" }] }, { "id": "TIME_COLLECT", "name": "אופן חישוב בתקופת זמן", "relationship": { "dimensions": ["SERIES_CODE", "FREQ", "BASE_CURRENCY", "COUNTER_CURRENCY", "UNIT_MEASURE"] }, "role": null, "values": [{ "id": "V", "name": "אחר" }] }, { "id": "CONF_STATUS", "name": "סיווג סודיות", "relationship": { "dimensions": ["SERIES_CODE", "FREQ", "BASE_CURRENCY", "COUNTER_CURRENCY", "UNIT_MEASURE"] }, "role": null, "values": [{ "id": "F", "name": "לא סודי" }] }, { "id": "PUB_WEBSITE", "name": "פרסום באתר", "relationship": { "dimensions": ["SERIES_CODE", "FREQ", "BASE_CURRENCY", "COUNTER_CURRENCY", "UNIT_MEASURE"] }, "role": null, "values": [{ "id": "Y", "name": "כן" }] }, { "id": "UNIT_MULT", "name": "מכפיל יחידות", "relationship": { "dimensions": ["SERIES_CODE", "FREQ", "BASE_CURRENCY", "COUNTER_CURRENCY", "UNIT_MEASURE"] }, "role": null, "values": [{ "id": "0", "name": "יחידות" }] }, { "id": "COMMENTS", "name": "הערות", "relationship": { "dimensions": ["SERIES_CODE", "FREQ", "BASE_CURRENCY", "COUNTER_CURRENCY", "UNIT_MEASURE"] }, "role": null, "values": [] }], "observation": [] } } } }
כעת אני מנסה לחלץ את הנתונים שנמצאים בערך "observations" (ליתר דיוק את הערך האחרון שיש שם), אני ממיר את הJSON עם JsonConverter.ParseJson אבל אני לא מצליח לגשת לנתונים האלו.
ניסיתי משהו כמו ("data")("dataSets")("series")("0:0:0:0:0:0")("observations")("2"), אבל חוזר לי שגיאה על זה.
מישהו יודע מה אני צריך לכתוב בשביל להגיע אליהם?
תודה! -
טיפול בשגיאה VBA אקססמה שכרגע עשיתי זה אחרי שאני מוסיף מספור שורות בשביל הפונקציה Erl כתבתי ככה:
ErrStr = VBE.ActiveCodePane.CodeModule.Lines(1, VBE.ActiveCodePane.CodeModule.CountOfLines) ErrStr = Left(Mid(ErrStr, InStr(ErrStr, Erl & " ")), InStr(Mid(ErrStr, InStr(ErrStr, Erl & " ")), vbCrLf)) Debug.Print "Error number: " & Err.Number & vbCrLf & "Description: " & Err.Description & vbCrLf & "Line: " & ErrStr
כך שאם המספור שורה הוא 10 לדוג', אז הוא מחפש איפה כתוב "10 " ומביא את כל השורה. הבעיה היא שאם זה כתוב בעוד מקום לא בטוח שהקוד יחזיר את השורה הנכונה.
אבל גם אם כן, לדעתי נראה ברור שזה קוד קצת 'עקום'... לכאו' אם כשיש באג וכשלוחצים על Debug הוא מדגיש את השורה הבעייתית בצהוב, זה אומר שהשורה רשומה לו איפשהו, השאלה היא איפה והאם אפשר לגשת לזה?
תודה על כל הערה/הארה. -
טיפול בשגיאה VBA אקסס@אבי אתה משתמש בזה?
כי הורדתי את הקובץ והתקנתי ולא קרה כלום, הוא רק העתיק לי שתי קבצי DLL למחשב וזהו.
איך משתמשים בזה?
תודה. -
טיפול בשגיאה VBA אקסס@אבי תודה.
אבל עקב כך שאני לא הולך להשקיע 200$ בפיצ'ר הזה (במיוחד שזה תוסף ולא קוד), יש למישהו רעיון זול יותר?
תודה מראש. -
טיפול בשגיאה VBA אקססצהריים טובים.
אני רוצה לכתוב קוד באקסס שאם מתרחשת שגיאה במהלך הריצה הוא יקפיץ הודעה עם פירוט השגיאה והשורה שבה התרחשה השגיאה.
את מספר השגיאה אני מוצא פשוט עם Err.Number, ואת התיאור עם Err.Description.
אבל אני רוצה שהוא יציג לי את מה שכתוב בשורה שבה הוא נתקע. האם יש דרך לעשות את זה?
את מספר השגיאה הבנתי שאפשר עם פונקציית Erl ולמספר את השורות בקוד, אבל אני רוצה שהוא גם יציג לי את כל השורה.
תודה רבה! -
שאלה באקסל@Y-Excel-Access תודה!
בשביל לקצר תהליכים מצאתי שאפשר להגדיר את זה גם כשעומדים על הטבלת Pivot, בתפריט עיצוב>פריסת דוח>הצג בצורת טבלה, והוא מסדר את הנתונים כמו שאתה הבאת. -
שאלה באקסל@amik אולי קצת תחכים אותנו איך עושים את זה?
איך מגדירים כטבלה שיציג את כל השורות יחיד ולא שם פרטי מתחת לשם משפחה?
לי זה יוצא ככה:
תודה!
-
שאלה באקסל@שוהם307 אני לא מספיק מתמצא בPivot בשביל זה.
סורי. -
שאלה באקסל@one1010 למיטב זכרוני sumif עובד רק עם מספרים.
ראית את הנוסחה שהבאתי למעלה? משהו חסר בה? -
שאלה באקסל@one1010 ואיך זה קשור לשרשור הנוכחי?
-
שאלה באקסל@שוהם307 אולי זה יותר מועיל לך.
דוגמא.xlsx -
שאלה באקסל@שוהם307 משהו כזה?
1672082603401-דוגמה.xlsx -
שאלה באקסל@שוהם307 אולי תצרף את מה שעשית שנוכל לעזור.
-
שימוש בTAPI דרך VBA אקסס@mekev תודה!
את החלק הראשון אני יודע.
והשני בהחלט נשמע כמו משהו אפשרי.
אבדוק את זה.
שוב תודה.