פקודת DLookUp
-
סוף כל סוף פיצחתי את הפקודה,
רק בדבר הפשוט MSGBOX נתקעתי עם זה, אם מישהו יכול לעזור לי בדברים הבאים:- איך מציגים יותר משורה אחת של טבלה.
- מעבר שורה VBCR לא עובד לי.
- כל המשחקים של כל MSGBOX כותרת, וכד' לא הצלחתי לפצח
-
- א"א עם זה
יש פונקציות הרחבה ברשת שנותנות יותר משורה אחת.
או פשוט תעשה לופ על RS - תשתמש בvbcrlf ולא רק vbcr
או תשתמש בvbnewline שהוא שווה ערך לvbcrlf - יש לך פרמטרים. איפה אתה נתקע?
- א"א עם זה
-
@clickone דבר ראשון אין לי מילים להודות לך על המוכנות שלך לעזור ועל העזרה.
חוץ מעצם ההעזרה, זה מעודד!אני עם הארץ, ואם יש לך זמן
- מה זה לופ ומה זה RS?
- אני מבין שאוכל ללמוד בעז"ה.
- ב + לעשות הודעות מימין לשמאל, אישור ביטול וכד', וכך הפסיק שעושים בסוף לכתוב כותרת, הוא עושה הכל אדום.
-
@הכוכב-שלנו
תוסיף מודול חדשOption Compare Database Private Const sApp = "כותרת קבועה" '---------------------------------------------------------------------- ' AccessMsgBox ' ' This calls the Access message box instead of to the VBA one. ' The Access input box supports Windows XP theming and bold ' message strings by using the following notation: ' AccessMsgBox "Text that will be bold. @Next line. @" '---------------------------------------------------------------------- Function AccessMsgBox(Prompt As String, Optional Buttons As VbMsgBoxStyle = vbOKOnly, Optional Title As String, Optional HelpFile As String = "", Optional Context As Long = 0, Optional AcApp As Access.Application) As VbMsgBoxResult ' Use the current application if one was not specified If AcApp Is Nothing Then Set AcApp = Application ' Build the MsgBox expression Dim strExpr As String strExpr = "MsgBox(" & Enquote(Prompt) & _ ", " & Buttons & _ IIf(Title = "", "", ", " & Enquote(CStr(Title)) & _ IIf(HelpFile = "", "", ", " & Enquote(HelpFile) & ", " & Context)) & _ ")" ' Evaluate it AccessMsgBox = AcApp.Eval(strExpr) End Function '---------------------------------------------------------------------- ' AccessInputBox ' ' This calls the Access input box instead of to the VBA one. ' The Access input box supports Windows XP theming. '---------------------------------------------------------------------- Function AccessInputBox(Prompt As String, Optional Title As String, Optional Default As String, Optional AcApp As Access.Application) As String ' Use the current application if one was not specified If AcApp Is Nothing Then Set AcApp = Application ' Build the InputBox expression Dim strExpr As String strExpr = "InputBox(" & Enquote(Prompt) & _ ", " & Enquote(Title) & _ ", " & Enquote(Default) & _ ")" ' Evaluate it AccessInputBox = AcApp.Eval(strExpr) End Function '---------------------------------------------------------------------- ' Enquote ' ' Wraps the string in double quotes and escapes any double quotes ' within the string with double, double quotes. '---------------------------------------------------------------------- Function Enquote(ByVal strText As String) As String Enquote = """" & Replace(strText, """", """""") & """" End Function Public Function msgok(Prompt As String, Optional Title As String = sApp) AccessMsgBox Prompt, vbInformation + vbMsgBoxRtlReading, Title End Function
יש במודול הזה כמה פונקציות מעניינות
-
msgok
מטרת הפונקצייה לקבל טקסט ולהציג אותו במסגבוקס יפה יותר.
שים לב שלא חייב לכתוב כותרת כל פעם מחדש.
יש כותרת ברירת מחדל, שנמצאת במשתנהsApp
בראש המודול.
אם אתה רוצה לשבור שורות תעשה שטרודל בסוף השורה, אפילו בתוך הטקסט ממש. - זה טוב עד 2 שורות. -
Enquote
פונקצייה שיודעת לעטוף גרשיים. שימושית מאד בהכנסת מחרוזות טקסט בקוד. -
AccessMsgBox
כמו המסגבוקס הרגיל, רק שמציג הודעה יותר יפה (זה הודע פנימית של האקסס)
הוא מקבל את אותם הפרמטרים של הmsgbox הרגיל -
AccessInputBox
משמשת לקבלת קלט בסיסי מהמשתמש
-
-
@הכוכב-שלנו אמר בפקודת DLookUp:
ב + לעשות הודעות מימין לשמאל, אישור ביטול וכד', וכך הפסיק שעושים בסוף לכתוב כותרת, הוא עושה הכל אדום.
הבעייה הגדול שהעברית והאנגלית הופכים את כל הסדר.
לכן אולי יותר קל לפצל את זה למשתנים, או לאחוז ראש שזה לא יברחהנה דוגמא להודעה בעברית עם יישור ימין שמאל
MsgBox "הודעה בעברית מימין לשמאל",vbMsgBoxRight+vbMsgBoxRtlReading,"כותרת בעברית"
והנה עם הסוג השני שהבאתי בהודעה הקודמת + שבירת שורה
AccessMsgBox "הודעה בעברית מימין לשמאל@עם שבירת שורה@",vbMsgBoxRight+vbMsgBoxRtlReading,"כותרת בעברית"
עוד משהו, בד"כ בפונקציות האלו, שזה מסתבך עם העברית אנגלית, אני בונה את הקריאה לפונקצייה בלי העברית, ואחרי שסיימתי, אני מכניס לתוך הגרשיים את הטקסט בעברית
דוגמא:AccessMsgBox "",vbMsgBoxRight+vbMsgBoxRtlReading,""
אח"כ אני מוסיף את העברית בפנים
-
@הכוכב-שלנו אמר בפקודת DLookUp:
@clickone נטרלת בכוונה את כמעט הכל?
מה שאתה רואה בירוק, זה כי הקוד שבפורום לא יודע ל"קרוא" קוד VBA
תעשה העתק הדבק אליך למודול חדש. זה יעבוד לך
בפורום הישן היה אפשר לבחות שפה להצגה ( @dovid אולי תסדר לנו גם כאן? בכ"ז זה פורום תיכנות ) -
@הכוכב-שלנו אמר בפקודת DLookUp:
איך מציגים יותר משורה אחת של טבלה.
Public Function ELookup(Expr As String, Domain As String, Optional Criteria As Variant, _ Optional OrderClause As Variant) As Variant On Error GoTo Err_ELookup 'Purpose: Faster and more flexible replacement for DLookup() 'Arguments: Same as DLookup, with additional Order By option. 'Return: Value of the Expr if found, else Null. ' Delimited list for multi-value field. 'Author: Allen Browne. allen@allenbrowne.com 'Updated: December 2006, to handle multi-value fields (Access 2007 and later.) 'Examples: ' 1. To find the last value, include DESC in the OrderClause, e.g.: ' ELookup("[Surname] & [FirstName]", "tblClient", , "ClientID DESC") ' 2. To find the lowest non-null value of a field, use the Criteria, e.g.: ' ELookup("ClientID", "tblClient", "Surname Is Not Null" , "Surname") 'Note: Requires a reference to the DAO library. Dim db As DAO.Database 'This database. Dim rs As DAO.Recordset 'To retrieve the value to find. Dim rsMVF As DAO.Recordset 'Child recordset to use for multi-value fields. Dim varResult As Variant 'Return value for function. Dim strSql As String 'SQL statement. Dim strOut As String 'Output string to build up (multi-value field.) Dim lngLen As Long 'Length of string. Const strcSep = "," 'Separator between items in multi-value list. 'Initialize to null. varResult = Null 'Build the SQL string. strSql = "SELECT TOP 1 " & Expr & " FROM " & Domain If Not IsMissing(Criteria) Then strSql = strSql & " WHERE " & Criteria End If If Not IsMissing(OrderClause) Then strSql = strSql & " ORDER BY " & OrderClause End If strSql = strSql & ";" 'Lookup the value. Set db = DBEngine(0)(0) Set rs = db.OpenRecordset(strSql, dbOpenForwardOnly) If rs.RecordCount > 0 Then 'Will be an object if multi-value field. If VarType(rs(0)) = vbObject Then Set rsMVF = rs(0).Value Do While Not rsMVF.EOF If rs(0).Type = 101 Then 'dbAttachment strOut = strOut & rsMVF!FileName & strcSep Else strOut = strOut & rsMVF![Value].Value & strcSep End If rsMVF.MoveNext Loop 'Remove trailing separator. lngLen = Len(strOut) - Len(strcSep) If lngLen > 0& Then varResult = Left(strOut, lngLen) End If Set rsMVF = Nothing Else 'Not a multi-value field: just return the value. varResult = rs(0) End If End If rs.Close 'Assign the return value. ELookup = varResult Exit_ELookup: Set rs = Nothing Set db = Nothing Exit Function Err_ELookup: MsgBox Err.Description, vbExclamation, "ELookup Error " & Err.number Resume Exit_ELookup End Function
מקור
http://allenbrowne.com/ser-42.html
זה אתר שאם אתה עם אקסס אני ממליץ מאד שתעבור עליו ועל דוגמאות הקודים אצלו.
למדתי משם המון! -
@הכוכב-שלנו אגב, התחלת עם dlookup,אז זה פונקציה מאד איטית, וטוב להשתמש איתה רק במשהו ספציפי מאד לדוגמא בטופס שלא נורא אם יקח איזה חצי שניה - שניה, אבל כשאתה עושה משהו רציני כמו לולאות וכיו"ב, תעשה רק עם RS.
-
@clickone ממש תודה רבה רבה, משום מה רוב השורות נהיות אדומות, יכול להיות שזה בעיה כוללת
(בשני המודולים) -
@chagold אמר בפקודת DLookUp:
@הכוכב-שלנו אגב, התחלת עם dlookup,אז זה פונקציה מאד איטית, וטוב להשתמש איתה רק במשהו ספציפי מאד לדוגמא בטופס שלא נורא אם יקח איזה חצי שניה - שניה, אבל כשאתה עושה משהו רציני כמו לולאות וכיו"ב, תעשה רק עם RS.
ביקשתי גם מ@clickone תן לי כיוון מה זה RS? פונקצייה? יש לך דוגמא?
-
@הכוכב-שלנו אמר בפקודת DLookUp:
@clickone ממש תודה רבה רבה, משום מה רוב השורות נהיות אדומות, יכול להיות שזה בעיה כוללת
(בשני המודולים) -
@הכוכב-שלנו אתה יכול למחוק או לשים בהערה את כל השורות שבאדום
משום מה אצלך התו של ההערה נמחק (או שאתה מחקת אותו) -
@clickone אמר בפקודת DLookUp:
@הכוכב-שלנו אתה יכול למחוק או לשים בהערה את כל השורות שבאדום
משום מה אצלך התו של ההערה נמחק (או שאתה מחקת אותו)איזה הערה? אתה מתכווין לגרש שהופך אותו לירוק?
אם זה ירוק אז זה מנוטרל, לא?
תודה -
@הכוכב-שלנו תשים גרש בודד לפני כל שורה באדום זה יהפוך את זה להערה בקוד
-
@clickone אמר בפקודת DLookUp:
@הכוכב-שלנו תשים גרש בודד לפני כל שורה באדום זה יהפוך את זה להערה בקוד
ערכתי את ההודעה
תסביר לי בבקשה, יש כזה דבר "הערה בקוד" עוד מושג חדש בשבילי אם כן -
@הכוכב-שלנו RS זה טכניקה לעבודה עם מסדי נתונים - טבלאות.
אני מצרף איזו תוכניתונת שעשיתי פעם לעזור לי בחישוב זמני עבודה, תבין את הפרנציפ, וכל שאלה תשאל.תסתכל בREFERENCES כדי שיצרף לך את הספריה הרלוונטית
-
@הכוכב-שלנו
כן
כל שורה בצבע ירוק, היא הערה, והמהדר לא מתייחס אליה ולא מריץ אותה.
בVB הערה מתחילה בגרש בודד'
בשאר השפות זה בד"כ 2 לוכסנים //
הערות יעזרו לך בעתיד להבין מה רצית / לה שמת שורה מסויימת.
ולפעמים אתה רוצה לנטרל שורה אז במקום למחוק ולהחזיר, אתה פשוט יכול להפוך אותה להערה. ככה היא תישאר מצד אחד.
ומצד שני, היא לא תפריע.
ואם תחליט להחזיר את השורה פשוט תמחק את הגרש הבודד וההערה תתבטל, והשור התחזור להיות פעילה.