كيفية تقييد حذف العناصر المحددة من مربع القائمة باستخدام الوصول إلى vba
-
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));
سيؤدي هذا بعد ذلك إلى تغيير قيمة العرض إلى لا، لذا عند إعادة الاستعلام عن مربع القائمة، فلن يظهر مرة أخرى.
ستحتاج إلى تشغيل استعلام آخر لتغييرها كلها مرة أخرى إلى نعم عند الخروج من النموذج.