السلام عليكم ورحمة الله وبركاته,
عندى ملف اكسس 2010 يوجد يه نموذج فيه مربع اختيار يحتوى على اربع خيارات يضغط المستخدم على اختيار منهم ثنم يضغط على الرز فى الفورم الموجود فيتم تشغيل كود يفحص الملفات الموجود (ملفات اكسل) فى فولدر معين وتكون هذه الملفات بتسمية محددة فى هذا المشروع وهى Item(1) , Item(2) , ,i على اى عدد من الملفات وهذه ليست المشكلة حتى الان ولكن المشكلة الاساسية انه احيانا عند استيراد البيانات من ملفات الاكسيل هذه يكون هناك ملف او اكثر بهم مشاكل وتقوم بعمل مشكلة فى عملية تحديث بيانات عن طريق استعلام يعتمد على ملفات الاكسيل و المطلوب هو ان يتم تعديل الكود بحيث يعطى رسالة بها اسماء الملفات التى يوجد بها اخطاء لانها لن تقوم بعملية التحديث لكى يقوم المستخدم بمعرفة الملفات التى بها اخطاء ليتم تصحيحها لكىى لا يتم اظهار رسالة خطأ الفجوال بييسك واستبدالها برسالة فى البرنامج بدل من Debug وشكرا جزيلا والملفات فى المرفقات
اظهار رسالة خطأ خاصة بالبرنامج وبيس الـVB
لوسمحت ترفق ملف اكسل به مشكلة حتى نرى الخطأ ومصدره :)
جعفر
السلام عليكم ورحمة الله وبركاته
أخى جعفر فى الملف المغضوط المرفق يوجد فولدر به ملفات الاكسل وقد وضعته ليتم التجربة عليها والسؤال المقصود هو أنه اذا وجد خطأ فى اسم الملف مثلا وهذا تعرفه بقراءة الكود أو اى خطأ آخر والمطلوب كله هو ان لا تظهر رسالة الخطأ الخاصة بالفجوال بيسك واظهار رسالة خاصة بدلا منها
هل هذا لطلب الطلب فقط؟
لانك قلت في سؤالك:
>يكون هناك ملف او اكثر بهم مشاكل وتقوم بعمل مشكلة فى عملية تحديث بيانات
جعفر
تم تعديل هذه المشاركة بواسطة jjafferr في 30 مايو 2013 في 15:36
السلام عليكم ورحمة الله وبركاته
نعم يا سيدى الفاضل الطلب هو تعديل الكود ليعطى رسالة خطأ خاصة بالرنامج فقط وبالنظر للكود ستجد أنه يوجد Loop على ملفات اكسيل يات استيرادها وعمل تحديث للبيانات من خلالها وبغض النظر عن محتوى هذه البيانات ممكن أن يعطى اللوب رسالة خطأ نتيجة لعدم توافق البيانات الموجود فى ملف الاكسيل من جدول الاكسس، واثناء عمل اللوب من الممكن أن يصادف ملف اكسل فيه أى خطأ البرنامج يعطى رسالة بإسم الملف الموجود به الخطأ لكى يتسنى لمشغل البرنامج معرفة هذا الخطأ وبالمناسبة اسماء ملفات الاكسيل يقوم مشغل البرنامج بتسميتها بشكل مسلسل Item1,Item2,Item3 وهكذا لكى يسهل على البرنامج معرفة الخطأ
وشكرا للإهتمام
اذاً قد يكون هناط 3 اخطاء:
1.>والسؤال المقصود هو أنه اذا وجد خطأ فى اسم الملف مثلا
المعلومات عن هذا السؤال متوفرة ، شكراً :)
2.>وبغض النظر عن محتوى هذه البيانات ممكن أن يعطى اللوب رسالة خطأ نتيجة لعدم توافق البيانات الموجود فى ملف الاكسيل من جدول الاكسس
3.>واثناء عمل اللوب من الممكن أن يصادف ملف اكسل فيه أى خطأ البرنامج يعطى رسالة بإسم الملف الموجود به الخطأ
بالنسبة الى 2 و 3 ، انا محتاج الملفات المعطوبة/فيها خطأ.
يعني لازم استخدم ملف معطوب لكي يظهر لي الخطأ ، ومن ثم استطيع وضع الرسالة الصحيحة :) ، والملفات الثلاث المرفقة كلها تعمل بصورة صحيحة ولا يظهر لي في استيرادها خطأ ،
لهذا لوسمحت ترفع لي ملف معطوب ، وإلا فانا استطيع مساعدتك في الرد على السؤال 1 فقط :(
سؤال آخر لوسمحت ، في الظروف العادية ، كم عدد الملفات التي ممكن ان تكون في المجلد ، وهل جميعها بصيغة شكل مسلسل Item1,Item2,Item3 ؟
جعفر
السلام عليكم ورحمة الله وبركاته
شكرا أخى جعفر للإهتمام
المقصود بمحتوى بيانات ملف الاكسيل سيدى مثلا مثل اسماء الاعمدة الموجود فى ملف الاكسل يجب أن يتكون مثل الموجودة فى جدول الاكسس لو وجد اى اختلاف فى اسماء الاعمدة سيعطى خطأ والخطأ الشائع الاخر هو أن يقوم أحدهم بادراج صف وكتب به بيانات قبل الصف الاول البيانات فى ملف الاكسل وهذا ايضأ سيعطى خطأ فبرجاء سيدى الفاضل فى اى ملف من ملفات الاكسل أن تغير اسم اى عمود او تضع صف به بيانات قبل الصف الاول فستجد سيدى أن هذا الملف لن بقوم بعملية التحديث المطلوبة والمطلوب فى مثل هذا الموقف أن يعطى رسالة خطأ لكى يعلم مشغل البرنامج اسم الملف الذى يوجد به المشكلة ويبدأ فى تعديل الخطأ بملف الاكسل ويعيد عملية استدعاء البيانات مرة أخرى
وفى الظروف العادية عدد ملفات الاكسيل فى الغالب فى حدود بين 100 - 150 ملف وبالمناسبة هى تأتى بأسماء مختلفة ولكن مشغل البرنامج يحددهم كلهم ويضغط اعادة تسمية ويكتب Item فيقوم الوندوز اتسمية الملفات بشكل مسلسل
أعرف أن الموضوع معقد :)
سلام اخي احمد :)
1. هذه ملفات المجلد MainFolder تظهر لك تلقائياً عند فتح النموذج (الكود يقرأ المجلد MainFolder على اساس انه في نفس مجلد البرنامج)، ولا تهتم بالترقيم (انظر الملاحظة أ بالاسفل) ، كما يمكنك تغيير مسار المجلد MainFolder من حدث فتح النموذج (مكان واحد فقط):
Private Sub Form_Load()
'MainFolder path
Folder_Path = Application.CurrentProject.Path & "\MainFolder"
2. واذا عملت تغيير في ملفات المجلد ، فيمكنك قرأتها مرة اخرى بالضغط على هذا الزر،
3. ومافي داعي ان المستخدم يغير اسماء الملفات بالطريقة التقليدية ، فهذا الزر يقوم بمهمة تغيير الاسماء بالتسلسل،
4. في حال وجود ملفات (معطوبة) اسماء خاناتها غير المعتاد (والتي تعطي اخطاء في البرنامج) ، فاسماءها ستظهر هنا،
5. وهذه الرسالة تخبرك بعدد الملفات الصحيحة والتي تم ادخالها في البرنامج.
ملاحظات:
أ. تم تغيير طريقة قراءة البرنامج للملفات ، فلا يوجد داعي الان لإعادة تسميتها ، لان البرنامج سيقرأ جميع الملفات في المجلد بغض النظر عن اسمها،
ب. واذا اردت فتح الملفات المعطوبة، فما عليك الا ان تضرب على الفارة مرتين ، على اسم الملف في القائمة 4، وسيفتح لك الملف في برنامج Excel.
جعفر :)
السلام عليكم ورحمة الله وبركاته
أخى جعفر مجهود فوق العادة وفوق المتوقع وجزاك الله خير
فضلا أريد تعديلات بسيطة
1- عند عدم وجود فولدر Main Folder فى نفس مسار البرنامج تظهر رسالة Debug لو أمكن استبدالها برسالة خطأ تنبه المستخدم على وضع الفولدر فى مكان البرنامج
2- بالنسبة لمكان ظهور الملفات المعطوبة لو أمكن ان توضع الملفات المعطوبة اسفل بعضها كلف ملف فى صف بدلا من وضع فاصل بينها
3- عند الضغط على الملف المعطوب لا يفتح مع الاكسل بل يعطى رسالة خطأ
جزاك الله خيرا
وعليكم السلام أخي أحمد ، وحياك الله :)
كتبت شرح طويل للمادة الجديدة 6 ، بس انطفئ الكمبيوتر وراح كل شئ :(
على العموم اترك لك الملف وتجربه مع التصحيحات الي طلبتها :)
جعفر
السلام عليكم ورحمة الله وبركاته
أخى جعفر جزاك الله خير على كل هذا المجهود وأعجز عن الشكر
يوجد نقطة واحدة فقط ناقصة وهى الملفات المعطوبة فى حالة وجود أكثر من ملف معطوب يكون كل ملف فى سطر وحده بدلا من فاصلة بين كل ملف فى lst_Bad_Files وذلك لسببين الاول أن يسهل قراءة الملفات المعطوبة والثانى عند وجود ملف واحد معطوب يتم فتحه عند الضغط عليه مع برنامج الاكسيل ولكن عند وجود اكثر من ملف معطوب لا يفتح شيئا
الخلاصة فى التعامل مع الملفات المعطوبة بدل من Item1,Item2,Item3 يتم وضعهم هكذا
Item1
Item2
Item3
ولك جزيل الشكر
الفاصلة ، هي الطريقة في حفظ القيم في Listbox ، فما عليك من طريقة الحفظ :-)
و لكن هل أفهم منك انك لما تحاول فتح الملف المعطوب بالنقر عليه مرتين ، ﻻ يفتح؟
وما هي الرساله التي تراها؟
ﻻني اصلحت هذا كذلك!!
جعفر
هل اﻻكسس منصوب عندك باللغة العربية؟
اذا كان كذلك فرجاء استبدال ؛ بدﻻ عن ،
وجرب
رجاء تشتغل على ملفين معطوبين على اﻻقل مثﻻ، ثم استبدل الفاصله بينهم الى ؛
وارسل لي الصورة قبل التغيير وبعده لوسمحت.
انا سأرى مﻻحظاتك بعد حوالي ساعتين :-)
جعفر
السلام عليكم ورحمة الله وبركاته
أخى جعفر جزاك الله خير على كل الصبر والمجهود الجبار وهذا هو المطلوب تماماً جعل الله لك مخرجاً من كل ضيق
الحمدلله :-)
وحياك الله :-)
والفرق بين البرنامج النهائي والبرنامج السابق هو ؛ بدﻻ عن ,
جعفر
السلام عليكم ورحمة الله وبركاته
أخى جعفر مع التجربة أكتشفت شيئاً لو بالأمكان تصحيحه
هو أن ملف الاكسيل ليس بالضرورة يحوى على كل الحقول بجدول الاكسس بل بالفعل الذى يتم اعطاؤه للموظف ملف اكسيل به حقلين حقل TstID وحقل الترتيب أى واحد من الاربع 1st حتى 4th فبرجاء تعديل الكود حتى يتم التحقق فقط من وجود حقل tstID والحقل الذى تم اختياره من ChkQrtr
ولك جزيل الشكر
للتوضيح
يتم فقط التأكد من حقلين tstID والحقل الذى يتم اختياره من ChkQrtr حتى لو وجد حقول اخرى فى ملف الاكسيل لكن على بمعنى أنى اخترت 2nd يتم التحقق من الحقل 2nd وكذلك tstID حتى لوجد فى ملف الاكسيل كل الحقول لانه من الممكن أن توجد فى ملف الاكسيل أحيانا كمعلومة فقط ,احيانا لا يكون موجود إلا الحقلين المراد تحديثهما
للتوضيح
يتم فقط التأكد من حقلين tstID والحقل الذى يتم اختياره من ChkQrtr حتى لو وجد حقول اخرى فى ملف الاكسيل لكن على بمعنى أنى اخترت 2nd يتم التحقق من الحقل 2nd وكذلك tstID حتى لوجد فى ملف الاكسيل كل الحقول لانه من الممكن أن توجد فى ملف الاكسيل أحيانا كمعلومة فقط ,احيانا لا يكون موجود إلا الحقلين المراد تحديثهما وبالتالى مقارنة ترتيب الحقول لن يكون له قيمة كبيرة
السلام عليكم ورحمة الله وبركاته
يبدو أنى سأزعجك بملاحظة أخرى وهى أن 1st فقط هو الذى يعمل لذلك عدلت الكود ليصبح
مع حذف آخر حرفين من كل استعلام لكى يتمكن من العمل بسهولة ولكن وجدت ملاحظة أخرى وهى أن الاستعلام لا يقوم بالتحديث بناء على التعديلات الأخيرة إلا فى حالة وجود كل الاعمدة فى ملف الاكسيل مع انه عند وجود عمودين فقط وهم tstID مع عمود اخر من الاربع اختيارات يقوم بعملية التأكد من ان العمود مطايق للاختيار والا يضعه فى قائمة الملفات التالفة إلا أنه لا يقوم بالتحديث الا مع وجود كل الاعمدة ولا ادرى لذلك سببا
برجاء الافادة وشكرا جزيلا
وعليكم السلام
اعتذر منك ، لاني لم ادخل في تفاصيل الكود ، لاني كنت مستعجل (عذر اقبح من ذنب :( ) ، ولكن العذر عند كرام الناس مقبول :) )
وانا الان كذلك مستعجل :(
بس ، شكرا على ملاحظتك ، فقد غيرت شئ في الكود واصبح IF في الكود الذي ذكرته انت ، ملغى :)
مع العلم بأني قمت بعدة تجارب بالامس واتضح لي ان الكود يعمل بطريقة صحيحة ، ولكن الظاهر انه لم يكن شاملاً :(
تفضل وجرب هذا المرفق :)
جعفر
السلام عليكم ورحمة الله وبركاته
أخى جعفر جزاك الله خير على المجهود الصادق جعله الله فى ميزان حسناتك وشكرا لسعة صدرك وأتمنى أنا لا أجد ملاحظات أخرى :)
هذا الموضوع مغلق.