كيفية تقييد حذف العناصر المحددة من مربع القائمة باستخدام الوصول إلى vba

StackOverflow https://stackoverflow.com//questions/22054129

  •  21-12-2019
  •  | 
  •  

سؤال

لدي قائمة تحتوي على 18 عنصريمكن حذف العنصر المحدد من مربع القائمة بالنقر فوق الزر "حذف".كيف يمكنني منع المستخدم من حذف بعض العناصر التي أحددها؟

Private Sub cmdDelete_Click()
    Dim i As Integer

    With Me.listbox1
        For i = .ListCount - 1 To 0 Step -1
            If .Selected(i) = True Then
                .RemoveItem i
            End If
        Next i
    End With
End Sub
هل كانت مفيدة؟

المحلول

هل يمكنك تخزين القيم في جدول؟ثم يمكن أن يكون لديك عمود في الجدول يحدد ما إذا كان يمكن حذف الحقل أم لا، وهو ما سيكون من السهل دمجه في VBA الخاص بك.

تحرير لمزيد من التوضيح:

هل لديك مربع قائمة غير منضم (على سبيل المثال؟لا يوجد حقل محدد كمصدر بياناته).

قم بإنشاء جدول يحتوي على أعمدة للمعرف (كرقم تلقائي)، والقيم التي تريد ظهورها في مربع القائمة الخاص بك (كمربع نص)، وعمود أخير يمكنك وضع علامة نعم أو لا عليه (كحقل منطقي أو نعم/لا ).على سبيل المثال

ID     Values                Allow deletion?
1      Example               Yes
2      Another example       No
3      Yes another example   Yes

في مصدر الصف الخاص بمربع القائمة، حدد هذا الجدول.

يمكن الآن لفرع الحذف الخاص بك تشغيل الكود التالي.

dim qry as string
dim strLookup as string

strLookup = dlookup("[Allow deletion]","[Your Table]", YOURSELECTEDFIELDHERE & "=[Values]")

if strLookup = "No" Then
    msgbox "You're not allowed to delete this field."
    exit sub
else 
    qry = "DELETE * FROM [Your Table] WHERE [Values] = YOURSELECTEDFIELDHERE"
    CurrentDB.Execute qry
    Me.YourListBoxName.Requery
end if

سيبحث هذا عن القيمة التي حصلت عليها من مربع القائمة الخاص بك، ومطابقتها مع حقل السماح بالحذف، وحذفها إذا تم وضع علامة "نعم" على هذا الحقل أو تركها كما هي إذا تم وضع علامة "لا".

إذا كنت تريد حذف الحقل مؤقتًا فقط وجعله يظهر في المرة التالية التي تقوم فيها بتحميل النموذج - في الواقع، قم بإخفائه، فسيتعين عليك إضافة عمود آخر إلى الجدول المسمى "إظهار"، والذي سيكون أيضًا نعم/ لا يوجد حقل، وقم بتعيين الإعداد الافتراضي على نعم.

يمكنك بعد ذلك تعيين مصدر الصف الخاص بك على SELECT * FROM [YOURTABLE] WHERE [Show] = "Yes".

ثم qry في الكود أعلاه يجب بدلاً من ذلك تعيينه على:

UPDATE [YOURTABLE] SET [YOURTABLE].[Show] = "No" WHERE ((([YOURTABLE].[Values])=YOURSELECTEDFIELD));

سيؤدي هذا بعد ذلك إلى تغيير قيمة العرض إلى لا، لذا عند إعادة الاستعلام عن مربع القائمة، فلن يظهر مرة أخرى.

ستحتاج إلى تشغيل استعلام آخر لتغييرها كلها مرة أخرى إلى نعم عند الخروج من النموذج.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top