מעודכן:
יש ליצור מודול מחלקה עם הקוד הבא:
קוד:Option Compare Database Option Explicit Private Direction As Boolean Public Function ChipushShinuy() On Error Resume Next If Direction Then Direction = False Else Screen.ActiveControl.Tag = Screen.ActiveControl.Text Screen.ActiveControl.RowSource = Screen.ActiveControl.RowSource Screen.ActiveControl.Dropdown End If End Function Public Function ChipushGotFocus() On Error Resume Next Screen.ActiveControl.Tag = "" Direction = False Screen.ActiveControl.RowSource = Screen.ActiveControl.RowSource End Function Public Function ChipushKeyUp(KeyCode As Integer) On Error Resume Next If KeyCode = 38 Or KeyCode = 40 Then Direction = True End Function Public Function ChipushKeyDown(KeyCode As Integer) On Error Resume Next If KeyCode = 38 Or KeyCode = 40 Then Direction = True End Function Public Function ChipushNotInList() On Error Resume Next Dim Sql As Recordset Set Sql = CurrentDb.OpenRecordset(Screen.ActiveControl.RowSource) ChipushNotInList = Sql(Screen.ActiveControl.BoundColumn - 1) Set Sql = Nothing End Function
במודול נוסף:
קוד:Option Compare Database Option Explicit Public Function Chipush() As String On Error Resume Next Chipush = Screen.ActiveControl.Tag End Function
לאחר מכן בכל פקד שרוצים להכניס מכניסים בשאילתת מקור השורה את התנאי הבא בעמודה המתאימה :
קוד:ALike "%" & Chipush() & "%"
יש להגדיר הרחב אוטומטית ללא
לאחר מכן לגשת לVBA:
צריך לתת שם למודול הארוך (אני נתתי לדוג' clsChipush)
צריך לתת שם לכל פעם שמשתמשים לפקד (בדוג' Shem)
בחלק העליון של המודול של הטופס להוסיף
קוד:private <<שם באנגלית>> as <<שם המודול הארוך>> דוג' private Shem as clsChipush
ובעת טעינה של הטופס להוסיף
קוד:set <<השם באנגלית>> = new <<שם המודול הארוך>> דוג' set Shem = new clsChipush
לאחר מכן יש להכניס באירועים של התיבה המשולבת את הפונקציות כדלהלן:
בעת שינוי:
בעת קבלת מוקד:קוד:<<השם באנגלית>>.ChipushShinuy
בעת ירידת מקש:קוד:<<השם באנגלית>>.ChipushGotFocus
בעת עליית מקש:קוד:<<השם באנגלית>>.ChipushKeyDown KeyCode
בעת שלא ברשימה:קוד:<<השם באנגלית>>.ChipushKeyUp KeyCode
במקרה הצורך בלבד להכניס את שורת הפקד לאחר עדכוןקוד:On Error Resume Next Response = 0 Me.ActiveControl = <<השם באנגלית>>.ChipushNotInList <<שם הפקד>>_AfterUpdate
private <<שם באנגלית>> as <<שם המודול הארוך>>
דוג'
private Shem as clsChipush
set <<השם באנגלית>> = new <<שם המודול הארוך>>
דוג'
set Shem = new clsChipush
זה הקוד בטופסלסיכום ערכתי את הפוסט המקורי
עכשיו אמור לעבוד חלק
לא כתבתי את זה מספיק אחיד וברור בתחילה
Option Compare Database
Private Shem As AutoComplete1
Private Sub cboCity_AfterUpdate()
DoCmd.Save acForm, "XYZ"
DoCmd.RefreshRecord
End Sub
Private Sub cboCity_Change()
Shem.ChipushShinuy
End Sub
Private Sub cboCity_GotFocus()
Shem.ChipushGotFocus
End Sub
Private Sub cboCity_KeyDown(KeyCode As Integer, Shift As Integer)
Shem.ChipushKeyDown KeyCode
End Sub
Private Sub cboCity_KeyUp(KeyCode As Integer, Shift As Integer)
Shem.ChipushKeyUp KeyCode
End Sub
Private Sub cboCity_NotInList(NewData As String, Response As Integer)
On Error Resume Next
Response = 0
Me.ActiveControl = Shem.ChipushNotInList
cboCity_AfterUpdate
End Sub
Private Sub Form_Load()
Set Shem = New AutoComplete1
End Sub
AutoComplete1 זה השם של המודל הארוך? (אם לא אז תחליף)זה הקוד בטופס
וזה מקפיץ שגיאהקוד:Option Compare Database Private Shem As AutoComplete1 Private Sub cboCity_AfterUpdate() DoCmd.Save acForm, "XYZ" DoCmd.RefreshRecord End Sub Private Sub cboCity_Change() Shem.ChipushShinuy End Sub Private Sub cboCity_GotFocus() Shem.ChipushGotFocus End Sub Private Sub cboCity_KeyDown(KeyCode As Integer, Shift As Integer) Shem.ChipushKeyDown KeyCode End Sub Private Sub cboCity_KeyUp(KeyCode As Integer, Shift As Integer) Shem.ChipushKeyUp KeyCode End Sub Private Sub cboCity_NotInList(NewData As String, Response As Integer) On Error Resume Next Response = 0 Me.ActiveControl = Shem.ChipushNotInList cboCity_AfterUpdate End Sub Private Sub Form_Load() Set Shem = New AutoComplete1 End Sub
צפה בקובץ המצורף 1069669
אולי צריך לשנות משהו גם במודולים עצמם?
כןAutoComplete1 זה השם של המודל הארוך? (אם לא אז תחליף)
שכחתי לכתוב שהמודול הארוך צריך להיות מודול מחלקה (Class)
לא, תודה,
באופן עקרוני זה כבר מטופל אם הכנסת בעת שלא ברשימה@אפר עכשיו אני רואה באג חדש, שאם אני כותב צירוף אותיות שלא מופיע בכלל במקור השורה, זה פשוט נתקע ושולח לדיבוג בעורך קוד..
איך אפשר לסדר את זה שלא ישתגע עם הצירוף שהזנתי בשדה לא מתאים כלל?
[פרוצדורת אירוע]
בעת שלא ברשימהPrivate Sub cboxyz_NotInList(NewData As String, Response As Integer)
On Error Resume Next
Response = 0
Me.ActiveControl = Shem.ChipushNotInList
cboxyz_AfterUpdate
End Sub
cboxyz_AfterUpdate
צריכה להיות פקד אחר?כתבתי שאם לא קיים קוד לאחר עדכון לא לכתוב את השורה הזוהכנסתי את זה בבעת שלא ברשימה, ולא עובד:
יכול להיות שהשורה הזוקוד:Private Sub cboxyz_NotInList(NewData As String, Response As Integer) On Error Resume Next Response = 0 Me.ActiveControl = Shem.ChipushNotInList cboxyz_AfterUpdate End Sub
cboxyz_AfterUpdate
צריכה להיות פקד אחר?
לוח לימודים
מסלולי לימוד שאפשר לההצטרף
אליהם ממש עכשיו:
4.06
כ"ז אייר
קורס משולב בינה מלאכותית
קורס פיתוח ובניית אתרים
קריירה מתקדמת, ביקוש עצום, וממוצע משכורות גבוה במיוחד!
מלגות גבוהות ומשתלמות!
2.06
כ"ה אייר
פתיחת מסלול
קורס עריכת וידאו
מלגות והנחות משמעותיות!
18.06
י"ב סיוון
#רקבפרוג
הרצאה מרתקת:
פוטושופ לצלמים
עם אופק עוגן
כלים מתקדמים, טכניקות חדשות ובינה מלאכותית בפוטושופ לצלמים בעידן 2024
לתלמידים ובוגרים בלבד!
27.06
כ"א סיוון
פתיחת מסלול
עיצוב ואדריכלות פנים
מלגות גבוהות!
27.06
כ"א סיוון
השקה חגיגית!
עיצוב גרפי ודיגיטל - בסילבוס חדש ומטורף!
מלגות גבוהות!
תהילים פרק טו
א מִזְמוֹר לְדָוִד יְהוָֹה מִי יָגוּר בְּאָהֳלֶךָ מִי יִשְׁכֹּן בְּהַר קָדְשֶׁךָ:ב הוֹלֵךְ תָּמִים וּפֹעֵל צֶדֶק וְדֹבֵר אֱמֶת בִּלְבָבוֹ:ג לֹא רָגַל עַל לְשֹׁנוֹ לֹא עָשָׂה לְרֵעֵהוּ רָעָה וְחֶרְפָּה לֹא נָשָׂא עַל קְרֹבוֹ:ד נִבְזֶה בְּעֵינָיו נִמְאָס וְאֶת יִרְאֵי יְהוָה יְכַבֵּד נִשְׁבַּע לְהָרַע וְלֹא יָמִר:ה כַּסְפּוֹ לֹא נָתַן בְּנֶשֶׁךְ וְשֹׁחַד עַל נָקִי לֹא לָקָח עֹשֵׂה אֵלֶּה לֹא יִמּוֹט לְעוֹלָם: