-
Posts
207 -
تاريخ الانضمام
-
تاريخ اخر زياره
السمعه بالموقع
32 Excellentعن العضو mahmoud nasr alhasany
البيانات الشخصية
-
Gender (Ar)
ذكر
-
Job Title
ةىلا
-
البلد
وى
-
الإهتمامات
نزو
اخر الزوار
بلوك اخر الزوار معطل ولن يظهر للاعضاء
-
مشكلة فى تنسيق التاريخ او اضافة المخزون
mahmoud nasr alhasany replied to mahmoud nasr alhasany's topic in منتدى الاكسيل Excel
تم الحل ولاكن بكود مختلف اخر Sub UpdateStock() Dim ws As Worksheet Dim lastRow As Long, foundRow As Long Dim item As String, fromStore As String, selectedDate As Date Dim quantity As Long Dim foundMatch As Boolean Set ws = ThisWorkbook.Sheets("Sheet1") item = ComboBox4.Value fromStore = ComboBox2.Value selectedDate = CDate(TextBox15.Value) quantity = CLng(TextBox8.Value) If quantity <= 0 Then MsgBox "الكمية المحولة يجب أن تكون أكبر من الصفر", vbExclamation Exit Sub End If foundMatch = False ' Flag to indicate if a match is found With ws.Range("A2:G" & ws.Cells(ws.Rows.Count, "A").End(xlUp).Row) Set foundCell = .Find(What:=item, LookIn:=xlValues, LookAt:=xlWhole, _ SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, SearchFormat:=False) If Not foundCell Is Nothing Then firstAddress = foundCell.Address Do If ws.Cells(foundCell.Row, 3).Value = fromStore And _ ws.Cells(foundCell.Row, 7).Value = selectedDate Then ws.Cells(foundCell.Row, 6).Value = ws.Cells(foundCell.Row, 6).Value + quantity foundMatch = True Exit Do End If Set foundCell = .FindNext(After:=foundCell) Loop While Not foundCell Is Nothing And foundCell.Address <> firstAddress End If ' Add new row only if no exact match was found If Not foundMatch Then lastRow = ws.UsedRange.Rows.Count + 1 With ws.Rows(lastRow) .Cells(1).Value = item .Cells(2).Value = ComboBox3.Value .Cells(3).Value = fromStore .Cells(4).Value = TextBox7.Value .Cells(5).Value = TextBox1.Value .Cells(6).Value = TextBox8.Value .Cells(7).Value = TextBox15 End With MsgBox "تم إضافة صف جديد بنجاح", vbInformation ElseIf foundMatch Then MsgBox "تم تحديث الكمية في الصف الموجود", vbInformation End If End With End Sub Private Sub CommandButton4_Click() Call UpdateStock End Sub- 1 reply
-
- 1
-
السلام عليكم ورحمة الله وبركاته الرجاء مساعدتى فى اضافة الكمية للمخزون على حسب كود الصنف والمخزن و تاريخ الصلاحية المطابقة لها اما اذا كانت يوجد صلاحية جديده للمنتج فيتم اضافة سطر جديد اريد تكرار الصنف والمخزن عادى مادام يوجد تاريخ صلاحية مختلفة وليست مطابقة للمخزن والصنف وتاريخ الصلاحية معا المشكلة فى فورم userform4 المشكلة فى التاريخ selectedDate = CDate(TextBox15.Value) فعندما يتوافق كود الصنف والمخزن وصلاحية المنتج معا يتم اضافة الكمية لهذ الصنف اذا كانت التاريخ متوافق ولاكن لو كان يوجد صلاحية تاريخ جديد يتم اضافة سطر جديد كود صنف ومخزن وكمية وصلاحية فوجد ان الكمية تضاف للمخزن اذا كانت الصلاحية متوافقة مثل 01/01/2024 ولاكن لو كانت صلاحية اخرى مثل اى تاريخ 02/01/2024 او 03/01/2024 والخ يتم اضافة سطر جديد مع العلم ان التاريخ لهذا الصنف والمخزن موجود والمفروض يتم اضتافة الكمية للمخزون وليس اضافة سطر جديد Private Sub CommandButton4_Click() Dim ws As Worksheet Dim lastRow As Long Dim item As String, fromStore As String Dim selectedDate As Date ' تعريف المتغير كـ Date مباشرة Dim quantity As Long Dim foundRow As Long Set ws = ThisWorkbook.Sheets("sheet1") ' تحسين: استخدام Find بدلاً من قراءة المصفوفة بالكامل With ws.columns("A") ' البحث في العمود A فقط lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).row item = ComboBox4.Value fromStore = ComboBox2.Value selectedDate = CDate(TextBox15.Value) ' لا داعي لـ Format هنا، CDate يتعامل مع التواريخ بشكل جيد quantity = CLng(TextBox8.Value) If quantity <= 0 Then MsgBox "الكمية المحولة يجب أن تكون أكبر من الصفر", vbExclamation Exit Sub End If ' البحث عن التطابق Set foundCell = .Find(What:=item, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False) If Not foundCell Is Nothing Then foundRow = foundCell.row ' التحقق من تطابق باقي الشروط في نفس الصف If ws.Cells(foundRow, 3).Value = fromStore And ws.Cells(foundRow, 7).Value = selectedDate Then ws.Cells(foundRow, 6).Value = ws.Cells(foundRow, 6).Value + quantity 'تحديث مباشر للكمية المخزون في الخلية على حسب نوع المخزن وكود الصنف و مطابقة التاريخ معا ' Exit Sub 'الخروج من الإجراء بعد التحديث End If End If End With ' إذا لم يتم العثور على تطابق المخزن وكود الصنف بسبب تاريخ صلاحية جديدة، يتم إضافة صف جديد lastRow = lastRow + 1 With ws.Rows(lastRow) ' استخدام With لتسهيل الكتابة .Cells(1).Value = item .Cells(2).Value = ComboBox3.Value .Cells(3).Value = fromStore .Cells(4).Value = TextBox7.Value .Cells(5).Value = TextBox1.Value .Cells(6).Value = TextBox8.Value .Cells(7).Value = selectedDate End With ' اضافة البيانات سواء كانت تحويلات او شراء الى ورقة تسجيل البيانات Dim wss As Worksheet Dim lastRow1 As Long Dim serialNumber As Long serialNumber = 1 ' تحديد ورقة العمل (قم بتغيير "Sheet1" إذا لزم الأمر) Set wss = ThisWorkbook.Sheets("تسجيل البيانات") ' العثور على آخر صف يحتوي على بيانات في العمود A lastRow1 = wss.Cells(Rows.Count, "A").End(xlUp).row serialNumber = lastRow1 '+ 1 ' كتابة القيم في الصف التالي lastRow1 = lastRow1 + 1 wss.Cells(lastRow1, "A").Value = TextBox5 wss.Cells(lastRow1, "B").Value = TextBox6 wss.Cells(lastRow1, "C").Value = ("شراء") wss.Cells(lastRow1, "D").Value = ComboBox4.Value wss.Cells(lastRow1, "E").Value = ComboBox3.Value wss.Cells(lastRow1, "F").Value = ComboBox2.Value wss.Cells(lastRow1, "g").Value = ComboBox1.Value wss.Cells(lastRow1, "h").Value = TextBox7.Value wss.Cells(lastRow1, "i").Value = TextBox1.Value wss.Cells(lastRow1, "j").Value = TextBox8.Value wss.Cells(lastRow1, "k").Value = TextBox9.Value wss.Cells(lastRow1, "l").Value = TextBox10.Value wss.Cells(lastRow1, "m").Value = TextBox11.Value wss.Cells(lastRow1, "n").Value = TextBox12.Value wss.Cells(lastRow1, "o").Value = TextBox15.Value wss.Cells(lastRow1, "p").Value = Format(Now, "DDDD MM/DD/YYYY HH:MM:SS AM/PM") 'dddd, dd mm, yyyy hh:mm:ss AM/PM End Sub stock.xlsm
-
التنقل بين السجلات برقم الفاتورة
mahmoud nasr alhasany replied to mahmoud nasr alhasany's topic in منتدى الاكسيل Excel
الف شكر 1 / محمد هشام. احسنت والله -
التنقل بين السجلات برقم الفاتورة
mahmoud nasr alhasany replied to mahmoud nasr alhasany's topic in منتدى الاكسيل Excel
للاسف لقد لاحظت يوجد خطاء فى التنقل بين البيانات فى الفورم اريد تنقل البيانات مثل ترتيب هذا الاعمدة Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("تسجيل البيانات") TextBox7.Text = ws.Cells(rowNum, 2).Value ComboBox1.Text = ws.Cells(rowNum, 4).Value ComboBox2.Value = ws.Cells(rowNum, 5).Value ComboBox3.Value = ws.Cells(rowNum, 6).Value ComboBox4.Value = ws.Cells(rowNum, 7).Value TextBox3.Text = ws.Cells(rowNum, 8).Value TextBox4.Text = ws.Cells(rowNum, 9).Value TextBox5.Text = ws.Cells(rowNum, 10).Value TextBox6.Text = ws.Cells(rowNum, 11).Value ComboBox5.Value = ws.Cells(rowNum, 12).Value -
التنقل بين السجلات برقم الفاتورة
mahmoud nasr alhasany replied to mahmoud nasr alhasany's topic in منتدى الاكسيل Excel
احسنت 1 / محمد هشام. الف شكر لك -
احسنت ا / محمد هشام.
-
السلام عليكم ورحمة الله وبركاته الرجاء مساعدتى فى هذا العمل اريد التنقل بين السجلات برقم الفاتورة فقط دون غيرها من ارقام الفواتير الاخرى فى textbox8 من خلال SpinButton2_SpinDown SpinButton2_SpinUp Private Sub TextBox8_Change() Dim ws As Worksheet Dim rng As Range Dim foundRows As New Collection Dim i As Long Set ws = ThisWorkbook.Sheets("تسجيل البيانات") Set rng = ws.Range("A2:L10000") ' foundRows.RemoveAll For Each cell In rng.Columns(1).Cells If cell.Value = TextBox8.Text Then foundRows.ADD cell.Row End If Next cell If foundRows.Count = 0 Then MsgBox "No matching records found." Exit Sub End If ' Display the first match i = 1 DisplayRecord (foundRows(i)) End Sub Private Sub SpinButton2_SpinDown() If i > 1 Then i = i - 1 DisplayRecord (foundRows(i)) End If End Sub Private Sub SpinButton2_SpinUp() If i < foundRows.Count Then i = i + 1 DisplayRecord (foundRows(i)) End If End Sub Private Sub DisplayRecord(rowNum As Long) Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("تسجيل البيانات") TextBox7.Text = ws.Cells(rowNum, 2).Value ComboBox1.Text = ws.Cells(rowNum, 4).Value ComboBox2.Value = ws.Cells(rowNum, 5).Value ComboBox3.Value = ws.Cells(rowNum, 6).Value ComboBox4.Value = ws.Cells(rowNum, 7).Value TextBox3.Text = ws.Cells(rowNum, 8).Value TextBox4.Text = ws.Cells(rowNum, 9).Value TextBox5.Text = ws.Cells(rowNum, 10).Value TextBox6.Text = ws.Cells(rowNum, 11).Value ComboBox5.Value = ws.Cells(rowNum, 12).Value End Sub textbox8 بحث والتنقل بين السجلات برقم الفاتورة.xlsm
-
SendKeys F4 / F2
mahmoud nasr alhasany replied to mahmoud nasr alhasany's topic in منتدى الاكسيل Excel
تم عمل المطلوب قنم بوضع الاسم فى الفورم 2 textbox3 ثم قم باختيار من لوحة المفاتيح الامر F4 للانتقال بوضع الاسم الذى تم اختيارة فى listbox1 من خلال انتقال الاسهم من لوحة المفاتيح بعد الامر مباشرة F4 وعند اختيار الاسم المحدد قم باختيار الامر F2 للانتقال الى الفورم 1 وشكرا شاشة عميل بحث(1).xlsm -
SendKeys F4 / F2
mahmoud nasr alhasany replied to mahmoud nasr alhasany's topic in منتدى الاكسيل Excel
الف شكر استاذ / أبومروان انه يعمل اريد ان تساعدنى فى ان افعل الاسهم بتاعت الكيبورت للانتقال اعلى واسفل من خلال الليست بوكس بعد تحديد اول بيانات الاسم فى الليست بوكس شاشة عميل بحث(1).xlsm -
السلام عليكم ورحمة الله وبركاتة تحية طيبة وبعد اريد مساعدتى فى تشغيل تشغيل مفتاح F4 في حدث فورم VBA Excel والانتقال الى القائمة فى LISTBOX1 وايضا تشغيل مفتاح F2 في حدث فورم VBA Excel والانتقال الى Userform1 الى حدث combobox1 من خلال تحديد الاسم الموجود فى LISTBOX1 فى Userform2 كمثال فى Userform2 يوجد textbox3 اضع اول حرف او اسم فى textbox3 وعند الضغط على مفتاح F4 ينتقل الى اول الاسماء فى LISTBOX1 وعند تحديد اسم فى LISTBOX1 وعند الضغط على مفتاح F2 ينتقل بعد تحديد الاسم فى LISTBOX1 الى Userform1 الى حدث combobox1 وشكرا شاشة عميل بحث.xlsm
-
هذا الملف بعد تعديله نأسف على الخطاء وهذا الكود لايقوم بعرض 12 عمود ولاكنه يعرض 10 فقط Private Sub CommandButton7_Click() Dim ws As Worksheet Dim lastRow As Long Dim searchValue1 As String Dim searchValue2 As String Dim currentRow As Long Dim DateMin As Date Dim DateMax As Date Dim includeDates As Boolean ' تحديد ورقة العمل Set ws = Worksheets("Sheet2") ' الحصول على القيم من عناصر التحكم searchValue1 = ComboBox4.value searchValue2 = ComboBox5.value If IsDate(TextBox9.value) Then DateMin = CDate(TextBox9.value) If IsDate(TextBox10.value) Then DateMax = CDate(TextBox10.value) includeDates = CheckBox1.value ' تحديد قيمة مربع الاختيار Dim userEndDate As Date ' التحقق من صحة التاريخ المدخل في TextBox2 If IsDate(TextBox10.value) Then userEndDate = CDate(TextBox10.value) If userEndDate > Date Then MsgBox "تاريخ النهاية لا يمكن أن يكون أكبر من تاريخ اليوم." Exit Sub End If End If ' تحديد الصف الأخير lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row ' مسح قائمة النتائج وتحديد عرض الأعمدة With ListBox1 .Clear .ColumnCount = 12 .ColumnWidths = "35;50;45;50;65;40;35;40;45;40;45;40" .Font.Size = 6 End With currentRow = 0 For i = 2 To lastRow If (LCase(ws.Cells(i, 3).value) = LCase(searchValue1) Or searchValue1 = "ALL") And _ (LCase(ws.Cells(i, 4).value) = LCase(searchValue2) Or searchValue2 = "ALL") And _ ws.Cells(i, 3).value Like "*" & searchValue1 & "*" And _ (Not includeDates Or (ws.Cells(i, 2) >= DateMin And ws.Cells(i, 2) <= DateMax)) Then ' إضافة البيانات إلى القائمة ListBox1.AddItem ListBox1.List(currentRow, 0) = ws.Cells(i, 1).value ListBox1.List(currentRow, 1) = Format(ws.Cells(i, 2).value, "dd/mm/yyyy") ListBox1.List(currentRow, 2) = ws.Cells(i, 3).value ' ListBox1.List(currentRow, 3) = ws.Cells(i, 4).value ' ListBox1.List(currentRow, 4) = ws.Cells(i, 5).value ' ListBox1.List(currentRow, 5) = ws.Cells(i, 6).value ' ListBox1.List(currentRow, 6) = ws.Cells(i, 7).value ListBox1.List(currentRow, 7) = ws.Cells(i, 8).value ' ListBox1.List(currentRow, 8) = ws.Cells(i, 9).value ' ListBox1.List(currentRow, 9) = ws.Cells(i, 10).value ' ListBox1.List(currentRow, 10) = ws.Cells(i, 11).value ' ListBox1.List(currentRow, 11) = ws.Cells(i, 12).value currentRow = currentRow + 1 End If Next i If ListBox1.ListCount = 0 Then MsgBox "لم يتم العثور على نتائج" End If End Sub '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' كود اخر بحث Private Sub CommandButton6_Click() On Error Resume Next Dim ws As Worksheet Dim lastRow As Long Dim i As Long, j As Long Dim startDate As Date, endDate As Date ' تحديد ورقة العمل Set ws = ThisWorkbook.Sheets("Sheet2") ' تحديد النطاق الكامل للبيانات lastRow = ws.Cells(Rows.Count, "A").End(xlUp).Row ' تحويل التواريخ من نص إلى تنسيق التاريخ startDate = CDate(TextBox9.value) endDate = CDate(TextBox10.value) ' مسح البيانات السابقة من ListBox ListBox1.Clear ' تحديد عدد الأعمدة في ListBox ListBox1.ColumnCount = 12 ' ملء ListBox بالبيانات التي تطابق المعايير For i = 2 To lastRow If ws.Cells(i, "b").value >= startDate And ws.Cells(i, "b").value <= endDate And ws.Cells(i, "c").value = ComboBox4.value And _ ws.Cells(i, "d").value = ComboBox5.value Then ' قم بتغيير أرقام الأعمدة إذا لزم الأمر ListBox1.AddItem For j = 1 To 12 If Not IsEmpty(ws.Cells(i, j)) Then ListBox1.List(ListBox1.ListCount - 1, j - 1) = CStr(ws.Cells(i, j).value) ' تحويل القيمة إلى نص إذا لزم الأمر End If Next j End If Next i End Sub ListBox1.ColumnCount = 12.xlsm
-
اهلا وسهلا استاذنا / محمد هشام تقصد For i = 2 To lastRow If Trim(ws.Cells(i, "d").value) = ComboBox5.value Then ComboBox4.value = ws.Cells(i, "c").value Exit For End If Next i شكرا على الملاحظة ولاكن توجد مشكلة عرض الاعمدة وفقا لتاريخ والشروط لايتم لانها تعرض 10 اعمدة بدل من 12 لو وضعنا خاصية On Error Resume Next