mahmoud nasr alhasany قام بنشر أغسطس 14 مشاركة قام بنشر أغسطس 14 (معدل) السلام عليكم ورحمة الله وبركاتة رجاء مساعدتى فى هذا الموضوع انه حذف فاتورة ,وايضا التعديل على الفاتورة سنبتدى على طريقة الحذف اولا * حذف فاتورة: تحديد رقم فاتورة في TextBox2 وحذفها من ورقة المبيعات. * إرجاع الكميات: إرجاع الكميات الخاصة بالأصناف الموجودة في الفاتورة إلى ورقة المخزون المقابلة. * تعريف المخزن: تحديد ورقة المخزون الصحيحة بناءً على مخزن الفاتورة. 1. تصميم نموذج المستخدم (UserForm): * TextBox2: لإدخال رقم الفاتورة. * Combobox1: لعرض تفاصيل اسم المخزن المحول منه الفاتورة * Combobox2: لعرض تفاصيل اسم المخزن المحول منه الفاتورة * ListBox1: لعرض تفاصيل الأصناف في الفاتورة المحددة * الأعمدة التالية : تفاصيل الأصناف فى listbox 1 (كود الصنف، اسم الصنف ،الكمية). * زر حذف: لتنفيذ عملية الحذف وإرجاع الكميات. 2. تفاصيل بيانات ورقة المبيعات: * العمود A: رقم الفاتورة. * العمود B: تاريخ الفاتورة. * العمود C : اسم المخزن. * العمود d: اسم المخزن.المحول منه * العمود E: اسم المخزن.المحول اليه * العمود F: كود الصنف * العمود G: اسم الصنف * العمود H: الكميه * الأعمدة التالية: تفاصيل الأصناف فى ورقة المخزون (اسم للمخزن ،كود الصنف، اسم الصنف،الرصيد المخزون). 3. تفاصيل بيانات ورقة المخزون: * العمود A: اسم المخزن. * العمود B: كود الصنف * العمود C : اسم الصنف * العمود d: الرصيد. 4. كود VBA: المطلوب عند الحذف الكمية من مخزن محدد من ورقة المبيعات ارجاع الكمية الى المخزون من المخزن المحول منه وخصم الكمية من المحول الية مالخطاء فى الكود المدرج Private Sub CommandButton3_Click() If ListBox1.ListIndex = -1 Then: Exit Sub If ListBox1.ListIndex = -1 Then '''''حدف البيانات من الليست بوكس''''' MsgBox "!المرجوا تحديد الصف المراد حدفه !", vbCritical, "" Exit Sub End If If ListBox1.ListIndex >= 0 Then cevap = MsgBox("?هل أنت متأكد أنك تريد حذف العنصر المحدد", vbYesNo) If cevap = vbYes Then ListBox1.RemoveItem ListBox1.ListIndex REMOVE End If End If On Error Resume Next Dim wsSales As Worksheet, wsInventory As Worksheet Dim lastRowSales As Long, lastRowInventory As Long Dim deleteRow As Long Dim itemRow As Long Dim invoiceNumber As Long, itemCode As String, warehouseName As String, quantity As Integer, warehouseFrom As String, warehouseTo As String ' تحديد ورقة المبيعات والمخزون Set wsSales = ThisWorkbook.Sheets("Transferts") Set wsInventory = ThisWorkbook.Sheets("Inventaire") ' الحصول على رقم الفاتورة من TextBox2 invoiceNumber = Val(TextBox2.Value) ' البحث عن الصف الذي يحتوي على الفاتورة المحددة lastRowSales = wsSales.Cells(wsSales.Rows.Count, "A").End(xlUp).Row For i = 2 To lastRowSales If wsSales.Cells(i, "A").Value = invoiceNumber Then deleteRow = i Exit For End If Next i ' إذا تم العثور على الفاتورة، قم بحذفها وإرجاع الكميات If deleteRow > 0 Then ' الحصول على اسم المخزن من الصف الذي سيتم حذفه ' warehouseName = wsSales.Cells(deleteRow, "C").Value warehouseFrom = wsSales.Cells(deleteRow, "D").Value warehouseTo = wsSales.Cells(deleteRow, "E").Value ' ملء ListBox1 ببيانات الأصناف ListBox1.Clear For itemRow = 6 To wsSales.Cells(deleteRow - 1, wsSales.Columns.Count).End(xlToLeft).Column Step 3 itemCode = wsSales.Cells(deleteRow - 1, itemRow).Value itemName = wsSales.Cells(deleteRow - 1, itemRow + 1).Value quantity = wsSales.Cells(deleteRow - 1, itemRow + 2).Value ListBox1.AddItem itemCode & " - " & itemName & " - " & quantity Next itemRow ' حذف الصف من ورقة المبيعات wsSales.Rows(deleteRow).EntireRow.Delete ' البحث عن الأصناف في الفاتورة وإرجاع الكميات إلى المخزن المصدر For Each Item In ListBox1.List 'ListItems ItemData = Split(Item.Value, " - ") itemCode = ItemData(0) quantity = CInt(ItemData(2)) ' البحث عن الصنف في ورقة المخزون وإضافة الكمية إلى المخزن المصدر lastRowInventory = wsInventory.Cells(wsInventory.Rows.Count, "A").End(xlUp).Row For i = 2 To lastRowInventory If wsInventory.Cells(i, "B").Value = itemCode And wsInventory.Cells(i, "A").Value = warehouseFrom Then wsInventory.Cells(i, "D").Value = wsInventory.Cells(i, "D").Value + quantity ' التأكد من عدم وجود كميات سالبة If wsInventory.Cells(i, "D").Value < 0 Then MsgBox "الكمية في المخزن أصبحت سالبة للصنف " & itemCode Exit Sub End If Exit For End If Next i Next itemRow Else MsgBox "لم يتم العثور على الفاتورة" End If Next i Next Item Else MsgBox "لم يتم العثور على الفاتورة" End If End Sub مالخطاء فى تنفيذ الكود فى الفورم Copy of Copy of امين مخزن.xlsm تم تعديل أغسطس 14 بواسطه mahmoud nasr alhasany رابط هذا التعليق شارك More sharing options...
mahmoud nasr alhasany قام بنشر أغسطس 14 الكاتب مشاركة قام بنشر أغسطس 14 (معدل) وهذا الكود خاص بتعديل الفاتورة وارجاع الكمية الصحية لمخزون المخزن ان كمية المخزون المستردة يجب ان تكون ناقصة فى If wsStock.Cells(j, "A").Value =TOStore Then Private Sub CommandButton2_Click() Dim wsSales As Worksheet, wsStock As Worksheet Dim lastRowSales As Long, lastRowStock As Long Dim i As Long, j As Long Dim invoiceNo As Long, fromStore As String, toStore As String, itemCode As String, quantity As Long, newQuantity As Long invoiceNo = Val(TextBox2.Value) fromStore = ComboBox1.Value toStore = ComboBox2.Value ' ComboBox1 رصيد المخزون الاول fromStore1 = stocktr.Value ' ComboBox2 رصيد المخزون الثانى toStore2 = stocktrr.Value Set wsSales = Worksheets("Transferts") Set wsStock = Worksheets("Inventaire") ' Find the invoice in the Sales sheet lastRowSales = wsSales.Cells(wsSales.Rows.Count, "A").End(xlUp).Row For i = 2 To lastRowSales If wsSales.Cells(i, "A").Value = invoiceNo Then ' Get the new quantity from the user (مثال: عن طريق TextBox) newQuantity = Val(TextBox1.Value) ' Calculate the quantity difference quantity = wsSales.Cells(i, "H").Value Dim quantityDiff As Long quantityDiff = newQuantity + quantity ' Update the quantity in the Sales sheet wsSales.Cells(i, "H").Value = newQuantity End If Next i ' Find the invoice in the Stock sheet lastRowStock = wsStock.Cells(wsStock.Rows.Count, "A").End(xlUp).Row For j = 2 To lastRowStock If wsStock.Cells(j, "A").Value = toStore Then ' Get the new quantity from the user (مثال: عن طريق TextBox) newQuantity = Val(TextBox1.Value) ' Calculate the quantity difference quantity = wsStock.Cells(j, "D").Value quantityDiff = newQuantity - quantity ' Update the quantity in the Sales sheet wsStock.Cells(j, "D").Value = newQuantity + toStore2 ' Update quantities in the inventory ' ... (نفس الكود السابق لإرجاع الكميات) ' Find the invoice in the Stock sheet ElseIf wsStock.Cells(j, "A").Value = fromStore Then ' Get the new quantity from the user (مثال: عن طريق TextBox) newQuantity = Val(TextBox1.Value) ' Calculate the quantity difference quantity = wsStock.Cells(j, "D").Value quantityDiff = newQuantity + quantity ' Update the quantity in the Sales sheet wsStock.Cells(j, "D").Value = newQuantity + fromStore1 wsStock.Cells(lastRowStock + 1, "J").Value = Now() ' تاريخ التعديل wsStock.Cells(lastRowStock + 1, "K").Value = Environ("Username") ' اسم المستخدم End If Next j MsgBox "تم تعديل الفاتورة وإرجاع الكميات بنجاح" End Sub الرجاء مساعدتى انى عالق تم تعديل أغسطس 14 بواسطه mahmoud nasr alhasany رابط هذا التعليق شارك More sharing options...
mahmoud nasr alhasany قام بنشر أغسطس 15 الكاتب مشاركة قام بنشر أغسطس 15 (معدل) هذا هوالملف الخاص بالتعديل يوجد به مشكلة تحديث ارجاع كمية الى المخزن المحول منه فعال اما ارجاع الكميه من المخزن المحول الية غير مظبوط مثال شيت المخزون Set wsStock = Worksheets("Inventaire") مخزن1 الكمية المفترض 92 مخزن2 الكمية المفترض 75 والكمية المسترجعة من شيت المبيعات Set wsStock = Worksheets("Transferts") الكمية هى 5 الى شيت المخزون Set wsStock = Worksheets("Inventaire") بعد تحديث المخزون يكون مخزن1 الكمية المفترض 97 مخزن2 الكمية المفترض 70 ولاكن النتيجة فى شيت المخزون غير كدة بعد تحديث المخزون يكون مخزن1 الكمية المفترض 97 مخزن2 الكمية المفترض 80 تجد المشكلة فى الكمية المسترجعة فى مخزن2 تكون 70 بدل ان تزيد الكمية 5 لتكون 80 من اصل الكمية 75 امين مخزن3.xlsm تم تعديل أغسطس 15 بواسطه mahmoud nasr alhasany رابط هذا التعليق شارك More sharing options...
أفضل إجابة mahmoud nasr alhasany قام بنشر أغسطس 15 الكاتب أفضل إجابة مشاركة قام بنشر أغسطس 15 تم ايجاد المشكلة بحمدلله الخاص بتعديل الكمية وارجاعها للمخزنين سواء خصم اوزيادة فى احداهما يوجد كودين Private Sub CommandButton2_Click() ' ... rest of your code ... Dim wsSales As Worksheet, wsStock As Worksheet Dim lastRowSales As Long, lastRowStock As Long Dim i As Long, j As Long Dim invoiceNo As Long, fromStore As String, toStore As String, itemCode As String, quantity As Long, newQuantity As Long Dim quantityDiff As Long 'رقم الفاتورة invoiceNo = Val(TextBox2.Value) ' ComboBox1 المخزون الاول fromStore = ComboBox1.Value ' ComboBox2 المخزون الثانى toStore = ComboBox2.Value ' ComboBox1 رصيد المخزون الاول fromStore1 = stocktr.Value ' ComboBox2 رصيد المخزون الثانى toStore2 = stocktrr.Value 'شيت مبيعات Set wsSales = Worksheets("Transferts") 'شيت المخزون Set wsStock = Worksheets("Inventaire") 'ابحث عن الفاتورة في ورقة المبيعات lastRowSales = wsSales.Cells(wsSales.Rows.Count, "A").End(xlUp).Row For i = 2 To lastRowSales If wsSales.Cells(i, "A").Value = invoiceNo Then ' احصل على الكمية الجديدة من المستخدم (مثال: عن طريق TextBox) newQuantity = Val(TextBox1.Value) ' احسب فرق الكمية quantity = wsSales.Cells(i, "H").Value quantityDiff = newQuantity + quantity ' قم بتحديث الكمية في ورقة المبيعات wsSales.Cells(i, "H").Value = newQuantity wsSales.Cells(i, "k").Value = Now() ' تاريخ التعديل wsSales.Cells(i, "l").Value = Environ("Username") ' اسم المستخدم End If Next i ' ابحث عن الفاتورة في ورقة المخزون lastRowStock = wsStock.Cells(wsStock.Rows.Count, "A").End(xlUp).Row For j = 2 To lastRowStock If wsStock.Cells(j, "A").Value = fromStore Then ' احصل على الكمية الجديدة من المستخدم (مثال: عن طريق TextBox) newQuantity = Val(TextBox1.Value) quantity = wsStock.Cells(j, "D").Value quantityDiff = newQuantity - quantity ' قم بتحديث الكمية في ورقة المبيعات wsStock.Cells(j, "D").Value = newQuantity + fromStore1 ' تحديث الكميات في المخزون ' ... (نفس الكود السابق لإرجاع الكميات) ElseIf wsStock.Cells(j, "A").Value = toStore Then ' احصل على الكمية الجديدة من المستخدم (مثال: عن طريق TextBox) newQuantity = Val(TextBox1.Value) ' احسب فرق الكمية quantity = wsStock.Cells(j, "D").Value quantityDiff = newQuantity + quantity ' قم بتحديث الكمية في ورقة المبيعات wsStock.Cells(j, "D").Value = toStore2 - newQuantity wsStock.Cells(j, "J").Value = Now() ' تاريخ التعديل wsStock.Cells(j, "K").Value = Environ("Username") ' اسم المستخدم End If Next j MsgBox "تم تعديل الفاتورة وإرجاع الكميات بنجاح" End Sub Private Sub CommandButton2_Click() Dim wsSales As Worksheet, wsStock As Worksheet Dim lastRowSales As Long, lastRowStock As Long Dim i As Long, j As Long Dim invoiceNo As Long, fromStore As String, toStore As String, itemCode As String, quantity As Long, newQuantity As Long Dim quantityDiff As Long invoiceNo = Val(TextBox2.Value) ' ComboBox1 المخزون الاول fromStore = ComboBox1.Value ' ComboBox1 المخزون الاول toStore = ComboBox2.Value ' ComboBox1 قيمة المخزون الاول fromStore1 = stocktr.Value ' ComboBox2 قيمة المخزون الثانى toStore2 = stocktrr.Value Set wsSales = Worksheets("Transferts") Set wsStock = Worksheets("Inventaire") lastRowSales = wsSales.Cells(wsSales.Rows.Count, "A").End(xlUp).Row For i = 2 To lastRowSales If wsSales.Cells(i, "A").Value = invoiceNo Then newQuantity = Val(TextBox1.Value) quantity = wsSales.Cells(i, "H").Value quantityDiff = newQuantity + quantity wsSales.Cells(i, "H").Value = newQuantity wsSales.Cells(i, "k").Value = Now() ' تاريخ التعديل wsSales.Cells(i, "l").Value = Environ("Username") ' اسم المستخدم End If Next i lastRowStock = wsStock.Cells(wsStock.Rows.Count, "A").End(xlUp).Row For j = 2 To lastRowStock quantity = wsStock.Cells(j, "D").Value If wsStock.Cells(j, "A").Value = fromStore Then wsStock.Cells(j, "D").Value = newQuantity + fromStore1 ElseIf wsStock.Cells(j, "A").Value = toStore Then wsStock.Cells(j, "D").Value = toStore2 - newQuantity ' تم التعديل هنا wsStock.Cells(j, "J").Value = Now() ' تاريخ التعديل wsStock.Cells(j, "K").Value = Environ("Username") ' اسم المستخدم End If Next j MsgBox "تم تعديل الفاتورة وإرجاع الكميات بنجاح" End Sub امين مخزن4.xlsm 1 رابط هذا التعليق شارك More sharing options...
الردود الموصى بها
من فضلك سجل دخول لتتمكن من التعليق
ستتمكن من اضافه تعليقات بعد التسجيل
سجل دخولك الان