אופיס 365 פונקציה באקסס

אפקטיביות

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

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

כיצד לכתוב את הפקודה המשתנה?
 

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

  • לכידה.JPG
    לכידה.JPG
    KB 21.4 · צפיות: 21

אקסס

משתמש רשום
פקודה עם תנאי שאם ערך (נניח במאפיין תג של אחד האלמנטים בטופס או תיבת טקסט ייעודית) X = Y כי אז... וכו'
 

FullTime

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

אח"כ לחצן האישור ישלח את הנתונים לפיו...
 

moishy

משתמש סופר מקצוען
מנוי פרימיום
נכתב ע"י a26955;2031158:
אשפר לעשות תווית מוסתרת בטופס שיקבל עם הפתיחה את שם הפקד/הטופס הרצוי - שלמענו הגיעו לטופס הזה.

אח"כ לחצן האישור ישלח את הנתונים לפיו...
מכיר את OpenArgs אם לא תעשה היכרות. הוא מיועד בדיוק לזה...
 

אפקטיביות

משתמש צעיר
נכתב ע"י moishy;2031249:
מכיר את OpenArgs אם לא תעשה היכרות. הוא מיועד בדיוק לזה...
כעת אני כבר מכיר, אך זה עדיין לא הפתרון!
כי OpenArgs מכיל מחרוזת בלבד, האם יש דרך להשתמש איתה כפקודה?
כלומר, במקרה ו OpenArgs מכיל את המחרוזת "Form_frmReshimot1.תווית24.Caption" ואנו מעוניינים שהתווית המדוברת תכיל ערך מסויים, נניח "שלום".
האם יש דרך לבצע פעולה בסגנון כזה:
קוד:
Me.OpenArgs = "שלום"
כלומר, האם יש דרך להמיר טקסט לפקודה?

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

moishy

משתמש סופר מקצוען
מנוי פרימיום
בודאי שOpenArgs הוא הפתרון, בדיוק לזה הוא נוצר!

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

אפקטיביות

משתמש צעיר
נכתב ע"י moishy;2040440:
בודאי שOpenArgs הוא הפתרון, בדיוק לזה הוא נוצר!

OpenArgs מכיל מחרוזת לדוגמא את שם הטופס, ובקוד של הלחצן אתה משתמש עם מבנה Select Case כדי לבצע את הפעולה הרצויה בהתאם למחרוזת שOpenArgs מכיל.
כלומר, אנו נאלצים להשתמש בקוד מצד הלחצן שבטופס בחירה, ולא עוד אלא קוד מוגבל באפשרויותיו, - להוסיף Case לכל אופציה.
זה בהחלט אופציה, אבל חיכיתי למשהו יותר מתוחכם.

בינתיים יצרתי קוד זמני, עד לפתרון יותר טוב:
קוד בלחצן הפותח את טופס האיתור:
קוד:
Private Sub פקודה364_Click()
DoCmd.OpenForm "frmReshimot", , , , , , "FnewItemForSale.Xsugmuzar.1"
Form_frmReshimot.INTFILTER = 3
Form_frmReshimot.רשימה9.Requery
End Sub
קוד בלחצן האישור של הטופס איתור:
קוד:
Private Sub ishur_Click()
If IsNull(Me.רשימה9) = True Or Nz(Me.רשימה9, "") = "" Then
MsgBox "לא בחרת ערך כלשהו", vbMsgBoxRtlReading + vbMsgBoxRight
Exit Sub
Else
Dim a As String, b As String, cc As String, bb As String ', c As String
' בדיקה אם התו האחרון הוא 1
If Right(Me.OpenArgs, 1) = "1" Then
'הכנסת ערך לשדה בטופס
a = Mid(Me.OpenArgs, 1, InStr(1, Me.OpenArgs, ".") - 1)
bb = Right(Me.OpenArgs, Len(Me.OpenArgs) - (Len(a) + 1))
b = Mid(bb, 1, InStr(1, bb, ".") - 1)
cc = Right(bb, Len(bb) - (Len(b) + 1))
Forms(a)(b).Requery
Forms(a)(b) = (Me.רשימה9.Column(1))
' בדיקה אם התו האחרון הוא 2
ElseIf Right(Me.OpenArgs, 1) = "2" Then
'הכנסת ערך לשדה בטופס משנה שבתוך טופס אחר
c = Left(Me.OpenArgs, (Len(Me.OpenArgs) - 2))
a = Mid(c, 1, InStr(1, c, ".") - 1)
bb = Right(c, Len(c) - (Len(a) + 1))
b = Mid(bb, 1, InStr(1, bb, ".") - 1)
cc = Right(bb, Len(bb) - (Len(b) + 1))

Forms(a)(b)(cc).Requery
Forms(a)(b)(cc) = (Me.רשימה9.Column(1))

End If

End If
DoCmd.Close acForm, "frmReshimot", acSaveYes
End Sub

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

אפקטיביות

משתמש צעיר
למעשה מה שאנו מחפשים הוא: "קוד המכתיב לפקד אחר כיצד להתנהג" בעת לחיצה עליו.
האם יש דבר כזה? האם אפשר לקרוא לפקד בטופס מסויים ולומר לו: "בעת לחיצה עליך, פתח טופס X, השמע ביפ, פתח MsgBox או כל פקודה אחרת?
 

moishy

משתמש סופר מקצוען
מנוי פרימיום
לא, ככה משתמשים עם OpenArgs.
בכפתור שפותח את הטופס הרב פעמי:
קוד:
DoCmd.OpenForm "frmGeneric", , , , , , Me.Name
ובלחצן אישור:
קוד:
Private Sub ishur_Click()
    If IsNull(Me.רשימה9) = True Or Nz(Me.רשימה9, "") = "" Then
        MsgBox "לא בחרת ערך כלשהו", vbMsgBoxRtlReading + vbMsgBoxRight
        Exit Sub
    End If
    Select Case Me.OpenArgs
        Case Is = "frmOne"
            ' תעשה מה שאתה רוצה אם הטופס הקורא הוא טופס 1
        Case Is = "frmTwo"
            ' תעשה מה שאתה רוצה אם הטופס הקורא הוא טופס 2
        End If
    End If
    DoCmd.Close acForm, "frmReshimot", acSaveYes
End Sub
 

moishy

משתמש סופר מקצוען
מנוי פרימיום
אגב, במקום להשתמש עם:
קוד:
    If IsNull(Me.רשימה9) = True Or Nz(Me.רשימה9, "") = "" Then
        MsgBox "לא בחרת ערך כלשהו", vbMsgBoxRtlReading + vbMsgBoxRight
        Exit Sub
    End If
תשתמש עם:
קוד:
    If Me.רשימה9.ItemsSelected.Count = 0 Then
        MsgBox "לא בחרת ערך כלשהו", vbMsgBoxRtlReading + vbMsgBoxRight
        Exit Sub
    End If
 

chagold

משתמש צעיר
הנדסת תוכנה
יש פונקציה מובנית בVBA לפתיחת טפסים שאפשר להחזיר מידע לטופס שמבקש את הפתיחה וכיו"ב. מצ"ב קבצי דוגמא (מתוך תוכנת צ'קים באנגלית, תסתכל איך הוא פותח את טופס בחירת התאריך ואיך הוא מחזיר אותו מתוך הטופס תאריכון ע"י הפונקציה FORMS.
 

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

  • CheckWriter.zip
    KB 938.2 · צפיות: 22

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

הפרק היומי

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


תהילים פרק קיט ת'

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

אתגר AI

בעלי חיים בראשי תיבות • אתגר 134

לוח מודעות

למעלה