اذهب الي المحتوي
أوفيسنا

علي السحيب

المشرفين السابقين
  • Posts

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

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

مشاركات المكتوبه بواسطه علي السحيب

  1. المجموع في السطر المتحرك يزداد بإدخال المبالغ ولكن عند حذف المبلغ لا ينقص بشكل فوري !

    الكود يعمل فقط عن الإنتهاء من إدخال بيانات السجل الجديد .. ولكن هذا لا يمنع من إمكانية تطوير الكود مستقبلاً.

    ـ بالنسبة لقائمة المجاميع لماذا لاتستوعب مزيدا من العملاء الجدد ؟

    تم ربط فرز أسماء العملاء وأرصدتهم بالكود.

    ـ ما فائدة الجمع في الخلية F26 ؟

    كنت قد وضعتها للتأكد من سلامة عملية الجمع التي يقوم بها الكود ونسيت أن أمسحها.

    شاهد المرفق،

    _________________.rar

  2. تم تطبيق الشروط على الخلايا المعنية عن طريق الكود ..

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

    شاهد المرفق،

    _________________________________________________________________.rar

  3. ـوهنا بودي أن أستفسر : هل إذا تغير السطر الأول من الكود يؤثر على أداء الكود ؟ فمثلا لو استبدلنا السطر ( Sub SysDate() ) بالسطر (Sub SysDateAndTime() )

    في هذا الكود :

    تغير إسم الكود لا يؤثر على عمله .. ولكن قد يؤثر على عمل أكواد أخرى إذا كان عملها مرتبط بالكود الذي تم تغيير إسمه

    وأيضاً إذا كان الكود مرتبط بزر موجود على ورقة العمل فإن تغيير إسم الكود يبطل عمل الزر المرتبط به لأنه يظل مرتبط بإسم الكود السابق .. لذا لا بد من تنشيط الزر عبر الضغط عليه بالزر الأيمن .. ثم إختيار إسم الكود الجديد المُراد ربطه بالزر من قائمة الأكواد ثم الضغط على موافق .. وعندها تتم عملية الربط.

    Sub SysDate()

    ActiveCell = Date

    End Sub

    لماذا هذا الكود لايتقبل تبديل السطر الأول رغم أنه يقبل أي إسم آخر مع أني قمت بحذف الكود الخاص بعنوان الكود الجديد ؟ على أي حال ...

    يمكنك تبديل السطر الأول .. ولكن قبلها تأكد أن السطر الجديد الذي كتبته هو كود صحيح وليس خاطئ .. فإذا كان خاطئ فلن يتم تقبله.

    ما المقصود من إدخال البيانات للمرة الأولى ؟

    أي وقت إدخال بيانات السجل كامله

    ثم اني لأول مرة أعلم أن التاريخ المدرج عن طريق كود سوف يتغير مع التحرير !

    وهل يشمل كلامكم إستخدام الدوال Date للتاريخ و Time للوقت و Now أم أن مايتم إدراجه بها ثابت ؟

    علما أني قمت بتحرير بعض الخلايا بعد إدراج التاريخ والوقت فيها بالزر المتصل بالأكواد من المرفقات الأخيرة وماقبلها بالنقر فيها مرتين ثم ضغطت إنتر فلم يتغير الوقت أوالتاريخ ! بل هو ثابت مثل تواريخ ctrl+ ك تماما .

    ما قصدته لا ينطبق على الأكواد التي تقوم بإدراج التاريخ أو الوقت عند الضغط على زر معين .. ولكن ما عنيته هو الأكواد التي تقوم بإدراج التاريخ أو الوقت بمجرد الكتابة في خلية معينة .. وهناك موضوع ومناقشة طويله تمت بين وبين الآستاذ تامر بهذا الخصوص.

    مثلاً .. أفرض أنه يتم إرداج التاريخ الحالي في الخلية B1 .. بعد الكتابة في الخلية A1 ..

    فلو أن قمت في أحد الأيام بإدخال بيانات في A1 .. سيتم إدراج تاريخ الحالي في B1

    ولو قمت في يوم آخر بالنقر المزدوج على الخلية A1 .. وبدون تغيير محتواها .. فإنه سيتم إدراج تاريخ اليوم الذي قمت فيه بالنقر المزدوج علي الخلية A1 في الخلية B1 .. رغم أنك لم تغير محتواها!!

    وهذا شيء غير منطقي .. وهذا بالضبط ما لا يجعلني أستخدم دوال التاريخ والوقت الموجودة داخل الفيجوال بيسك في مثل هذه الحالات .. وأستعيض عنها بإدراج التاريخ والوقت عن طريق لوحة المفاتيح .. أو بزر كما في المرفق الموجود في مشاركتي السابقة.

    على فكرة وللمعلومية للأخ خبور .. وضع الكلمة TRUE داخل الصيغة أو حذفها لن يغير من نتيجة الصيغة.

    هل أفهم من ذلك أن جدول التوافق للأخ خبور سليم ؟ رغم وجود الكلمة TRUE في الخلية L18 ؟

    نعم الجدول سليم ولا غبار عليه ... ما أقصده أنه في الجزء المتعلق بالدالة ISERROR من الدالة IF .. ليس من الضروري وضع كلمة TRUE .. أو FALSE بعد الجزئية الخاصبة بالدالة ISERROR .. لأن نتجية الدالة المذكورة إما أن تكون TRUE أو FALSE .. وبما أنه تم وضعها في الجزء الأول من الدالة IF .. فإنه وبشكل تلقائي سيتم الرجوع لها فقط إذا كانت نتيجتها TRUE ..

    والرابط التالي به موضوع قمت بالرد عليه فيما مضى.

    http://www.officena.net/ib/index.php?showtopic=9985&hl=

    وعلى العموم أعجبتني الأزرار الأخيرة فقط أود تذكيركم بوضع شرط يجعل الإدراج ممتنعا عند وجود بيانات في الخلية .

    تم التعديل .. شاهد المرفق،

    ________________________________________________.rar

  4. في المرفق لايسمح بإدخال السعر إلا إذا كان هو نفس السعر الأساسي أو ما بين السعر الأساسي - 025. و السعر الأساسي + 025.

    ويتم كذلك تلوين الخلية التي لم ينطبق عليها الشرط باللون الأحمر،

    شاهد المرفق،

    _________________________________________________________________.rar

  5. - ربما لاحظتم عند مانريد كتابة سجل جديد نبدأ من أول خلية فارغة تحت آخر سجل غير فارغ ،

    وتلك الخلية كما في المرفق الأخير خلية إدخال إسم العميل (A20) وعندما ندخل الإسم ونضغط

    إنتر فإنه على الفور يتم التركيز على الخلية (A21) وينفتح سجل جديد ! ! هذا غير مطلوب ،

    المطلوب : بعد ضغط إنتر يتم التركيز على خلية إدخال المبلغ وهي (B20) ثم يتم التركيز على

    خلية إدخال التاريخ وهي (C20) وبعد إدخال التاريخ فيها وضغط إنتر حينئذن يتم الإنتقال إلى

    الخلية (A21) لفتح سجل جديد وهكذا..

    2- يفترض أننا إذا قمنا بإدخال إسم عميل جديد يتم إضافته إلى قائمة المجاميع بحيث تخرج نتيجة

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

    إدخال إسم عميل جديد وهكذا .

    3 - أنتم تعلمون أن العمود B مهيء لإدخال مبالغ بشكل مستمر وقد تصل السجلات إلى الصف

    الأخير ذو الرقم ( 65536 ) بينما صيغة المجموع في خلية (B21) حاليا مقتصرة على صف

    (20) بهذا الشكل (=SUM(B4:B20)) وعندما حاولت توسيع نطاق الجمع إلى صف (B400)

    مثلا ، تم رفض الصيغة وتخرج رسالة تفيد بأنه لايمكن لإكسل حساب صيغة تشير مراجع الخلية

    فيها إلى نتيجة الصيغة نفسها ، منشئة مرجعا دائريا ! إذن ما هو الحل ؟ .

    تم تطبيق جميع هذه الملاحظات على المرفق،

    وعندما نقلت صيغة المجموع برمتها الى الخلية (C21) المجاورة ، تم اجتياز مشكلة الحساب

    الدائري ولكن حينما حاولت مسح كلمة " المجموع " من خلية (A20) لكي أضعها في (B21)

    بجوار خلية المجموع ، تخرج رسالة خطأ من محرر الفيجوال بيسك إما debug أو nd

    لا بد من معرفة أن الكود بأكمله يعتمد على كلمة (المجموع) وأن أي تعديل عليها أو نقلها إلى مكان آخر سيوقف عمل الكود بشكل كامل .. وبعد التعديل على الملف لست بحاجة إلى نقلها إلى مكان آخر ..

    وبالنسبة للرابط الذي ذكرت .. فمع إحترامي الشديد للأستاذ محمد طاهر .. فإنه لا يعطي حل للمشلكة .. وينفي وجود أي حل نهائياً غير ربط الجدول بالأكسس .. بينما المرفق يحتوي على الحل..

    - أخيرا أرجو تنفيذ الطلب ذو الرقم واحد من المرفق بخصوص تجميد العمود و الصف معا .

    خاصية التجميد في الإكسل لا تلبي هذا الطلب .. فإنها إما أن تجمد العمود أو الصف بأكمله أو لا .. لكن سأحاول البحث عن مخرج لهذا .

    شاهد المرفق،

    _________________.rar

  6. وعليكم السلام،

    بالنسبة للمرفق الذي قبل الأخير في المشاركة رقم 12 ماهو الفرق بين كود إدراج الوقت :

    تقريباً ليس هناك فرق .. ولكني أرى أن أفضل طريقة لإدراج التاريخ أو الوقت ليكون ثابت ولا يتأثر عند تحرير أي خلية هو أن يتم عبر لوحة المفاتيح بإستخدام Ctrl + ك للتاريخ و Ctrl + : للوقت ..

    وللمعلومية فإن معظم البرامج الشخصية التي أستخدمها أقوم فيها بإدراج الوقت أو التاريخ عن طريق لوحة المفاتيح .. لأني لا أريد أن يحدث أي تغيير على التاريخ أو الوقت المُدخل عند إدخال بيانات السجل للمرة الأولى

    ومن المعروف أن ربط تحرير خلية معينة بكود الإدراج التلقائي للتاريخ أو الوقت يجعل التاريخ أو الوقت يتغير حتى بمجرد النقر المزدوج على الخلية المعنية حتى بدون تغيير محتواها .. وهذا بالنسبة ليس شيء غير عملي وغير منطقي بتاتاً.

    أما إذا أردنا إدراج التاريخ أو الوقت عن طريق الكود فأفضل طريقة هي إستخدام الدوال Date للتاريخ و Time للوقت و Now للإثنين معاً .. لأنه تم تخصيصهم جميعاً لأداء هذه المهام ...

    ولا أرى حاجة في أن نترك هذه الطرق السهلة والمبسطة ونلجأ إلى كتابة كود آخر يقوم بنفس المهمة كالكود الخاص بإدراج التاريخ أو الوقت بإستخدام الخاصية SendKeys .. وهي خاصية متعلقة أكثر بأوامر أخرى تتم عن طريق لوحة المفاتيح.

    Sub EndTiming()

    Selection.NumberFormat = "General"

    ActiveCell.Value = Format(Time)

    End Sub

    بالنسبة لهذا الكود فهو يستخدم الدالة Time .. لإدراج الوقت الحالي .. وهو بالضبط ما تحدثنا عنه .. ولكنه مطول بعض الشيء .. فالسطر الأول منه لا حاجة له نهائياً .. ولا أدري مالغرض من وضعه .. وكذلك الكلمة الثانية والثالثة من السطر الثاني أيضاً لا حاجة لهما .. ويمكن أن نحصل على نفس النتيجة عبر إستخدام الكود التالي للحصول على الوقت الحالي:

    Sub SysTime()
    ActiveCell = Time
    End Sub
    ويمكن أن نستخدم الكود التالي للحصول على التاريخ الحالي:
    Sub SysDate()
    ActiveCell = Date
    End Sub
    وهذا الكود للحصول على التاريخ والوقت معاً:
    Sub SysDateAndTime()
    ActiveCell = Now
    End Sub

    أتمنى أن يكود التوضيح مفهوماً ..

    أما بالنسبة للمرفق الذي أشرت إليه .. فانتظر الرد عليه قريباً بإذن الله.

    شاهد المرفق،

    ________________________________________________.rar

  7. الكود التالي ينفذ لك ما تريد،

    Private Sub Worksheet_Change(ByVal Target As Range)
    
    If Target.Cells.Count > 1 Or Target.Address <> "$B$3" Then Exit Sub
    
    If Target.Address = "$B$3" And Target <> "" Then
    [C3].Resize(18) = [C3].Formula
    [H3].Resize(18) = [H3].Formula
    Else
    [C4].Resize(17) = ""
    [H4].Resize(17) = ""
    End If
    
    End Sub

    شاهد المرفق،

    __________________________.rar

  8. الكود التالي ينفذ لك ما تريد،

    Sub CountDates()
    
    For R = 4 To 30
    If Application.WorksheetFunction.Count(Cells(R, "B"), Cells(R, "C"), Cells(R, "D")) < 3 Then
    Cells(R, "E") = ""
    Else
    Cells(R, "E") = Application.WorksheetFunction.CountIf(Sheet1.[D4:D30], Cells(R, "C") & "/" & Cells(R, "B") & "/" & Cells(R, "D"))
    End If
    Next
    
    End Sub

    شاهد المرفق،

    ______________________________________________.rar

×
×
  • اضف...

Important Information