اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

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

قام بنشر

بسم الله الرحمن الرحيم

بعد التحية والتقدير

المطلوب ان شاء الله

عند اختيارى احد عنار الكمبوبوكس الاول يتم مسح هذا العنصر من باقى الكمبوبوكسات الاخرى

ولكم جزيل الشكر والتقديرفاتورة مبيعات.rar

  • Like 1
قام بنشر

بسم الله الرحمن الرحيم 

اخى العزيز على الشيخ

اشكرك جدا على اهتمامك بالموضوع

 ما اريده موجود بالفعل فى هذا الصرح الكبير

ولاكن لم استطع تطبيقه على برنامجى

بعد اذن سيادتكم ارسلت رابط المثال الموجود بهذا الصرح الكبير

اتمنى ان تتوفق على تطبيقه فى برنامجى (فاتورة مبيعات)

ولكم جزيل الشكر والتقديرhttp://www.officena.net/ib/index.php?showtopic=56482&p=358111

 

 

 

www.officena.net/ib/index.php?showtopic=56482&p=358111

  • Like 1
  • أفضل إجابة
قام بنشر

السلام عليكم

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

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

الثانية هي ما ساقدمه لك

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

؟؟؟؟ قد تقول لما ذا هته الفة لماذا لا تفلتر في المصفوفة الاولى في حد ذاتها

جوابي ببساطة شخصيا لا اعرف طريقة لحذف عنصر معين من المصفوة الذي اعرفه هو مسح المسفوفة بالكامل وان كان هناك من الاعضاء المحترمين في المنتدى يعلمون الطريقة فياريت يعلمني بالطريقة

نعود الى موضوعنا

اولا عرف مصفوفتين ول يكن تعريفهما على عامت الفورم وليس على حدث او SUB ما

Dim Arr1(), Arr2()

ثانيا نحتاج الى كود يملئ لنا المصفوفة الاولى من قاعدة البيانات وفي نفس الوقت يملئ قوائم الاصناف في الفورم

Sub Listcmd()
Dim ws As Worksheet
Dim Lrw As Long
Set ws = ThisWorkbook.Sheets("setup")
    Lrw = ws.Range("A" & Rows.Count).End(xlUp).Row
Arr1 = Application.Transpose(ws.Range("B2:B" & Lrw).Value)
    For i = 8 To 13
    Me("ComboBox" & i).List = Arr1
    Next
End Sub

اما هذا الكود

Sub ListArr(cmd As String)
Dim sTe As String: sTe = Me(cmd).Text
Dim ii As Long, e As Long: e = 0

    For ii = LBound(Arr1) To UBound(Arr1)
    If CStr(Arr1(ii)) <> sTe Then
        e = e + 1: ReDim Preserve Arr2(e)
        Arr2(e) = Arr1(ii)
    End If
    Next ii
    ReDim Arr1(e): Arr1 = Arr2

End Sub

يقوم بمسح الصنف الذي ياخذه المتغير cmd من المصفوفة

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

ثم يعيد تعبئة الكمبوبوكس بالاصناف الغير مستعملة فقط

Sub FList()
Listcmd
    For i = 8 To 13
    If Me("ComboBox" & i) <> "" Then ListArr Me("ComboBox" & i).Name
    Next
    For i = 8 To 13
    Me("ComboBox" & i).List = Arr1
    Next
    
End Sub

ملاحضة

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

ارجو ان اكون قد وفق ولو قليل في شرح الفكرة  وان يكون فيها افادة للجميع

تحياتي للجميع

فاتورة مبيعات.rar

  • Like 1
قام بنشر

استازى العزيز شوقى

الحل الذى قدمته لنا هو الحل الاكيد وهو المطلوب بالفعل ولاكن اتضح لى 

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

ولكم جزيل الشكر والتقدير

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