אופיס 365 כך יוצרים בקלות פקד השלמה אוטומטית באקסס

  • הוסף לסימניות
  • #1
לצורך מסוים יצרתי קוד שבקלות הופך תיבה משולבת לתיבת השלמה אוטומטית כלומר שמחפש בכל חלקי המילה ולא רק בתחילתה

יש ליצור מודול עם הקוד הבא:
קוד:
Option Compare Database
Option Explicit

Public Function Chipush() As String
On Error Resume Next
Chipush = Screen.ActiveControl.Tag
End Function

Public Function ChipushShinuy()
If Screen.ActiveControl.HelpContextId = 1 Then Screen.ActiveControl.HelpContextId = 0: GoTo Hemshech
Screen.ActiveForm.ActiveControl.Tag = Screen.ActiveForm.ActiveControl.Text
Hemshech:
Screen.ActiveForm.ActiveControl.RowSource = Screen.ActiveForm.ActiveControl.RowSource
Screen.ActiveForm.ActiveControl.Dropdown
End Function

Public Function ChipushGotFocus()
On Error Resume Next
Screen.ActiveForm.ActiveControl.Tag = ""
Screen.ActiveForm.ActiveControl.RowSource = Screen.ActiveForm.ActiveControl.RowSource
End Function

Public Function ChipushKeyDown(KeyCode As Integer)
If KeyCode = 38 Or KeyCode = 40 Then Screen.ActiveControl.HelpContextId = 1: Screen.ActiveForm.ActiveControl.Dropdown
End Function
לאחר מכן בכל פקד שרוצים להכניס מכניסים בשאילתת מקור השורה את התנאי הבא בעמודה המתאימה :
קוד:
ALike "%" & Chipush() & "%"
לאחר מכן יש להכניס באירועים של התיבה המשולבת את הפונקציות כדלהלן

בעת שינוי:
קוד:
ChipushShinuy()
בעת קבלת מוקד:
קוד:
ChipushGotFocus()
בעת ירידת מקש:
קוד:
ChipushKeyDown(KeyCode)
 
  • הוסף לסימניות
  • #2
מיועד עבור איתור רשומה בעיקר
כי בטפסים רציפים זה יפריע לרשומות האחרות

ניתן לפתור ע"י
יצירה של שדה DLOOKUP שמסתיר את התיבה ומעליו תווית ריקה שבלחיצה מעבירה לתיבה המשולבת
 
  • הוסף לסימניות
  • #3
על מנת שבאנטר יבחר את הראשון יש להוסיף למודול את זה
קוד:
Public Function ChipushNotInList()
On Error Resume Next
Dim sql As Recordset
Set sql = CurrentDb.OpenRecordset(Screen.ActiveForm.ActiveControl.RowSource)
ChipushNotInList = sql(Screen.ActiveForm.ActiveControl.BoundColumn - 1)
End Function
ובאירוע לא ברשימה יש להכניס את זה
קוד:
On Error Resume Next
Response = 0
Me.ActiveControl = ChipushNotInList
<<יש להחליף בשם הפקד>>_AfterUpdate
יש להגדיר הרחב אוטומטית ללא
 
  • הוסף לסימניות
  • #6
מתוקן

יש ליצור מודול עם הקוד הבא:
קוד:
קוד:
Option Compare Database
Option Explicit

Public Function Chipush() As String
On Error Resume Next
Chipush = Screen.ActiveControl.Tag
End Function

Public Function ChipushShinuy()
On Error Resume Next
If Screen.ActiveControl.HelpContextId = 1 Then
Screen.ActiveControl.HelpContextId = 0
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 = ""
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
Screen.ActiveControl.Dropdown
End If
End Function

Public Function ChipushKeyDown(KeyCode As Integer)
On Error Resume Next
If KeyCode = 38 Or KeyCode = 40 Then
Screen.ActiveControl.HelpContextId = 1
Screen.ActiveControl.Dropdown
End If
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)
End Function
לאחר מכן בכל פקד שרוצים להכניס מכניסים בשאילתת מקור השורה את התנאי הבא בעמודה המתאימה :
קוד:
ALike "%" & Chipush() & "%"
לאחר מכן יש להכניס באירועים של התיבה המשולבת את הפונקציות כדלהלן​

בעת שינוי:
קוד:
ChipushShinuy()
בעת קבלת מוקד:
קוד:
ChipushGotFocus()
בעת ירידת מקש:
קוד:
ChipushKeyDown(KeyCode)
בעת עליית מקש:
קוד:
ChipushKeyUp(KeyCode)
בעת שלא ברשימה:
קוד:
On Error Resume Next
Response = 0
Me.ActiveControl = ChipushNotInList
<<שם הפקד>>_AfterUpdate
במקרה הצורך בלבד להכניס את שורת הפקד לאחר עדכון
 
  • הוסף לסימניות
  • #7
מעודכן:

יש ליצור מודול מחלקה עם הקוד הבא:
קוד:
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
במקרה הצורך בלבד להכניס את שורת הפקד לאחר עדכון
 
נערך לאחרונה ב:
  • הוסף לסימניות
  • #8
מעודכן:

יש ליצור מודול מחלקה עם הקוד הבא:
קוד:
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
במקרה הצורך בלבד להכניס את שורת הפקד לאחר עדכון
נערך
 
נערך לאחרונה ב:
  • הוסף לסימניות
  • #9
@אפר הקוד הנ"ל יעבוד טוב גם בטפסים רציפים, או שזה לא הגיוני בכלל?
אם אכן זה לא הגיוני יש רעיון לכזה דבר?
 
נערך לאחרונה ב:
  • הוסף לסימניות
  • #10
@אפר הקוד הנ"ל יעבוד טוב גם בטפסים רציפים, או שזה לא הגיוני בכלל?
אם אכן זה לא הגיוני יש רעיון לכזה דבר?
לא יעבוד, אני עשיתי על ידי סינון בתיבה חיצונית בכותרת העליונה או התחתונה בחירה וחזרה ע"י אנטרים, אבל זה הרבה יותר מורכב.
 

פרוגבוט

תוכן שיווקי
פרסומת

הצטרפות לניוזלטר

איזה כיף שהצטרפתם לניוזלטר שלנו!

מעכשיו, תהיו הראשונים לקבל את כל העדכונים, החדשות, ההפתעות בלעדיות, והתכנים הכי חמים שלנו בפרוג!

לוח מודעות

הפרק היומי

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


תהילים פרק כה

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