نجوم المشاركات
Popular Content
Showing content with the highest reputation on 02/09/15 in all areas
-
أخي الحبيب الجموعي السطر الأول لو الخلية في الصف الثاني في العمود I حيث أن I متغير يتغير بتغير الأعمدة ...لو كانت الخلية تحتوي على تعليق السطر الثاني يتم إنشاء قائمة منسدلة السطر الثالث تعيين قيمة للمتغير nam والقيمة هي محتوى نص التعليق مع إزالة المسافات الزائدة السطر الأخير التأكد من صحة النطاق المسمى (على ما أعتقد) ومن ثم تعيين هذا النطاق ليكون مصدر البيانات للقائمة المنسدلة2 points
-
افضل جمع كل العمليات فى جدول واحد شراء بيع ارتجاع ارتداد ويضاف حقل نوع العملية هذا والله اعلم2 points
-
السلام عليكم نعم اخي هناك برامج تعمل على تدمير البرامج بامتداد mde وتقوم بفتحها يستعملها المبرمجون في كسرهذه البرامج البرنامج المستهدف لا يعمل بعد استهدافه لان جميع اكواد الفجول والوحدات النمطيه تكون فارغه وبعض الازرار وامسميات الموجوده على النماذج تتغير الى (demo) يستفاد من هذا البرنامج للاطلاع على الجداول والاستعلامات والنماذج(بدون اكواد الفجول) والميكروات ويمكنك فتح النماذج على وضع التصميم بعد استهدافها واعرف اكثر من شخص له خبره جيده بالبرمجه يستعمل هذا البرنامج لتدميرالبرامج الحصريه واعادة اكواد الفجول والوحدات النمطيه وتسويقها باسمائهم بالتوفيق2 points
-
أخي الغالي الجموعي جرب الكود بهذا التعديل البسيط ..إذا كانت الخلية فارغة وحتى لو بها تعليق فلن يتم عمل مربع نص لها Private Sub UserForm_Activate() Dim Sh As Worksheet Dim txt As MSForms.Control Dim LastCol As Integer, I As Integer Dim Nam As String On Error GoTo kh_Exit Set Sh = ThisWorkbook.Sheets(1) LastCol = Sh.Cells(2, Sh.Columns.Count).End(xlToLeft).Column MyTop = 10 For I = 1 To LastCol If Not IsEmpty(Sh.Cells(2, I)) Then If Not Sh.Cells(2, I).Comment Is Nothing Then Set txt = Frame1.Controls.Add("Forms.Combobox.1", "MyTxt" & I) Nam = Trim(Sh.Cells(2, I).Comment.Text) If Not IsError(Evaluate(Nam)) Then txt.RowSource = Nam Else Set txt = Frame1.Controls.Add("Forms.TextBox.1", "MyTxt" & I) End If With txt .Move 20, MyTop, 114, 24 .Text = Sh.Cells(2, I) .TextAlign = 2 End With MyTop = MyTop + 30 End If Next Me.Frame1.ScrollHeight = MyTop kh_Exit: End Sub2 points
-
أخي الحبيب ومعلمنا الكبير عبد الله باقشير ما أروعك ما أبدعك ما أجملك ما أخف ظلك ما أحلاك نقف جميعاً أمام إبداعاتك صااااااااااااااااااااااااااااااااامتين ..تأخذنا الدهشة والروعة !! جزيت عنا خير الجزاء في الدنيا والآخرة ، وجمع الله بيننا في الفردوس الأعلى اللهم آمين2 points
-
Private Sub Form_Open(Cancel As Integer) If CurrentProject.Name = "myName.mdb" Then Else DoCmd.Quit End If End Sub2 points
-
السلام عليكم ورحمة الله وبركاته اخواني الاعزاء هنا ملف كامل لكيفية استخدام الUserForm وكيفية التعامل معه وبجميع أدواته المستخدمة مع شرح الخصائص المتعلقة به وبادواته كذلك تم شرح الاكواد الخاصة به وبادواته وتم استخدام الصور والامثلة العملية في الشرح وبصورة ميسرة وبسيطة حتى يتم استيعابها بالصورة المطلوبة وتم تقسيم العمل الى ستة ملفات وبصورة تسلسلية اخوكم عماد الحسامي الدرس الأول UserForm.rar الدرس الثاني.rar الدرس الثالث textbox.rar الدرس الرابع.rar الدرس الخامس.rar الدرس السادس.rar الدروس السته مجمعه.zip1 point
-
السلام عليكم ورحمة الله شكرا الاستاذ احمد ابن مصر اهذا النموذج الثاني شغال 100% جزاك الله خير1 point
-
الاخ ابراهيم تم الاتفاق على انه و حتى تعم الفائدة للجميع ان يتم فصل كل استفسار مستقل عن السؤال المذكور في الموضوع المفتوح في موضوع مستقل و هذا امر لا اشكالية فيه و مفهوم و متفق عليه من قبل الجميع لذلك اخي الكريم لا اشكالية في قضية الاغلاق و اطرح ماتشاء من الاسئلة و ستجد المساعدة ان شاء الله ثم انه و كما هو واضح من مراجعة الموضوع لم تتم المتابعة عليه من قبل احد بالرغم من طلبك المتكرر للمساعدة و لعل في طرح سؤال جديد ان يكون هناك تفاعل اكثر وفق الله الجميع1 point
-
اخى الفاضل أ.إيهاب اجعلها هكذا .. هتزبط معاك ان شاء الله Mail.BodyPart.Charset = "UTF-8" مرفق الملف للتوضيح تحياتي ehab.rar1 point
-
انا حملت المثال برضو نفس الطريقة بيحفظ الصور من مكانها الاصلى على الجهاز tblInventory PicFile C:\Users\Judy\Documents\DSشششC_4747.jpg C:\Documents and Settings\All Users\Documents\My Pictures\Sample Pictures\Tulips.jpg C:\Users\Azhar\Pictures\iraqflag_if76s1s9.gif C:\Documents and Settings\All Users\Documents\My Pictures\Sample Pictures\Koala.jpg C:\Documents and Settings\All Users\Documents\My Pictures\Sample Pictures\Hydrangeas.jpg C:\Users\Azhar\Pictures\profil.jpg C:\Users\Judy\Documents\DSشششC_4747.jpg1 point
-
ربنا يعزك يا استاذنا جزاكم الله خيرا طيب معلش انا اسف لسه واخد بالى من المشاركة الطيبة دى حاضر يا استاذى الكريم هأشوف لحضرتك موضوع المؤهل حالا وربط الحقل بتاعه وارد على حضرتك امرك بالنسبه للمراجعه انا بأتعلم لسه وحضرتك تعلم الكلام ده انا هأقول لحضرتك الموضوع سهل على شويه ليه .... انا قبل كده حاولت ادرس الويب ديزاين واشتغلت شويه html , css , css3 كان موضوع الاكواد ده بيعتمد انك تفهم الكود ازاى بيبدأ وازاى ينتهى ووظيفته وايه المعطيات اللى بيعتمد عليها علشان يعالج البيانات اللى انت عاوز تشوف نتيجتها فى المخرجات بس علشان كده باحاول افحص الاكواد وافهم طريقة عملها واطوعها زى ما انا عاوز لعمل الافكار المختلفة لكن مش كل شئ بأقدر افهمه ومش كل فكرة بأقدر انفذها ومش أقدر احلل اى شغل من الناحية البرمجية او التقنية واحدد نقاط القوة من نقاط الضعف بها لذا انصحك بسؤال احد اساتذتنا الكرام الذين ننهل من علمهم ونتعلم على يديهم بارك الله لهم بالنسبة للشكل الجمالى فى الاخر خالص والتنسيق ان شاء الله بأمر الله ده اقدر اعملهولك ووعدت حضرتك بده بس استسمحك بس بعد رجوعى من العمره ان شاء الله لان الموضوع بياخد وقت شويه1 point
-
امممممممممم للعلم انا مش عارف هو بيحفظ الصور فين حاولت افهم معرفتش معلش انا ناقل لحضرتك الكود من مثال وتعبنى شويه علشان كده اتاخرت فى الرد على حضرتك حاولت افهم الكود بصراحه مش عرفت على كل انا رفعت صور فى الملف على اول اربع او ثلاث موظفين للتجربه شوفهم كده موجودين بالصور والللاء وع العموم جرب ونحاول نشوف المكان ده بعدين معلش انت عارف انا تالاسبوع ده مضغوط جدا جدا جدا لاقتراب ميعاد السفر1 point
-
السلام عليكم حبيبي والله قبل ما اشوف اكيد روعه بس عاوز منك تراجع المشروع وتقولى ايه رأيك وطلب كمان تربط الحقل بتاع نوع المؤهل بالمؤهل1 point
-
اتفضل اخى وحبيبى ان شاء الله يكون هو ده المطلوب مشروع العاملين up.rar1 point
-
اخى الصقر اعتزر فلم ارى مشاركتك عند رفع مشاركتى تقبل تحياتى1 point
-
السلام عليكم الشرط الذي وضعته بالملف يمكن التحايل عليه بالصيغة التالية =SUMIFS(B2:B20,C2:C20,">"&"اوفسينا",C2:C20,"<" & "اوفسينا4")1 point
-
اخى سيف هذه محاوله من ارجو ان تفى بالغرض تقبل تحياتى يوميات فرنسية.rar1 point
-
اخى الكريم قم بتعديل هذا السطر من الكود Cells(r + 8, "b").Resize(1, 5).Value = .Cells(i, "c").Resize(1, 5).Value الى Cells(r + 8, "a").Resize(1, 6).Value = .Cells(i, "b").Resize(1, 6).Value ان شاء الله بالقريب يتم الشرح تقبل تحياتى المرفق بعد التعديل يوميات فرنسية.zip1 point
-
تفضل اخى الحبيب المرفق به طلبك تقبل تحياتى يوميات فرنسية.zip1 point
-
بعد اذن اخي الصقر حل اخر بواسطة Data Validation منع التكرار في A F.rar1 point
-
1 point
-
العمود d في الصفحة الرئيسية اما فارغ أو مخفي لذلك استبدل الحرف D اينما تجده بالحرف E1 point
-
ادخل على المعادلة الأولى في كل صفحة و غير رقم 18 الى اي رقم تريد ثم اسحب نزولاً1 point
-
ببساطة جدا شوف الرقم 18 في المعادلة وغيره لرقم الصف اللي انت عايزه بعد ما تعدل ..اضغط Ctrl + Shift + Enter لأن المعادلات معادلات صفيف بس خلاص انتهى1 point
-
إستاذي العزيز / ياسر خليل تم اكتشاف الخطأ ويتمثل في اختلاف تسمية الأوراق حيث تم تغير ( Sheet1 ) بـ ( ورقة1 ) فتمت الإضافة والتسمية بالاسم المطلوب حيث أصبح الكود هكذا Sub CreateNewWB() Dim NewBook As Workbook Set NewBook = Workbooks.Add On Error Resume Next Application.DisplayAlerts = False NewBook.SaveAs Filename:=ThisWorkbook.Path & "\" & ThisWorkbook.Sheets("æÑÞÉ1").Range("A1").Value, FileFormat:=xlOpenXMLWorkbookMacroEnabled Application.DisplayAlerts = True End Sub أويمكن الاستغناء عن تسمية الورقة والإشارة إلى رقمها فيصبح الكود هكذا Sub CreateNewWB() Dim NewBook As Workbook Set NewBook = Workbooks.Add On Error Resume Next Application.DisplayAlerts = False NewBook.SaveAs Filename:=ThisWorkbook.Path & "\" & ThisWorkbook.Sheets(1).Range("A1").Value, FileFormat:=xlOpenXMLWorkbookMacroEnabled Application.DisplayAlerts = True End Sub المهم أستاذي العزيز لك مني كل التقدير والإحترام وجزاكم الله خير ورفع الله قدركم وزادكم علما ورفعة ووفقكم الله دائما لخدمة إخوانكم كما لا أنس أخينا العزيز الأستاذ عبد الله بلنوار على تقديم يد العون والمساعدة حزاه الله خير وكل من شارك معنا ولو بالمشاهدة حزاهم الله خير تقبلوا تحياتي1 point
-
جدول المورين والعملاء جدول واحد ويضاف حقل يوضح هل هو عميل ام مورد1 point
-
السلام عليكم ورحمة الله استاذي العزيز اشكرك بعنف جزاك الله خير وفي ميزان حسناتك لن انساك وبرنامجك شغال معاي 100% نفعني في عملي الشخصي1 point
-
السلام عليكم ورحمة الله استاذنا ابو البراء جزاك الله خير وفي ميزان حسناتك1 point
-
اخوانى الأفاضل اهم شئ بالموضوع على الاطلاق هى تزبيط اعدادات البريد الذي تتم من خلاله ارسال الرسائل .. فنلاحظ بالكود الماضي هذه الأسطر وهى الخاصة بإعدادات بريد ال Gmail حيث أن البريد الذي تتم من خلاله ارسال الرسائل هو Ibn_Egypt@gmail.com Config(cdoSendUsingMethod) = cdoSendUsingPort Config(cdoSMTPServer) = "smtp.gmail.com" Config(cdoSMTPServerPort) = 25 Config(cdoSMTPAuthenticate) = cdoBasic Config(cdoSMTPUseSSL) = True Config(cdoSendUserName) = "Ibn_Egypt@gmail.com" Config(cdoSendPassword) = "A_123456789" Config.Fields.Update واذا كان البريد الذي تتم من خلاله ارسال الرسائل هو بريد ياهو على سبيل المثال والايميل الذي تتم من خلاله ارسال الرسائل Ibn_Egypt@yahoo.com لابد من تغيير الإعدادات السابقة بالإعدادات التالية Config(cdoSendUsingMethod) = cdoSendUsingPort Config(cdoSMTPServer) = "smtp.mail.yahoo.com" Config(cdoSMTPServerPort) = 465 Config(cdoSMTPAuthenticate) = cdoBasic Config(cdoSMTPUseSSL) = True Config(cdoSendUserName) = "Ibn_Egypt@yahoo.com" Config(cdoSendPassword) = "A_123456789" Config.Fields.Update اما بخصوص سؤال اخى الفاضل ابا الحسن ممكن تعدل سطر الكود وتجعله هكذا Mail.To = Range("A" & i).Value وبالخلايا اكتب البريد كامل وليكن aa@yahoo.com أو mm@gmail.com أو أى بريد اخر تريده .. الملف المرفق سيوضح لك الفكرة أخى ابو فارس حاول تعدل اللغة بالكلام المكتوب في الكود الذي تراه ... وكذلك لو بالملاحظات مكتوب تم التنبيه وارسال البريد لايتم الارسال .. تأكد ان الملاحظات فارغة وليس مكتوب بها اى شئ >>> وملاحظة أخيرة الياهو لا يدعم اللغة العربية قم بتحويل الرسائل المكتوبة باللغة العربية الى اللغة الانجليزية اذا كنت ستستخدم بريد الياهو تحياتي email.rar1 point
-
ربنا يعزك يارب ويجعلو فى ميزان حسناتك انت و الاستاذ ( ابن مصر ) حضرتك ساعدتنى فى مواضيع كتير جداااا والف الف شكر ربنا يكرمك ان شاء الله1 point
-
الأخ الحبيب رامي أقدم لك ملف غير ملفك عله يفيدك وتستطيع التعديل على ملفك بما يناسبه الفكرة في الملف المرفق أفضل من ناحية أنك تستطيع إدراج كل الصفوف في ورقة واحدة وفي أعمدة واحدة وليس كما أرفقت تستطيع أن تحصل على قوائم بالذكور وقوائم بالإناث طبقا للصف الذي تختار رقمه في ورقة العمل الثانية أرجو أن يفيدك واعذرني لأن الوقت قد تأخر ... حاول في الملف المرفق وإن شاء الله تجد من يقدم لك يد العون في حالة الفشل Extract Student Lists.rar1 point
-
1 point
-
أخى الفاضل أ.ايهاب أولاً : الملف المرفق ليس له علاقة بالايجارات وانتهائها وخلافه فهو مجموعة موظفين ومكتوب به ارسال ايميل لبريد الموظف اذا انتهت الرخصة او الاقامة وغيرها ثانيا : هذه محاولة منى بناءا على الملف المرفق بارسال البريد تلقائي بمجرد فتح الملف للموظفين الذى انتهت بطاقاتهم او رخصهم وتستطيع انت التعديل به كما تريد بناءا على عملك .. استخدمت انا هنا بريد ال gmail لكل الناس سواء البريد الذي سترسل من خلاله الرسائل او الموظفين الذين سيستقبلون هذه الرسائل فبريد الموظف الاول على افتراض انه emp19811@gmail.com والثاني emp19812@gmail.com وهكذا وعلى افتراض ان البريد الذي سترسل من خلاله الرسائل هو Ibn_Egypt@gmail.com >> والباسورد الخاصة به هي A_123456789 يكون الكود بهذا الشكل Sub btnSendEmail() On Error GoTo 1 Dim Mail As New Message Dim ID, Licence As Boolean Dim Config As Configuration: Set Config = Mail.Configuration Dim LR As Long Dim i As Integer LR = Range("A" & Rows.Count).End(xlUp).Row For i = 2 To LR If Range("D" & i).Value < Date Or Range("C" & i).Value < Date Then If Range("E" & i).Value = "" Then Config(cdoSendUsingMethod) = cdoSendUsingPort Config(cdoSMTPServer) = "smtp.gmail.com" Config(cdoSMTPServerPort) = 25 Config(cdoSMTPAuthenticate) = cdoBasic Config(cdoSMTPUseSSL) = True Config(cdoSendUserName) = "Ibn_Egypt@gmail.com" Config(cdoSendPassword) = "A_123456789" Config.Fields.Update Mail.To = Range("A" & i).Value & "@gmail.com" Mail.from = Config(cdoSendUserName) ID = False If Range("C" & i).Value < Date Then ID = True Licence = False If Range("D" & i).Value < Date Then Licence = True If ID = True Then Mail.Subject = "انتهاء البطاقة" Mail.HTMLBody = "انتهاء البطاقة بتاريخ" & Format(Range("C" & i).Value, "yyyy/m/d") & "يرجي التواصل مع أقرب مكتب تجديد" End If If Licence = True Then Mail.Subject = "انتهاء الرخصة" Mail.HTMLBody = "انتهاء الرخصة بتاريخ" & Format(Range("D" & i).Value, "yyyy/m/d") & "يرجي التواصل مع أقرب مكتب تجديد" End If Mail.Send MsgBox "تم ارسال البريد بنجاح الى الموظف" & " " & Range("A", i).Value, vbOKOnly + vbInformation, "تم الارسال" Range("E" & i).Value = "تم التنبيه وارسال بريد" End If End If Next 1 End Sub في الكود السابق لابد ان تعدل البريد Ibn_Egypt@gmail.com... بالبريد الخاص بك وكذلك كلمة المرور اسفله الى كلمة المرور الصحيحة للبريد المكتوب كما انه يلزمك ايضا تفعيل هذه المكتبة من محرر الأكواد تختار Tools ثم References ,وتحدد علامة صح على المكتبة الموجودة بالصورة التى امامك ولكى تجعل الكود يعمل تلقائيا بمجرد فتح الملف .. يتم وضع هذا الامر في حدث فتح الملف Private Sub Workbook_Open() btnSendEmail End Sub مرفق ملف ومن اراد من الاخوة الأعضاء استخدامه يرجي التأكد من تغيير البريد في الكود وكذلك كلمة المرور وتفعيل المكتبة ... الكود مجرب ويعمل بنجاح والايميلات السابقة emp19811@gmail.com >>> emp19812@gmail.com حقيقية تحياتي email.rar1 point
-
بارك الله فيك اخي العزيز عبد الرحمن هاشم و جزاك خير الجزاء اود اضافة حل آخر بإستخدام خاصية RecordCount لمجموعة السجلات مرفق الملف بعد التعديل بالتوفيق للجميع USER.rar1 point
-
الخط الطويل في الحاشية يعني أن هذه الحاشية مرتبطة بما قبلها، وبما أنك تقول أن الحاشية التي يكون فوقها الخط طويل، إذن هذه المسافة التي فوق الحاشية هي مسافة فارغة تابعة للحاشية الأخيرة في الصفحة السابقة،،، مطلوب منك تعمل ضبط للمسافات بين الأسطر والفقرات في الحواشي ، حدد كل الحواشي، وخلي المسافة بين الأسطر مفرد، وبين الفقرات صفر قبل، وصفر بعد، وتأكد من أن الحواشي لا يوجد فيها أسطر فارغة، الأسطر،،، وإن شاء الله بتزبط معك1 point
-
1 point
-
اين الملف اخى الكريم ؟ الاحظ اسئله كثيره لك ولا ترفق ملف هل لديك مشكله فى رفع الملف ؟ ارجو ان تسهل على من يريد مساعدتك بارسال ملف اكسيل.؟1 point
-
سؤالك شيّق جدا ولكن للأسف لم أتوصل لحل ؛ فيبدو أنك تريد رسالة بإعلامك بالذي تم تحميله في كل مرة وهذه مجرد محاولة وليست إجابة MsgBox DCount("TEXT5", "table1", " AMOLA > 0") متابع..1 point
-
السلام عليكم هي فكرة وددت مشاركتكم ايها ولاثبات انه يمكن تقوية حماية الاكسل ايضا هذا مثال قمت بحمايته بطريقة الخاصة ارجو منكم محاولت كسر حمايته الى ذلك الحين لنا كلام اخر ملاحضة لايوجد في اي لغة برمجة ما يسمى بالحماية الكاملة فالكمال لله ولاي قفل مفتاح تحياتي RABIE TEST.rar1 point
-
الحلقة الثالثة عشر ******************* السلام عليكم ورحمة الله وبركاته إخواني الأحباب في المنتدى الأغر ..نأسف على عدم فتح الباب الفترة اللي فاتت بسبب البرد الشديد ، وبعد ما الجو اتظبط شوية نقدر نفتح الباب عشان الشمس تدخل وتدفنيا.. من أول الحلقة دي إن شاء الله هنبدأ نتعامل مع مهارات التعامل مع محرر الأكواد ، عايزين نوصل للأحتراف .. هنتكلم عن مهارة كتير بنحتاج نتعلمها ، ألا وهي الفرز أو الترتيب أو ما يطلق عليها باللغة اللي مش عربية Sort هنشتغل عملي علطول (أو على عرض ..مش هتفرق كتير) ..نفتح مع بعض ورقة عمل ، ومحدش يستنى مني إني أرفق ملف ، لأنك عشان تتعلم يبقا لازم تشتغل بايدك سيبك بقا من شغل النظري اللي مبيوكلش عيش ده ! افتح يا محسن ، شعارنا في الحلقات افتح (مرة افتح الباب ..افتح مصنف جديد ..افتح الخيارات في البرنامج ..افتح محرر الأكواد .. وشوية واحد هيقولي لو مبطلتش رغي هآجي أفتح دماغك وأريح الناس من رغيك) نفتح ورقة العمل ونكتب شوية بيانات عشان هنشتغل عليها ...وعشان أريحكو أدي شوية بيانات بدل ما تتعبوا ايديكم يا أحباب ، أنا بردو يهمني راحتكم م الاسم النوع 1 ياسر ذكر 2 احمد ذكر 3 ابراهيم ذكر 4 حسام ذكر 5 سليم ذكر 6 ماجدة أنثى 7 هدى أنثى 8 محمد ذكر 9 دينا أنثى 10 نور ذكر 11 رضا ذكر 12 سلمى أنثى 13 فاروق ذكر 14 شهد أنثى 15 كمال ذكر 16 طارق ذكر 17 هدير أنثى 18 سارة أنثى 19 أميرة أنثى حدد البيانات وتعالى لورقة العمل في الخلية A1 ، واعمل كليك يمين ، ثم اختر Paste Special (لصق خاص) ثم اختر من النافذة اللي هتطلع لك Text ، بكدا هتلاقي عندك 3 أعمدة (عمود للمسلسل ودا عشان مسلسل افتح الباب ، وعمود الأسماء ، وعمود النوع.. ) ويا ريت ننسخ البيانات في نطاق تاني مرة تانية لأننا هنجرب عليها أكتر من تجربة (ضعها مرة أخرى في النطاق K1:M20 مثلاً )!! المطلوب : ترتيب البيانات حسب الاسم ، ودا أمر بسيط جدا ومش معقد أبداً .. طريقة الحل : نروح للتبويب Developer ثم نختار Record Macro ثم نقف في الخلية A1 في بداية البيانات ، ونروح للتبويب Data ثم الأمر Sort ونختار من الحقل اللي اسمه Sort By نختار الاسم (لأن هو دا الحقل المطلوب الترتيب على أساسه) ، وفي الحقل الثالث المسمى Order (ودا شكل الترتيب ونختار يا أستاذ مختار A to Z (هتلاقي هو دا الخص الافتراضي أقصد الخيار الافتراضي ) يعني الترتيب أو الفرز حاجة من اتنين يا إما تصاعدي A to Z (من تحت لفوق) ودا بيسموه الجماعة اللي ما يتسموا (Ascending) أو تنازلي Z to A (من فوق لتحت) ودا اللي بيسموه في اللغة الأجنبية Descending ، وعشان ميحصلش عندك لخبطة الكلمة Ascending بتبدأ بحرف الـ A تبقا دي A to Z (الترتيب التصاعدي) !! كل دا إحنا بنسجل يا حسين (اعدل الكرافتة عشان صورتك تطلع حلوة) ..Stop أنا المخرج وبقول Stop يعني وقف التسجيل .. ياااااااه كانت حلقة صعبة أوي الحلقة دي ، التسجيل بيحتاج مجهود جبار عشان تطلع الحلقة حلوة ولذيذة !!! دلوقتي جه وقت الجد ، اللي إحنا منعرفوش ، ندخل المغارة (على رأي الكبير حسام عيسى ..صقر المنتدى) ، هندخل المغارة عن طريق Alt + F11 معلومة قديمة ، طيب هندخل نعمل ايه ؟ أكيد هندخل عشان ندور على الكنز ..مش دي بردو مغارة ياسر بابا !! هنلاقي الكنز بس مدفوووووووون تحت الأنقاض Sub Macro1() ' ' Macro1 Macro ' ' Range("A1:C20").Select ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("B2:B20") _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Sheet1").Sort .SetRange Range("A1:C20") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub دا اللي إحنا سجلناه ..إحنا طلعنا شطار وبنعرف نسجل كويس جداً ..الكنز فين يا نور العين؟ الكنز مدفون ما بين الأسطر ..إزاي نقدر نخرجه.. أقولكم دا كله هتش !! اللي عمله محرر الأكواد في سنين هنختصره إحنا في ثانية واحدة وبسطر واحد (وهي دي الشطارة !!) Range("A1:C20").Sort Key1:=Range("B1:B20"), Order1:=xlAscending, Header:=xlYes ضع هذا السطر اللذيذ في إجراء فرعي وجربه ، هنلاقي إنه يبنفذ نفس الكود الطويل اللي سعادة محرر الأكواد سجله . طيب نهضم السطر اللي اتكتب : أول شيء عشان تقدر تتعامل في أي كود إنك تحدد الخلية أو النطاق اللي هتتشغل عليه ، وأظن دي واضحة جدا ، فالنطاق اللي هنشتغل عليه واللي فيه البيانات هو A1:C20 ، وممكن في الكود نحدد أول خلية في النطاق بس يعني ممكن يكون شكله كدا : Range("A1") بس أنا أفضل إننا نكتب النطاق بالكامل ، وبعد ما حددنا النطاق ، نطلق الحدث أي الفعل ، يعني السؤال المتوقع ايه المطلوب نعمله في النطاق : الإجابة نطبطب عليه وندلعه ، إجاية غير صحيحة ، الإجابة إننا نفرسه (هذه هي الإجابة الصحيحة ..نعم نفرزه ونرتبه زي ما إحنا عايزين) والفرز بيكون بكلمة Sort ونترك مسافة واحدة بالمسطرة بعد الفرز .. ونبدأ نشوف حاجة اسمها بارامترات الحدث Method ، ودي ممكن نشوفها في تسجيل الماكرو اللي قام بيه محرر الأكواد .. إحنا هناخد المهم وبس ، ميهمناش الدش الكتير !! أول بارامتر هو مفتاح الفرز أو الترتيب Key، بمعنى آخر المقصود بيه العمود اللي هيتم على أساسه الفرز ، والعمود هنا هو عمود الأسماء B1:B20 ، ونفس الكلام ممكن نستغنى عن النطاق بالكامل ونذكر فقط أول خلية في العمود B1 بالشكل ده Key1:=Range("B1") طيب محدش سأل ايه الواحد اللي جنب المفتاح (دا الحارس الشخصي للمفتاح عشان محدش يسرقه) ..الواحد ده يا أساتذة هو المفتاح الأول لعملية الفرز ، وهنفهم الحتة دي لما ناخد مثال تاني ... بعد كلمة Key1 نقطتين فوق بعض (Shift + حرف الكاف : ) وسواء وإنت بتكتب عربي أو إنجليزي (الاتنين سواسية).. يليها علامة يساوي .. ومعروف إن علامة يساوي ييجي بعدها قيمة ، ونترجم الكلام ده إن قيمة المفتاح الأول هو النطاق B1:B20 (أفضل إنه يتكتب نطاق العمود بالكامل) ناخد فاصل ، لا مش هنريح يا عبد الله ، أقصد فاصلة مش فاصل ، الفاصلة دي هي اللي بتفصل بين البارامترات يا أحباب .. ننتقل للبارامتر الثاني والمسمى Order ودا ترجمته يا أخ ابو سليمان (الترتيب ..) دلوقتي هتدعي عليه ، وتقولي يا عم إنت مش قلت كلمة Sort دي معناها ترتيب ..أيوا مش هنكر ..بس عشان تتضح الصورة كلمة Sort هنا فعل أو حدث Method ، أما كلمة Order تعتبر زي الاسم وممكن نقول إن البارامترات دي وصف لكيفية حدوث الحدث ، أي الطرق المؤدية لحدوث الحدث !! أنا تهت زيكم بالظبط المهم المقصود منها نوعية الترتيب هنا (هل الترتيب تصاعدي أم تنازلي) ، وبردو كلمة Order جنبها رقم واحد (الحارس الشخصي) ..يليها نقطتين وعلامة يساوي ، وقيمتها إما xlAscending أو xlDescending (أظن مفهومة يا أبو سليمان) ناخد فاصلة تانية وأوعدك دي تكون آخر فاصلة في السطر ده ..البارامتر الثالث هو المسمى Header ودي ترجمتها حقول البيانات أو عناوينها .. نسأل هل للبيانات اللي موجودة عناوين ولا لا ؟؟ م ، والاسم ، والنوع (دي عناوين أو حقول للبيانات) .. الإجابة نعم xlYes معلومة جديدة نستفيد منها إن الحدث Mehod قد يتبعه بارامترات ، وتأتي هذه البارامترات بعد الحدث Method بمسافة بينهما ، يعني اللي بيفصل بين الحدث والبارامترات هي المسافة (دي المحرم..) ..أما البارامترات فبيتم الفصل بين كل واحد وأخوه بفاصلة , .. حاجة تانية لما تلاقي النقطتين فوق بعض وبعدين علامة يساوي تعرف إن دا بارامتر .. يا رب تكون المعلومة مفيدة. طيب سؤال من الأستاذ طارق : هل البيانات لازم يكون فيها عنوان عشان نعمل فرز ؟؟ جاوب إنت يا عبد الكريم ، عبد الكريم : يا أستاذ طارق طالما فيه بارامتر بيسأل هل فيه عنوان أو مفيش ، يبقا أكيد ممكن إننا نفرز من غير عناوين البيانات .. الله ينور عليك يا أستاذ عبد الكريم ، وميحرمناش منك ، فعلا الكلام دا صحيح .. نشوف السطر ده بيأدي نفس الغرض ، استغنينا عن صف العناوين : Range("A2:C20").Sort Key1:=Range("B2:B20"), Order1:=xlAscending, Header:=xlNo النطاق بدأ من A2 بعيداً عن عناوين البيانات ، والمفتاح كمان بدأ من B2 ، ونخلي بالنا من قيمة البارامتر Header هنلاقيه xlNo (يعني مفيش عناوين). ********************************* ننتقل لجزئية تانية .. الجزئية اللي فاتت أخدت حقها وزيادة ، دلوقتي واحد بيبص لي وبيقولي ايه شكل البيانات الملخبطة دي ..حد يفرز الأسماء ويخلي كله مع بعضه (ذكور مع إناث) دا إنت راجل محترم حتى عيب عليك !! ..ردي : أنا آسف والله يا حاج محمد مكانش قصدي ، دا كان مجرد مثال عموما عنيا ليك هنعيد ترتيبهم زي ما إنت عايز (حضرتك أكيد عايز الذكور أولا وبعدين الإناث ) ..رد وقال : كدا عين العقل .. بسيطة يا حاج محمد : السطر الخاص بالفرز هنزود عليه مفتاح كمان ، وشكل لترتيب المفتاح الجديد ... قبل ما أضع السطر ..عايزين نعود نفسنا إننا ندي نفسنا مساحة من التفكير قبل التنفيذ .. الفرز المرة دي هيكون على عمودين (مين قبل مين .. يعني عمود الاسم الأول ولا عمود النوع ؟؟ الإجابة بسيطة عمود النوع عشان نفصل بين الذكور والإناث : أي خدمة يا حاج محمد) إذاً الفرز هكيون لعمود النوع (ذكر ، أثنى ) ، نبص في أول حرف في ذكر وأول حرف في أنثى (محدش يبص على كل الحروف عيب) أول حرف هو حرف الذال في كلمة ذكر ، وألف في كلمة أنثى : طيب الكلمتين دول الألف الأول ، بمعنى تاني لو تركنا الخيار xlAscending اللي هو الترتيب التصاعدي بكدا هيكون الإناث الأول وبعدين الذكور حسب الترتيب الأبجدي ، إذاً في الحالة دي هنكتب xlDescending (عشان تتم عملية الفرز ذكر ثم أنثى) نأتي للتطبيق العملي : ها هو السطر ... Range("A1:C20").Sort Key1:=Range("C1:C20"), Order1:=xlDescending, Key2:=Range("B1:B20"), Order2:=xlAscending, Header:=xlYes هنشبه السطر دا بشقة ليها بابين : أقصد بالبابين عمودين الترتيب (عمود النوع ثم عمود الأسماء) ، كل باب له مفتاح عشان يفتح بيه .. الباب الأول عمود النوع ومفتاحه رقم 1 ، وشكل ترتيبه أو نوع ترتيبه تنازلي (عمود النوع) Key1:=Range("C1:C20"), Order1:=xlDescending والباب التاني ومفتاحه رقم 2 ، وشكل أو نوع ترتيبه تصاعدي (عمود الأسماء) Key2:=Range("B1:B20"), Order2:=xlAscending طبعا المفتاح ده ميشتغلش على ده ، ولا ده يشتغل على ده ، إنما ده لده وده لده (معلش هيست شوية) مفتاح النوع هيعتمد على النطاق C1:C20 ، ومفتاح الأسماء هيعتمد على النطاق B1:B20 ، كل مفتاح يلعب في ملعبه أقصد في بابه ، أقصد في العمود الخاص بيه. وبكدا لما ننفذ السطر اللي فات ، نقدر نحصل على النتيجة التي ينتظرها الحاج محمد.. الحاجة أم محمد شكلها مكشر وزعلت وبتقول بالإنجليزي : Ladies First يا مان (معلش أصلها مثقفة حبتين) أوك يا حاجة ولا تزعلي نفسك .. الفكرة بأبسط مما تتخيلي غيري كلمة واحدة ، وألا أقولك متتعبيش نفسك شيلي حرفين وحطي حرف واحد بس شيلي حرفي De في كلمة Descending وحطي حرف الـ A (شفتي بقا إنها بسيطة .. متنسيش الفطير عشان مستر حسام) يا للروعة !! الحاجة أم محمد مش مصدقة نفسها .عموما جربوا (مش تجربوا الكود .. جربوا فطير أم محمد هيعجبكم جداً ، وبعد ما تاكلوا وتتمتعوا بالفطير جربوا الكود بعد التعديل ..) ********************************* ننتقل لجزئية أخيرة تهم نفس الموضوع ...ألا وهي ألا وهي (تصدقوا نسيت) افتكرت .. إزاي أخلي النطاق غير محدد أو ديناميكي .. إحنا لما اتعاملنا مع النطاق حددنا النطاق لحد الصف رقم 20 في المثالين اللي فاتوا .... عايزين يكون الكود مرن ، يعني يمشي مع أي عدد من الصفوف ، لأن قواعد البيانات معروف إنها مش ثابتة .. يبقا المطلوب الجديد إننا نخلي آخر صف مفتوح ، أو من خلال الكود نخلي محرر الأكواد هو اللي يحدد آخر صف مش إحنا .. مستر حسام عيسى تناول (الفطيرة بتاعت أم محمد) وأيضاً تناول هذه النقطة في شرح رائع له .. نشرحها تاني ..ونخلي بالنا ، وخلينا جد بقا شوية ومركزين أوي لأن الحتة دي تقريبا مفيش مبرمج بيستغنى عنها (آه والله زي ما بقولكم كدا) نفرض دلوقتي إننا مش عارفين آخر صف ..نجيبه إزاي .. الإجاية نسجل ماكرو (واحد مبرق ومش فاهم أيوا هنسجل ماكرو ..بردو مبرق ) بص يا مبرق : ابدأ تسجيل و تعالى في العمود الأول A واقف بعيد تحت بعد البيانات بمسافة كبيرة وليكن مثلا A100 ، وبعدين اضغط Ctrl + سهم لفوق من لوحة الأسهم .بس خلااااص انتهى التسجيل ، نروح لمحرر الأكواد هنلاقي الشكل ده Range("A100").Select Selection.End(xlUp).Select وممكن نختصره في سطر واحد بس إننا نشيل كلمة Selection ونحط مكانها النطاق Range("A100").End(xlUp).Select عايز تطبق الكود ده ، روح لأي خلية بعيدة في أي عمود واضغط Alt+F8 وشوف الماكرو اللي فيه السطر اللي فات اسمه ايه واضغط Run.. نفهم إزاي هنستغل الحتة دي في إننا نعرف آخر سطر به بيانات في العمود A .. نقطة البداية هي A100 ، والكلمة End(xlUp) دي لما ضغطنا Ctrl وسهم لفوق المحرر ترجمها كدا ، يعني اطلع لفوق Up يا سفن أب يا لذيذ يا رايق (ما هو لازم نهضم الفطير اللي أكلناه) طيب واحد بيقولي بس دا مش حل لأني أساسا معرفش البيانات دي آخرها فين ، بلاش استعباط .هرد عليه وأقوله : الله يسامحك ، ما هو لو صبر القاتل ع المقتول كان مات لوحده ... إحنا هنخلي رقم الصف 100 هو آخر صف في ورقة العمل ، بالنسبة لـ 2003 آخر صف 65536 ، أما في 2007 فما فوق فعدد الصفوف 1048576 (يا دي الحيرة ..يعني نغير رقم 100 لأي رقم فيهم) ..اللي يحيرك طيره ، يعني لا هنستخدم الرقم ده ولا ده إحنا هنخلي المحرر هو اللي يعد الصفوف كلها بالسطر ده ، سبق وشرحناه في النافذة الفورية MsgBox Rows.Count بس إحنا مش عايزينها في رسالة ..دا بس عشان تتضح الصورة ، كلمة Rows تعني صفوف يا أبو سليمان ، وكلمة Count يعني يا محرر اتفضل عد. هكيون الناتج لتنفيذ السطر اللي فات مختلف حسب إصدار الأوفيس اللي عندك ، لو 2003 هيطلع الناتج 65536 ، ولو الأوفيس 2007 فما فوق هيطلع الناتج 1048576 (أكيد فيه ناس تاااهت مني .. الفطير عمل عمايله معاكم) يرجع مرجوعنا لموضوعنا الأصلي عرفنا عدد الصفوف من خلال محرر الاكواد ، يبقا هنشيل رقم 100 ونحط Rows.Count وبس Range("A" & Rows.Count).End(xlUp).Select نخلي بالنا الرقم 100 كان داخل أقواس التنصيص ، لكن لما استخدمنا الجملة Rows.Count الأقواس طردتها براها ، لأنها الأقواس مش بتقبل المتغير ، وعدد الصفوف هنا يا أحباب وركزوا متغير حسب الإصدار ، لكنها بردو حنينه مهانش عليها تطرده قامت حضنته بعلامة & عشان يكون جنبها طيب نرجع تاني للهدف من دا كله إننا نعرف رقم آخر صف فيه بيانات ، إحنا بالسطر الأخير عرفنا نحدده لكن إزاي نعرف رقم صفه .. هنشيل Select ونحط Row وبس .. لا محدش يقولي بس !! كدا السطر دا بالشكل ده Range("A" & Rows.Count).End(xlUp).Row لو نفذت السطر ده هيقولك محرر الأكواد يا أهبل ايه ده ويطلع لك رسالة خطأ Invalid Use استخدام خاطيء.. السطر صحيح ، بس السطر عبارة عن رقم (اللي هو رقم الصف الأخير اللي فيه بيانات) بس الرقم دا مينفعش يقف لوحده يخاف ياخد برد .. لازم نحط الرقم ده في متغير .. Dim LR As Long LR = Range("A" & Rows.Count).End(xlUp).Row MsgBox LR عملنا متغير باسم LR ودي اختصار Last Row أو الصف الأخير (بس التسمية اختياري يا شباب) ووضعنا قيمة للمتغير اللي سميناه LR في السطر الثاني ، فأصبح المتغير LR يحمل الآن رقم الصف الأخير وفي السطر الثالث عشان نختبر مدى صحة الكود ونشوف النتيجة عملنا رسالة يظهر فيها قيمة المتغير .. ** ملحوظة هامة : ممكن السطر الثاني نستخدم كلمة Cells بدلاً من كلمة Range بس هيكون التركيب مختلفة شوية ، لأن مع كلمة Cells بيكون فيه جزئين : الجزء الأول رقم الصف والجزء الثاني رقم العمود ، معنى الكلام ده إن Cells بتتعامل مع أرقام ، فيكون شكل الكود اللي فات لو استخدمنا Cells بهذا الشكل : Dim LR As Long LR = Cells(Rows.Count, 1).End(xlUp).Row MsgBox LR طبعاً Rows.Count تمثل رقم آخر صف به بيانات ، ورقم واحد بيمثل رقم العمود الأول A >>>>> نفذ الكود سواء اللي فات أو اللي قبله !! هنلاقي رقم الصف الأخير طلع في رسالة (أنا طلعت عيني وأكيد إنتو كمان .. يعني اللفة الطويلة دي عشان نعرف رقم آخر صف به بيانات.) دلوقتي جه الوقت إني أودعكم .. نشوف شكل الكود في النهاية هيكون عامل إزاي Sub SortData() Dim LR As Long LR = Range("A" & Rows.Count).End(xlUp).Row Range("A1:C" & LR).Sort Key1:=Range("C1:C" & LR), Order1:=xlDescending, Key2:=Range("B1:B" & LR), Order2:=xlAscending, Header:=xlYes End Sub دا الكود اللي هيرتب الذكور ثم الإناث ، وبعدين يرتب الأسماء ، في النطاق اللي بيبدأ من A1:C ورقم آخر صف ..لاحظ إننا شلنا رقم 20 من الكود الأصلي اللي شرحناه من بدري ، واستبدلناه بالمتغير LR والذي يحمل قيمة رقم آخر صف...!! لتجربة الكود أضف اسماً جديدا ونفذ الكود مرة أخرى ستجد أن الاسم الجديد قد انتقل لترتيبه ، وإلى هنا توقفت دماغي (فااااااااااااااصل ومفيش نواصل) أرجو أن أكون قد وفقت في توصيل المعلومة ، وإلى أن نلتقي أترككم في رعاية الله. كان معكم الحاجة أم محمد صاحبة الفطير من منتدى أوفيسنا تقبلوا تحياتي ودمتم بود1 point
-
الله الله الله تسلم الايادى بارك الله فيكما واعطاكم من الخير قدر كرمه اسعد الله اوقاتكم بكل الخير1 point
-
السلام عليكم ورحمة الله وبركاته اقدم هذا العمل واهديه الى اساتذتى وكل أعضاء اوفيسنا وهو: بعيد عن المعادلات والاكواد . استخدام الصور في المخططات والرسومات البيانية اسال الله ان يتقبل منى هذا العمل ملحوظه ذكرت أسماء أساتذتي في المنتدى ووضعت بيانات افتراضيه فقط تقبلوا خالص تحياتي تلميذ اوفيسنا استخدام الصور فى الرسم البيانى.rar1 point
-
بين النموذج و التقرير : إظهار التقرير وتصديره لمسار معين بصيغة PDF لدينا تقرير لعميل ، نود الإطلاع على التقرير Preview وبعد تدقيق التقرير والتأكد من المعلومات ، نختار بين الرفض أو تصديره لمسار معين (حيث يتم حفظ تقارير هذا العميل ) على الخادم (السيرفر) أو غيره ... !! في النموذج وخلف زر أمر ننسخ الكود التالي : Private Sub Command56_Click() On Error GoTo Err_Command56_Click Dim stDocName As String stDocName = "Rep_ACC_Tracker" DoCmd.OpenReport stDocName, acPreview Exit_Command56_Click: Exit Sub Err_Command56_Click: MsgBox Err.Description Resume Exit_Command56_Click End Sub وفي محرر الفيجوال للتقرير ، ننسخ الكود التالي : Private Sub Report_Deactivate() Dim LResponse As Integer Dim MyFiLeName As String If Not NoData Then ' checks for no data event to prevent a mis fire DoEvents MyFiLeName = "D:\Customer reports\ACC\" & "Rep_ACC_Tracker" & Format(Now, "dd-mm-yyyy hhnnss") & ".pdf" DoEvents LResponse = MsgBox("Do you wish to Save Your Adobe File to a ACC file location", vbYesNo, "Save Now or loose it") DoEvents If LResponse = vbYes Then DoCmd.OutputTo acOutputReport, "Rep_ACC_Tracker", acFormatPDF, MyFiLeName, True DoEvents Else End If End If End Sub1 point
-
لم يستخدم SQL ؟ يستخدم SQL للتفاعل مع بيانات قاعدة البيانات الخاصة بك و.يستخدم الأكسس SQL للعديد من المهام: كلما تم تشغيل استعلام يستخدم SQL لتصفية البيانات كلما تم عرض التقرير يستخدم SQL لجمع البيانات ليتم عرضها ويوفر SQL البيانات المعروضة ضمن نموذج Access تشغيل الاستعلامات الأكسس يوفر للمستخدم واجهة ودية، وعرض تصميم الاستعلام، لبناء استفسار. هذه الواجهة تقدم تمثيل رسمي للاستعلام بدون ان يكون للمستخدم أي معرفة بال SQL . عندما يقوم المستخدم ب"تشغيل" الاستعلام يقوم الأكسس بترجمتها بيانياً الى عبارة SQL التي تمرر بدورها الى مشغل قاعدة بيانات Jet. يقوم Jet بإسترجاع البيانات المناسبة و يعرضها Access بطريقة عرض ورقة بيانات الاستعلام. في هذه السلسلة من الدروس سوف تجد كيفية بناء استعلامات جديدة وتغيير الاستعلامات الموجودة باستخدام VBA و SQL ، وسوف تعرف السبب الكامن في أن كثيراً من مطوري قواعد البيانات المحترفين يفضلون عدم استخدام الاستعلامات المخزنة على الإطلاق وللحديث بقية1 point
-
Date And Time At Forms Caption لإظهار تاريخ اليوم والوقت بدل اسم النموذج ، الكود التالي يفي بالغرض مع تثبيت الرقم 1000 في Timer Interval Private Sub Form_Timer() Me.Caption = " Today is " & "Date :" & " " & Format$(Now()), "dd mm yyyy " & " Time : " & "h:mm:ss AMPM" End Sub >>>>>>>>>>>>1 point
-
1 point