اذهب الي المحتوي
أوفيسنا

كود قائمة بحث واستبدال


Elsayed A Eldiasty
إذهب إلى أفضل إجابة Solved by شايب,

الردود الموصى بها

منذ ساعه, kkhalifa1960 said:

ممكن توضح أكثر أو ترسل مرفق موضح عليه طلبك .:fff:

استاذنا

اريد كود يقوم بفتح هذه القائمة يظهر خيار بحث فقط

IMG_8179.jpeg

رابط هذا التعليق
شارك

شوف أخي الكريم ، لا أعلم ما الغاية من فكرتك ، ولك وجدت لك كود في موقع أجنبي لا أعلم إن كان يعمل كما ترغب أم لا .

Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare PtrSafe Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare PtrSafe Function GetDlgItem Lib "user32" (ByVal hDlg As Long, ByVal nIDDlgItem As Long) As Long

Private Const WM_SETFOCUS As Long = &H7
Private Const EM_SETSEL As Long = &HB1

Private Sub YourForm_KeyDown(KeyCode As Integer, Shift As Integer)
    If Shift = acCtrlMask And KeyCode = vbKeyF Then
        ' افتح مربع البحث والاستبدال
        DoCmd.RunCommand acCmdFind

        ' تحديد التبويب ، طبعاً هنا تبويب البحث
        Dim tabToSelect As Long
        tabToSelect = 0 ' تبويب البحث

        ' العثور على معرف نافذة مربع الحوار
        Dim hwndFindReplace As Long
        hwndFindReplace = FindWindow("#32770", "Find and Replace")

        ' العثور على معرف التبويب المراد داخل مربع الحوار
        Dim hwndTabControl As Long
        hwndTabControl = FindWindowEx(hwndFindReplace, 0, "SysTabControl32", vbNullString)

        ' التبديل إلى التبويب المطلوب
        SendMessage hwndTabControl, WM_SETFOCUS, 0, 0
        SendMessage hwndTabControl, TCM_SETCURSEL, tabToSelect, 0

        ' إلغاء تبويب الاستبدال
        Dim hwndReplaceText As Long
        hwndReplaceText = GetDlgItem(hwndFindReplace, &H461)
        SendMessage hwndReplaceText, EM_SETSEL, 0, -1
    End If
End Sub

سأقوم بتجربته غداً إن شاء الله لعدم توافر جهاز كمبيوتر في الوقت الحالي 😊

أيضاً كإضافة ، جرب هذا الكود الذي يقوم على تعطيل خيار استبدال بـ في مربع البحث.

Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare PtrSafe Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare PtrSafe Function GetDlgItem Lib "user32" (ByVal hDlg As Long, ByVal nIDDlgItem As Long) As Long
Private Declare PtrSafe Function EnableWindow Lib "user32" (ByVal hWnd As Long, ByVal bEnable As Long) As Long

Private Const WM_SETFOCUS As Long = &H7

Private Sub YourForm_KeyDown(KeyCode As Integer, Shift As Integer)
    If Shift = acCtrlMask And KeyCode = vbKeyF Then
        ' افتح مربع البحث والاستبدال
        DoCmd.RunCommand acCmdFind

        ' العثور على معرف نافذة مربع الحوار
        Dim hwndFindReplace As Long
        hwndFindReplace = FindWindow("#32770", "Find and Replace")

        ' العثور على معرف التبويب "استبدل ب"
        Dim hwndReplaceTab As Long
        hwndReplaceTab = FindWindowEx(hwndFindReplace, 0, "SysTabControl32", vbNullString)

        ' تعطيل خيار "استبدل ب"
        Dim hwndReplaceOption As Long
        hwndReplaceOption = GetDlgItem(hwndFindReplace, &H471) ' يمكن تغيير القيمة حسب إصدار Access
        EnableWindow hwndReplaceOption, False

        ' العودة إلى نافذة البحث
        EnableWindow hwndReplaceTab, True
        SendMessage hwndReplaceTab, WM_SETFOCUS, 0, 0
    End If
End Sub

تركت لك الشرح في الأكواد لتسهيل فهم الكود ، وأيضاً سأقوم بتجربته غداً إن كان في العمر بقية إن شاء الله.

تم تعديل بواسطه Foksh
إضافة كود آخر
رابط هذا التعليق
شارك

منذ ساعه, Foksh said:

السلام عليكم ،

قمت بتجربة الأكواد ولكنها لم تعمل , اعتذر :wub:

شكرا لي اهتمام حضرتك

32 دقائق مضت, Moosak said:

جرب اضغط Ctrl+H

أو ضع الكود التالي على الزر :

Me.TextBoxName.Setfocous
Application.SendKeys "^h"

 

🙂 

استاذنا الغالي

الفكرة باختصار انا اريد وضع هذا الكود في زر في النموذج

DoCmd.GoToControl Screen.PreviousControl.Name
DoCmd.RunCommand acCmdFind
للبحث داخل اي حقل اقوم بالتركيز عليه قبل الضغط علي زر تشغيل قائمة (Find) وهو يعمل معي تمام

لكن انا لا اريد انا يقوم اي مستخدم ليس له صلاحية بي استبدال البيانات او يقوم مستخدم عن طريق الخطأ بي استبدال كل البيانات في يخرب البيانات

لذالك اريد عند فتح القائمة يظهر (بحث فقط)

رابط هذا التعليق
شارك

  • أفضل إجابة
8 ساعات مضت, Elsayed A Eldiasty said:

لذالك اريد عند فتح القائمة يظهر (بحث فقط)

مشاركة مع الاساتذه الكرام

الاخ شايب يعتقد ان فكرة نموذج بحث التي اشار اليها الاساتذة فكرة معقولة

ولكن يمكن التوصل للمطلوب بدون الحاجة الى ذلك

حيث ان اخفاء او اظهار تبويب استبدال في نافذة البحث مرتبط بحالة التعديل للنموذج نعم او لا

وبالتالي يمكن اضافة السطر

Me.AllowEdits = False

قبل الكود الذي تستخدمه

ولكن لابد ان تعيد تغيير الخاصة الى نعم بعد تنفيذ البحث او في اي حدث اخر لتتمكن من تعديل البيانات في النموذج

اخونا الشايب

 

شايب42.gif

  • Like 5
رابط هذا التعليق
شارك

15 ساعات مضت, شايب said:

مشاركة مع الاساتذه الكرام

الاخ شايب يعتقد ان فكرة نموذج بحث التي اشار اليها الاساتذة فكرة معقولة

ولكن يمكن التوصل للمطلوب بدون الحاجة الى ذلك

حيث ان اخفاء او اظهار تبويب استبدال في نافذة البحث مرتبط بحالة التعديل للنموذج نعم او لا

وبالتالي يمكن اضافة السطر

Me.AllowEdits = False

قبل الكود الذي تستخدمه

ولكن لابد ان تعيد تغيير الخاصة الى نعم بعد تنفيذ البحث او في اي حدث اخر لتتمكن من تعديل البيانات في النموذج

اخونا الشايب

 

شايب42.gif

تمام استاذنا الغالي تواصلت لي النتيجة التي اريده

والكود اصبح 

Me.AllowEdits = False

DoCmd.GoToControl Screen.PreviousControl.Name

DoCmd.RunCommand acCmdFind

وهنا اضع دالة التأكد من الصلاحية اذا كان له الصلاحية 

Me.AllowEdits = True

وبذالك اكون تغلبت علي عدم ظهور استبدال وطبعاً الفضل لي مشاركة حضرتك

17 ساعات مضت, kkhalifa1960 said:

تفضل أخي @Elsayed A Eldiasty محاولتي . ووافني بالرد .:fff:

DD438.rar 33.14 kB · 9 downloads

شكراً لي اهتمام حضرتك ليس هذا ما اريده

والحمد لله تواصلت للحل بمساعدة الاستاذ @شايب

رابط هذا التعليق
شارك

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information