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

Foksh

الخبراء
  • Posts

    4967
  • تاريخ الانضمام

  • تاريخ اخر زياره

  • Days Won

    234

كل منشورات العضو Foksh

  1. يمكننا الإنتظار مشاركات جديدة .. فلا تستعجل بإغلاق الموضوع باختيار الإجابة 🙂
  2. طيب .. رغم أن الطلب تم تحقيقه من خلال Data Validation ، ولكن هذا لا يمنع من تجربة الفكرة التالية من خلال الأكواد . حيث تم دمج الحدث عند التغيير للورقة من :- If Target.Cells.Count > 1 Then Exit Sub If Not Intersect(Target, Range("B3:B3000")) Is Nothing Then With Target(1, 5) .Value = Date & " " & Time .EntireColumn.AutoFit End With End If ليصبح :- Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count > 1 Or Target.Row < 3 Then Exit Sub If Target.Column = 2 And Target.Value <> "" Then Target.Offset(0, 4).Value = Now If (Target.Column = 4 Or Target.Column = 5) And Trim(Me.Cells(Target.Row, "D").Value) = "بيع" Then Dim r As Long: r = Target.Row Dim itemCode As Variant: itemCode = Me.Cells(r, "B").Value Dim qty As Double: qty = Val(Me.Cells(r, "E").Value) If Not IsEmpty(itemCode) And qty > 0 Then Dim stockSheet As Worksheet: Set stockSheet = Worksheets("المخزن") Dim findCell As Range Set findCell = stockSheet.Range("B3:B800").Find(What:=itemCode, LookIn:=xlValues, LookAt:=xlWhole) If Not findCell Is Nothing Then Dim realAvailableStock As Double realAvailableStock = Val(stockSheet.Range("I" & findCell.Row).Value) + qty If qty > realAvailableStock Then MsgBox "• لا يمكنك إتمام عملية البيع هذه" & vbCrLf & vbCrLf & _ "• الصنــف: " & Me.Cells(r, "C").Value & vbCrLf & _ "• الرصيد المتاح حالياً: " & realAvailableStock & " قطعة" & vbCrLf & _ "• الكمية المطلوبة: " & qty & " قطعة", _ vbCritical + vbMsgBoxRight + vbMsgBoxRtlReading, "تجاوز الرصيد" Application.EnableEvents = False Me.Cells(r, "E").ClearContents Me.Cells(r, "E").Select Application.EnableEvents = True End If End If End If End If End Sub ملفك بعد التطبيق :- مخزن 1.xlsb
  3. لم أفهم المشكلة في المطلوب والتنفيذ .. فلو أدخلت قيمة أكبر من المتاح في رصيد الصنف في المخزن ، سيظهر لك رسالة التنبيه وستمنع ادخال الكمية 🤔 إلا إذا كان لك طلب آخر ولم توضحه جيداً أخي الكريم . علك توضح بشكل أكثر تفسيراً لمطلبك حتى لو كان شرحك بـ 100 سطر 😇 أو قد نجد مداخلة من أحد الأساتذة والأخوة بالتوضيح والحل دون استخدام الأكواد !!!
  4. طيب تمام ، جرب غير نوع الرسالة الى Stop :- بدلاً من :-
  5. لم أجرب مرفقك ، وكانت مداخلتي دون تجربة ملفك . والحمد لله الذي هداك بالعودة لهذا السطر
  6. مداخلة سريعة .. أعتقد أن السبب هو في جملة الإغلاق DoCmd.Quit ، وبما أنك أخفيت واجهة آكسيس ، فجملة الإغلاق هذه تجعل آكسيس يتخطى ويتجاوز الضغط والإصلاح لمنع تجمد أو حدوث Crash لواجهة آكسيس . لذا اعتقد ان تفعيل الخاصية يدوياً من خلال السطر :- Application.SetOption "Auto Compact", True في حدث عند التحميل أو الفتح ( حسب الحدث الذي تستدعي فيه جملة Hide Access Window يتم وضعه قبلها طبعاً ) في النموذج الأول ، وأيضاً استعمالها بالإستدعاء نفسه قبل جملة الاغلاق DoCmd.Quit في أي زر يقوم بإغلاق الواجهة .. وستلاحظ أن الخيار يبقى مفعلاً في القاعدة .
  7. هل ظهرت لك رسالة التنبيه بأن الكمية غير صحيحة ؟؟ هذه محاولتي .. إلا إذا أردت الذهاب إلى الأكواد والـ VBA 😅
  8. ما تم تعديله على الملف :- عمود الوارد H (إجمالي المشتريات) في ورقة المخزن :- =SUMIFS('الحركات اليومية'!$E$3:$E$800,'الحركات اليومية'!$B$3:$B$800,$B3,'الحركات اليومية'!$D$3:$D$800,"شراء") عمود الصادر G (إجمالي المبيعات) في ورقة المخزن :- =SUMIFS('الحركات اليومية'!$E$3:$E$800,'الحركات اليومية'!$B$3:$B$800,$B3,'الحركات اليومية'!$D$3:$D$800,"بيع") في ورقة الحركات اليومية تم ضبط Data Validation للعمود E ليصبح :- =OR($D3="شراء",$E3<=VLOOKUP($B3,المخزن!$B$3:$I$800,8,FALSE)) أيضاً في الـ Data Validation تم ضبط رسالة الخطأ لتصبح :- أيضاً في الخلية C3 في ورقة الحركات اليومية ، تم ضبط الخلية لتجلب اسم الصنف تلقائياً من خلال المعادلة :- =IFERROR(VLOOKUP(B3,المخزن!$B$3:$C$800,2,FALSE),"") الآن جرب ملفك بإدخال حركة شراء لصنف معين ، وحركة بيع لهذا الصنف ، ولاحظ عملية تحديث الرصيد له في ورقة المخزن . ومن ثم جرب ادخال حركة بيع لكمية أكبر من رصيد الصنف هذا وراقب النتيجة . الملف جربه علي أكون قد وُفقت في تعديلاتي البسيطة مخزن 1.xlsb
  9. جاري تعديل الملف ليشمل تحديث البيع والشراء وتحديث كمية الرصيد .... إلخ
  10. وعليكم السلام ورحمة الله وبركاته .. هل الصورة التالية كنتيجة صحيحة ؟؟ إن كانت النتيجة صحيحة ، فالمعادلة :- =IF(C3="","",IF(I3<=0,"نفذ المخزون بالفعل",IF(I3<=3,"أوشك المخزون على النفاذ",""))) طبعاً هذا إذا كان منطقك التجاري هو: الرصيد ≤ 0 :- نفذ المخزون بالفعل الرصيد من 1 إلى 3 :- أوشك المخزون على النفاذ الرصيد أكبر من 3 :- لا تعرض شيئاً = فارغ
  11. الفكرة جميلة ، والتنفيذ سليم بنسبة كبيرة . وقد كان لي تطرق سابق لفكرة مشابهة ولكن على عكسك تماماً . حيث كانت تجربتي من خلال أداة كاسر ملفات آكسيس Accde - واستخراج محتوى قواعد البيانات نسخة 32 | نسخة 64 . إلا أن فكرتك قابلة للإختراق والكسر لأسف . شكراً لك على مجهودك
  12. وعليكم السلام ورحمة الله وبركاته .. يظهر الخطأ التالي عند محاولة فتح ملفك المرفق في الاصدار 2019 وفي الإصدار 2010
  13. سؤال.. هل يوجد لديكم شريط ريبون في اي مشروع يقوم بعرض قائمة منسدلة ؟ وما هي المشاكل التي قد تواجه المستخدم في ضبط كومبوبوكس على سبيل المثال ؟؟ وهل له استخدام محدد في مشروعك ؟؟؟
  14. وعليكم السلام ورحمة الله وبركاته .. جرب التعديل التالي على الزر cmdOK في النموذج frmTimeTo :- Private Sub cmdOK_Click() Dim strDuration As String Dim frmTarget As Form Dim strTime As String Dim blnValid As Boolean Dim Hours As Integer Dim Minutes As Integer Dim TotalMinutes As Long On Error GoTo ErrorHandler '========================== ' التحقق من إدخال الوقت '========================== If Trim(Nz(Me.mdfo, "")) = "" Then MsgBox "أدخل التوقيت", vbExclamation, "تنبيه" Me.mdfo.SetFocus Exit Sub End If strTime = Trim(Me.mdfo) '========================== ' التحقق من التنسيق 00:00 '========================== If Len(strTime) = 5 And Mid(strTime, 3, 1) = ":" Then Hours = Val(Left(strTime, 2)) Minutes = Val(Right(strTime, 2)) If Hours >= 0 And Hours <= 23 _ And Minutes >= 0 And Minutes <= 59 Then blnValid = True End If End If If Not blnValid Then MsgBox "يجب إدخال الوقت بالتنسيق (00:00)" & vbCrLf & _ "مثال: 08:30 أو 14:45", _ vbCritical, "تنسيق وقت خاطئ" Me.mdfo.SetFocus Exit Sub End If '========================== ' النموذج الهدف '========================== Set frmTarget = Forms!Form1.Form frmTarget!Horair = strTime '========================== ' التأكد من وجود وقت البداية '========================== If Trim(Nz(frmTarget!Horaire, "")) = "" Then MsgBox "أدخل التوقيت", vbExclamation Exit Sub End If '========================== ' حساب المدة '========================== strDuration = GetDuration(frmTarget!Horaire, frmTarget!Horair) 'تحويلها إلى دقائق Hours = Val(Split(strDuration, ":")(0)) Minutes = Val(Split(strDuration, ":")(1)) TotalMinutes = Hours * 60 + Minutes '========================== ' يجب أن تكون ساعة واحدة فقط '========================== If TotalMinutes <> 60 Then MsgBox "يوجد خطأ في التوقيت", vbCritical, "تنبيه" frmTarget!Horair = Null frmTarget!Time_Period = Null Exit Sub End If '========================== ' تخزين المدة '========================== frmTarget!Time_Period = strDuration DoCmd.Close acForm, Me.Name, acSaveNo Exit Sub ErrorHandler: MsgBox "خطأ: " & Err.Description, vbCritical End Sub
  15. وعليكم السلام ورحمة الله وبركاته .. بدايةً أهلاً بك عضواً جديداً معنا . ونتمنى أن تجد الفائدة والمعلومة التي تبحث عنها . أخي الكريم لتحقق غايتك بإيجاد حل لطلبك ؛ دائماً حاول ارفاق ملف من واقع عملك الذي ستطبق عليه أي حلول ومساهمات يقدمها لك الإخوة هنا . وعلى أن يحتوي بيانات وهمية شكلية وليس فارغاً . و تجنب نشر أي معلومات شخصية أو خاصة . مع مراعاة التقيد بشروط المنتدى بحيث تشرح شرحاً وافياً للطلب أو المشكلة ، وعلى أن يكون العنوان واضحاً وصريحاً ويدل على المشكلة . أمنياتي لك بالفائدة والإستفادة
  16. كنت انتظر هذه الجملة 😉 .. هل النتيجة الآن ترضيك ؟؟
  17. أخي جو .. الجزء المسؤول عن ضبط وتنسيق العناوين يقع كما هو واضح في الكود الذي شاركته ، داخل الجزء التالي :- With xlWS.Range(xlWS.Cells(1, 1), xlWS.Cells(1, lastCol)) .Interior.Color = RGB(52, 152, 219) .Font.Color = RGB(255, 255, 255) .Font.Bold = True .HorizontalAlignment = -4108 .VerticalAlignment = -4108 End With يعني رح نعدل الجزء ونقسمه على 3 مراحل ، لأنه في طلبك انت تريد بعض العناوين بالشكل الطول والباقي سيبقى كما هو في أصله .. لذا جرب ما يلي ، كونك لم ترفق ملف للتجربة وضمان تأكيد الخطوة . فقط استبدل الجزء السابق بالجزي التالي :- ' تنسيق العناوين With xlWS.Range(xlWS.Cells(1, 1), xlWS.Cells(1, lastCol)) .Interior.Color = RGB(52, 152, 219) .Font.Color = RGB(255, 255, 255) .Font.Bold = True .HorizontalAlignment = -4108 .VerticalAlignment = -4108 End With With xlWS.Range(xlWS.Cells(1, 6), xlWS.Cells(1, lastCol)) .Orientation = 90 'هنا طبعاً زاوية دوران النص ، وتعدلها زي ما بتحب .WrapText = True End With ' وهنا لتحديد ارتفاع الصف الأول حسب أطول عنوان Dim MaxLen As Long Dim TxtLen As Long Dim i As Long For i = 6 To lastCol TxtLen = Len(CStr(xlWS.Cells(1, i).Value)) If TxtLen > MaxLen Then MaxLen = TxtLen Next i xlWS.Rows(1).RowHeight = MaxLen * 6 + 10 على العموم جرب ، وأخبرنا بالنتيجة ..
  18. العفو أخي @jo_2010 ..
  19. أعلم أنك قمت بتجربة تغير اسم شركة في الجدول ، ووجدت أن الاسم لم يتغير في التقرير ، لذا الطلب الثاني وهو ضبط اسم الشركة عند تغييرها في الجدول بحيث يتم تعديل الاسم تلقائياً في التقرير .. قمت بتغيير خطة التنفيذ بإجراء بسيط بحيث اعتمدت على أن تكون مربعات النص قيمها مربوطة برقم معرف شركة التأمين . ثم قمت بتغيير أسماء الليبلات لكل شركة تأمين داخل التقرير ليصبح التوحيد بالاسم من Lbl1 إلى Lbl17 . وعليه ولجلب الاسم وبدالة DlookUp استعملت الحلقة التكرارية التالية :- Private Sub PageHeaderSection_Format(Cancel As Integer, FormatCount As Integer) Dim i As Integer For i = 1 To 17 Me.Controls("Lbl" & i).Caption = Nz(DLookup("[Name_comp]", "ALL_Companys", "[ID]=" & i), "") Next i End Sub ملفك بعد تنفيذ الشق الثاني :- JO2026.accdb
  20. فكرة جميلة ، وقد تكون من الإضافات التي يمكن للمطور تحوير الفكرة الأساسية من الأداة ليطوعها كيفما يريد . كفكرة القائمة المختصرة المؤقتة او المقرونة بنموذج او تقرير محدد. ولكن بحكم أن الأداة حالياً ما زالت قيد الإنشاء و التطوير ، فقد أقوم بتمكين المستخدم لها بإن يقرر إظهار / إخفاء أشرطة آكسيس الأساسية عند تصديره للشريط بعد بناءه الى قاعدة بياناته الشخصية.
  21. لفتة جميلة الى هذه الفكرة .. ولكن انظر لهذه النتيجة التي ستمنع ظهور اي خصائص 😉 . هل هذه كافية ؟؟ أم هذه النتيجة :- شكراً لك أخي أبو الحسن
  22. تفضل أخي جو ، محاولتي البسيطة بحيث قمت بإنشاء استعلام آخر باسم Query1 ، وجعلته مصدر للتقرير .. وتركت التنسيق لك كما تريده انت وحاجتك في التصميم . JO2026.accdb
  23. 😅 أعلم ، ولكني وددت المشاركة لتحريك الموضوع
  24. أهلاً أخي جو .. بعد تحميل المرفق ، لم أفهم أين مشكلتك بالضبط ، فقط قمت بإضافة سجل جديد عشوائي ، وفتحت الاستعلام بعد تغيير اسم شركة التأمين كتجربة من "مصر للتأمين" لتصبح "المصرية للتامين" ، وكانت نتيجة الاستعلام "Qry_Total" :- مقصدي أن الاستعلام أولاً يقوم بالمطلوب حتى عند تعديل اسم شركة التأمين .. أما التقرير فإن شاء الله ستحصل على طلبك قريباً .. ما لم يسبقني أحد ..
×
×
  • اضف...

Important Information