بحث مخصص من جوجل فى أوفيسنا
![]()
Custom Search
|
نجوم المشاركات
Popular Content
Showing content with the highest reputation on 08/15/15 in all areas
-
السلام عليكم أخي راعي الغنم حسب معلوماتي البسيطة عند فتح النموذج يعمل قبل عند تحميل النموذج وبإمكانك التأكد من ذلك بستخدام رسالة msgbox بأن تضع رسالة في كل حدث تدلك أيهما قبل الاخر وعلى ما أظن حسب خبرتي البسيطة بأن حدث فتح النموذج يبدأ مع الفتح وقبل تحميل العناصر النموذج أما الحدث الثاني يبدأ عند فتح النموذج وبعد تحميل عناصر النموذج فإذا أردت أن تضيف قيمة في مربع نص مثلا فلا يمكنك ذلك مع حدث فتح عند فتح النموذج والله أعلم تحياتي للجميع3 points
-
السلام عليكم قد يكون الموضوع مش جديد وعلى المبتدئين ! ولكن يمكن ان يكون من نوع السهل الممتنع ! الموضوع : عند اضافة بيانات لحقل معين اريد ان يشيك اولا هل هو موجود فيذهب لذلك السجل او يستمر في الاضافة عند عدم وجود المكرر ان ما جعلني اكتب هذا الموضوع هو ان احد الاخوة طرح هذا السؤال وهو شخص اعرف ان مستواه جيدا فقمت بالبحث في اماكن عدة فلم اجد جوابا شافيا ! ويكثر الطلب عليه دائما ! وضعت هنا طريقتين وعند الحدث قبل التحديث للحقل: 1. وهي المطبقة في المرفق: Private Sub Id_BeforeUpdate(Cancel As Integer) Set rs = Me.RecordsetClone rs.FindFirst "id=" & Me.Id If Not rs.NoMatch Then Undo Me.Bookmark = rs.Bookmark MsgBox ("موجود هنا") End If End Sub 2. Private Sub Id_BeforeUpdate(Cancel As Integer) idx = Me.Id If DCount("*", "persons", "id=" & idx) Then Undo DoCmd.FindRecord idx MsgBox ("مكرر هنا") End If End Sub تحياتي متمنيا الفائدة ومستقبلا التعقيب وراغبا في المشاركة بافكار اخرى check_before_ins_upd.rar2 points
-
السلام عليكم ورحمة الله وبركاته كنت بصدد عمل برنامج " دليل هاتف " فصادفتني بعض المشاكل باستخدام القوائم فأردت عمل شئ من التغيير في استعمال القوائم حتى هداني الله الى فكرة بأستخدام الاكواد والحمد لله انجزتها ولكنها تبقى في بدايتها وامكانية تطويرها واردة واحببت ان اشارككم بها لعل اجد من ارائكم بعض الامور التي قد تفيد بهذا الشأن هنا ملف يحتوي على صفحة من البرنامج مع احتوائه على القائمة المذكورة اخوكم عماد الحسامي1 point
-
تحياتى و كل عام و انتم بخير و دعائى الى الله لكل اعضاء هذا المنتدى أن يكون بخير و أحسن حال و تحية خاصة للحاضر الغائب الاستاذ / عبدالله باقشير و الاستاذ / ضاحى الغريب و مع ترقية المنتدى الى الافضل دائما مرفق برنامج لحسابات العملاء و يمكن توظيفه و التعديل عليه مرفق الشرح مع البرنامج لا تنسونا من صالح الدعاء sales status _statment of client account_2015.rar1 point
-
اخي ياسر خليل أبو البراء جزاك الله خير الجزاء جعله الله في ميزان حسناتك الله وأنار قلبك بالايمان ورزقك الفردوس الاعلى من الجنان دمت بحفظ الرحمن طلب كود معادلة ويقوم بجمع تلقائى واحصائى لكل قيم الفواتير1 point
-
جرب الكود التالي ..أدرج موديول جديد وضع فيه الكود التالي Private Type POINTAPI X As Long Y As Long End Type Private Type MOUSEHOOKSTRUCT pt As POINTAPI hwnd As Long wHitTestCode As Long dwExtraInfo As Long End Type Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long Private Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal nCode As Long, ByVal wParam As Long, lParam As Any) As Long Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long Private Declare Function PostMessage Lib "user32.dll" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long Private Declare Function GetCursorPos Lib "user32.dll" (ByRef lpPoint As POINTAPI) As Long Private Const WH_MOUSE_LL As Long = 14 Private Const WM_MOUSEWHEEL As Long = &H20A Private Const HC_ACTION As Long = 0 Private Const GWL_HINSTANCE As Long = (-6) Private Const WM_KEYDOWN As Long = &H100 Private Const WM_KEYUP As Long = &H101 Private Const VK_UP As Long = &H26 Private Const VK_DOWN As Long = &H28 Private Const WM_LBUTTONDOWN As Long = &H201 Private mLngMouseHook As Long Private mListBoxHwnd As Long Private mbHook As Boolean Sub HookListBoxScroll() Dim lngAppInst As Long Dim hwndUnderCursor As Long Dim tPT As POINTAPI GetCursorPos tPT hwndUnderCursor = WindowFromPoint(tPT.X, tPT.Y) If mListBoxHwnd <> hwndUnderCursor Then UnhookListBoxScroll mListBoxHwnd = hwndUnderCursor lngAppInst = GetWindowLong(mListBoxHwnd, GWL_HINSTANCE) PostMessage mListBoxHwnd, WM_LBUTTONDOWN, 0&, 0& If Not mbHook Then mLngMouseHook = SetWindowsHookEx( _ WH_MOUSE_LL, AddressOf MouseProc, lngAppInst, 0) mbHook = mLngMouseHook <> 0 End If End If End Sub Sub UnhookListBoxScroll() If mbHook Then UnhookWindowsHookEx mLngMouseHook mLngMouseHook = 0 mListBoxHwnd = 0 mbHook = False End If End Sub Private Function MouseProc( _ ByVal nCode As Long, ByVal wParam As Long, _ ByRef lParam As MOUSEHOOKSTRUCT) As Long On Error GoTo errH If (nCode = HC_ACTION) Then If WindowFromPoint(lParam.pt.X, lParam.pt.Y) = mListBoxHwnd Then If wParam = WM_MOUSEWHEEL Then MouseProc = True If lParam.hwnd > 0 Then PostMessage mListBoxHwnd, WM_KEYDOWN, VK_UP, 0 Else PostMessage mListBoxHwnd, WM_KEYDOWN, VK_DOWN, 0 End If PostMessage mListBoxHwnd, WM_KEYUP, VK_UP, 0 Exit Function End If Else UnhookListBoxScroll End If End If MouseProc = CallNextHookEx( _ mLngMouseHook, nCode, wParam, ByVal lParam) Exit Function errH: UnhookListBoxScroll End Function ثم في حدث الفورم أضف الكود التالي Private Sub ListBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) HookListBoxScroll End Sub Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) UnhookListBoxScroll End Sub1 point
-
وعليكم السلام ورحمة الله تفضل ابا انس مثال بتوظيف دالة Replace عدد الحروف والكلمات.rar1 point
-
بعد اذن اخي احمد هذه المعادلة البسيطة لنفس الغرض =IF($A1="","",(IF(AND(CODE($A1)>=65,CODE($A1)<=90),INDEX(ROW($A$1:$A$100),CODE($A1)-64),"")))1 point
-
أخي الكريم لم أفهم الكثير .. يرجى تحديد طلب بعينه مع شرحه بالتفصيل لتجد المساعدة مني أو من غيري وطالما أنه لا توجد استجابة لموضوع فمعنى ذلك أن الأمر مبهم لدى الجميع قم بإرفاق النتائج المتوقعة .. ولا تفترض أن الجميع يفهم ما تطلب بدون شرح للمطلوب1 point
-
بسم الله ما شاء الله تفاعل جميل جداً بالموضوع وأنا نفسي استفدت من هذا التفاعل نجرب الكود التالي ونحاول نعمل Debug (اتصرف يا أخ إبراهيم في أي لوحة مفاتيح عشان هنحتاج نعمل Debug بشكل دائم لأن الأمر ده هيعلمنا إزاي كل سطر بيتنفذ و دا مهم جداُ في بناء الأكواد) Sub Test() Dim Arr Arr = [{"A", "B", "C", "D"}] Cells(3, "A").Resize(1, UBound(Arr)).Value = Arr End Sub بدون استخدام كلمة Array فقط استخدمنا بدلاً منها هذه الأقواس [ ] ، وعشان تقرا المصفوفة بحيث تبدأ من الواحد استخدمنا الأقواس { } .... بس خلاص1 point
-
زيادة في اثراء الموضوع هذا الدّالة الجديدة Condition أكثر من 8 شروط للدالة IF salim.zip1 point
-
وعليكم السلام ورحمة الله وبركاته وجزيت خيراً بمثله أخي الحبيب الغالي أبو يوسف لكم يسعدني أنني استطعت أن أقدم لك شيئاً ولو بسيطاً تقبل وافر تقديري واحترامي1 point
-
السلام عليكم أخي الحبيب أبو البراء: هذا ما أستطيع قوله...والسلام عليكم1 point
-
المطلوب بالمرفق ان كان كذلك قم بتحديد الموضوع كمجاب العطارتمسنا_2015_07_21_2_2.zip1 point
-
حياك الله اخي الكريم ... بحسب فهمي للكود أعلاه بأنك ترغب في ارسال رسائل من برنامجك الأكسس .. الكود vb.net الموضوع نوقش في المنتدى الأسبوع الماضي وهذا رابط اتمنى يفيدك... http://www.officena.net/ib/topic/63036-نظام-إجازات-الكتروني/ واذا فهمتك خطاء اتمنى ان تعذرني ..1 point
-
1 point
-
كلمة بدون كسور غير واضحة هل تعني بدون كسور مع التقريب مثلا 2.3 تصير 2 وكذلك 2.6 تصير 3 أو بدون كسور وبالتقريب لأسفل مثلا 2.3 أو 2.6 تصير 2 أو بدون كسور وبالتقريب لأعلى مثلا 2.3 أو 2.6 تصير 3 يفضل توضيح المطلوب تماما وتحديد الحقول التي سيتم التعامل معها في الملف1 point
-
وعليكم السلام أخي الغالي أبو يوسف الحمد لله أن تم المطلوب على خير ، حتى لا تظن أن عجلات القطار ستتوقف في كل المحطات .. فما زال في القطار بعض العجلات التي يمكن أن تساعد على السير قدماً تقبل وافر تقديري واحترامي1 point
-
هنا درس لاستاذنا نارت لبزو حول الاحداث http://www.officena.net/ib/topic/53234-فوائد-وتطبيقات-في-الأحداث-events/#comment-3433381 point
-
وعليكم السلام أختي الخطأ هذا ليس بسبب ان نظام الكمبيوتر x64 ، وانما بسبب نظام الاوفيس 64bits. واذا اردتي ان تأخذي نصيحة مايكروسوفت ، فالنصيحة تقول بأن تنصبي اوفيس 32bits على جهازك ، بغض النظر اذا كان نظام الوندوز x64 اوx86 . ولأني لا املك نسخة الاوفيس 64bits ، فبعد البحث في الانترنت ، وجدت هذا الكود: #If VBA7 Then Private Declare PtrSafe Function CallNextHookEx Lib "user32" (ByVal hHook As LongPtr, _ ByVal ncode As Long, ByVal wParam As LongPtr, lParam As Any) As LongPtr Private Declare PtrSafe Function GetModuleHandle Lib "kernel32" Alias _ "GetModuleHandleA" (ByVal lpModuleName As String) As LongPtr Private Declare PtrSafe Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" _ (ByVal idHook As Long, ByVal lpfn As LongPtr, ByVal hmod As LongPtr, _ ByVal dwThreadId As Long) As LongPtr Private Declare PtrSafe Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As LongPtr) As Long Private Declare PtrSafe Function SendDlgItemMessage Lib "user32" Alias "SendDlgItemMessageA" _ (ByVal hDlg As LongPtr, ByVal nIDDlgItem As Long, ByVal wMsg As Long, _ ByVal wParam As LongPtr, ByVal lParam As LongPtr) As LongPtr Private Declare PtrSafe Function GetClassName Lib "user32" Alias "GetClassNameA" _ (ByVal hwnd As LongPtr, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long Private Declare PtrSafe Function GetCurrentThreadId Lib "kernel32" () As Long #Else Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, _ ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long Private Declare Function GetModuleHandle Lib "kernel32" Alias _ "GetModuleHandleA" (ByVal lpModuleName As String) As Long Private Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" _ (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, _ ByVal dwThreadId As Long) As Long Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long Private Declare Function SendDlgItemMessage Lib "user32" Alias "SendDlgItemMessageA" _ (ByVal hDlg As Long, ByVal nIDDlgItem As Long, ByVal wMsg As Long, _ ByVal wParam As Long, ByVal lParam As Long) As Long Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" _ (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long Private Declare Function GetCurrentThreadId Lib "kernel32" () As Long #End If '~~> Constants to be used in our API functions Private Const EM_SETPASSWORDCHAR = &HCC Private Const WH_CBT = 5 Private Const HCBT_ACTIVATE = 5 Private Const HC_ACTION = 0 #If VBA7 Then Private hHook As LongPtr #Else Private hHook As Long #End If رجاء تجربته ، وافادتنا جعفر1 point
-
جرب وضع الكود التالي بحدث عند الخطأ للنموذج If DataErr = 3022 Then MsgBox "الاسم موجودٌ مسبقاً" Response = acDataErrContinue End If1 point
-
السلام عليكم هل رجعت إلى وضع التوافق؟ هناك برامج ثانية يمكنك فتح ملفات الوورد من خلالها مثل الدفتر أو المفكرة ولكن ضمن تنسيقات أقل وقد تحذف التسيقات حال فتحها بالمفكرة. أكرر... راجع وضع التوافق --- كانت لاحقة ملفات الوورد doc ثم تحولت إلى docx أظن أنه عند فتح ملف لاحقته قديمة سيطلب عند الحفظ ترقيته إلى docx هذا ما أستطيع قوله لك ريثما تجد من يحل لك مشكلتك راجياً لك التوفيق والسداد. والسلام عليكم ورحمة الله وبركاته.1 point
-
تفضل أخي الكريم لاحظ كود زر عودة أصبح لإغلاق النموذج وليس الخروج من الأكسس لاحظ مصدر التقرير ستجد أنه تم إضافة معيار لقراءة رقم ىالطالب من النموذج المفتوح لاحظ كود فتح التقرير الأول في نموذج التقارير ويمكنك تنفيذ نفس الخطوات مع باقي الأزرار StudentsRegister1.rar1 point
-
لدالة البحث VLOOKUP إمكانيات مذهلة لا يعلمها الكثير بالتاكيد تم استعراض الكثير من هذه الامكانيات على منتدى اوفيسنا إن لم يكن كلها ولكن كانت فى الاغلب رداً على اسئلة زملاء فلم ينتبة اليها الكثير لهذا سنستعرض معاً إمكانيات هذه الدالة على شكل - امثلة مع الشرح فكرة 1 / فكرة 2 / فكرة 3 / وبما اننا استخدمنا الدالة MATCH فلنتذكرها معاً فى المرفق ستجدوا التطبيقات وستتوالى باقى امكانيات هذه الدالة تباعاً ان شاء الله VLOOKUP _ 1.rar1 point
-
الأستاذ المحترم - تحية طيبة وبعد أرفق لك ملفاً بالمطلوب كما توقعته عسى أن تجد ضالتك به....كل صفحة جديدة ستجد هذه الكليشة كليشة.rar1 point
-
الحلقة الرابعة عشر ***************** السلام عليكم ورحمة الله وبركاته وحشتكم !! أكيد لا .. لأني لو وحشتكم كنتو فتحتوا الباب وسألتوا عليا .. عموما إنتو وحشتوني ، وعشان وحشتوني هاقدم لكم حلقة جديدة يمكن تفتكروني. النهاردة هتكلم عن حاجة ناس كتير شرحوها ، وشرحوها بشكل ممتاز ، ودا خلاني مش عارف أشرح إزاي ، لأن اللي شرحوها وفوا شرحها صراحة .. هنتكلم عن الحلقات (بس مش حلقات افتح الباب) الحلقات اللي هنتكلم عنها الحلقات التكرارية ، ومن اسمها هي عبارة عن حلقات بتتكرر (إضافة عظيمة!) اسمها بالإنجليزي Loops ودي مهمة جداً في عالم الأكواد ، محدش يقدر يستغنى عنها تقريباً .. نفترض إني دخلت الفصل (بما إني معلم) ولسه دي أول مرة أتعرف على الطلبة اللي في الفصل ..يا ترى أنا عندي استعداد أخلى طالب طالب يقوم وأنا أقوله قول اسمك والطالب اللي بعديه قول اسمك .. أعتقد إن ريقي هينشف ودماغي هتصدع ودا طبعا مش يرضيكم (مش كدا ولا ايه) ..أنا من النوع الكسول فكل اللي هعمله هعمل تكرار من أول طالب في الفصل لآخر طالب ، وأعطي الأمر مرة واحدة .. من أول طالب إلى آخر طالب قووووول اسمك يا حبيبي الطالب التالي هو دا شكل الحلقة التكرارية .. نبرمجها بلغة الـ VBA ... هنقول إن الفصل فيه 60 طالب (معلش دا واقع الفصول في مصر) .. نقطة مهمة مننساش إن الطالب متغير مش ثابت ، فنرمز للطالب المتغير بالرمز X مثلاً ... Sub Loops() Dim X As Long For X = 1 To 60 'Say your name Next X End Sub طبعاً الكود دا شوية له علاقة بالبرمجة وشوية هتش .. ايه اللي هنعمله ..زي ما اتعودنا (دايما) إننا نعرف المتغير .. ونركز في السطر الثاني بدأ بكلمة For متبوعة باسم المتغير اللي هو X وبعدين علامة يساوي عشان نحدد قيمة X المتغيرة (أو الطالب المتغير) وهنا القيمة ليها بداية وليها نهاية (كل شيء له بداية ونهاية) وبيفصل بين البداية والنهاية حرف الجر To وفي آخر الحلقة التكرارية جملة Next X وممكن نقول Next ونسكت ، ومحرر الأكواد هيفهم لوحده .. بس أنا تقليدي شويتين فخلينا نكتب المتغير ، عشان الكود ممكن يكون فيه أكتر من حلقة تكرارية .. الجزء المهم هو الجزء اللي بين السطرين ، وهو دا الأمر المطلوب تكراره ، السطر اللي هنا مجرد تعليق وهتش وملوش علاقة بالبرمجة .. بس حبيت أقرب لكم الفكرة بأسلوب جديد.. كدا لما أنفذ الكود اللي فات ، كل اللي عملته إني أعطيت الأمر مرة واحدة وبس (وأنا حاطط رجل على رجل ... الدورة تلف على طالب طالب ، ويقول اسمه ، ولما يخلص ، الدورة تنتقل للطالب اللي بعديه وهكذا إلى أن ينتهي الطلاب ، ولما الـ 60 طالب يخلصوا ..يتم إيقاف تنفيذ الكود... ناخد أول مثال بجد عشان نقدر نتعلم إزاي نستفيد من الحلقات التكرارية :: لنفترض أننا عايزين نرقم النطاق A1:A10 بالأرقام من 1 إلى 10يعني الخلية A1 = 1 والخلية A2=2 وهكذا ..طبعا الموضوع بسيط جدا Sub NumberRange() Range("A1").Value = 1 Range("A2").Value = 2 Range("A3").Value = 3 Range("A4").Value = 4 Range("A5").Value = 5 Range("A6").Value = 6 Range("A7").Value = 7 Range("A8").Value = 8 Range("A9").Value = 9 Range("A10").Value = 10 End Sub كود في منتهى الروعة .. شايف حسام بيضحك ويقولي عايزك ترقم النطاق من A1:A100 (وابتسم ابتسامة فيها شماته !!) نفكر شوية .. بقول نفكر شوية (بلاش تكمل الحلقة غير لما تبص في الكود وتفكر شوية .. فكر شوية واكسب التوفير في الوقت والجهد) ايه المشترك في أسطر الكود .. وايه المختلف .. المتشابه في كل الأسطر Range("A ").Value = والمختلف هو الرقم بعد حرف الـ A ، والقيمة اللي بعد علامة يساوي .. في السطر الأول الرقم اللي بعد حرف الـ A هو 1 ، والقيمة بعد علامة يساوي بردو 1 ، ونفس الكلام مع السطر رقم 2 ، ورقم 3 وهكذا يبقا أول حاجة تفكر فيها إنك المختلف أو المتغير أو الشيء الغير ثابت تضعه في متغير ، ودا لأنه مش ثابت ومتغير .. فنضع متغير باسم X مثلاً ونعمل حلقة تكرارية من 1 إلى 10 (دي القيم اللي هيحملها المتغير) Sub NumberRange() Dim X As Long For X = 1 To 10 Range("A" & X).Value = X Next X End Sub نفس الكود اللي شرحناه من شوية ، الاختلاف في السطر اللي بين سطري التكرار .. الحلقة هتدور 10 مرات ، وفي كل مرة المتغير X بيحمل قيمة مختلفة (نرررررركز في الجزئية اللي جاية لأنها مهمة جداً جداً ) مش هنفذ الكود مرة واحدة .. سنقوم بعملية التنفيذ واحدة واحدة ، اللي مستعجل يروح ينفذ الكود مرة واحدة ، واللي مش مستعجل أنا معاه ..عشان يعرف حاجة مش هيعرفها الأخ المستعجل ... ضع مؤشر الماوس في أي مكان في الكود .. جميل >> اضغط F8 من لوحة المفاتيح ، وجمد قلبك وقول يا رب .. لاحظت ايه يا عبد المحسن؟ عبد المحسن ناااااااام مني (الله يسامحك) ..عبد المحسن : شايف الدنيا صفرا ليه ، هو فيه عاصفة النهاردة كمان؟ .. رديت عليه : لا يا عبد المحسن كمل نومك ، السطر الأصفر اللي ظهر ده سببه إننا ضغطنا F8 .. ودا فايدته إننا هنقوم بعملية التنفيذ واحدة واحدة .. سطر سطر .. السطر الأصفر على أول سطر في الكود Sub NumberRange() اضغط F8 مرة تانية ، ايه اللي حصل انتقل السطر الأصفر للسطر التالت ، طيب والسطر التاني يا معلم .. ملوش لازمة !!! أكبر خطأ إنك تعتقد إنه ملوش لازمة ، لما ضغطنا F8 للمرة التانية ، محرر الأكواد خزن في الذاكرة كل المتغيرات الموجودة في الكود عايز تتأكد من كلامي ، حرك مؤشر الماوس اللي على شكل حرف I (فيه شرطة فوق وشرطة تحت) حرك الماوس من غير ما تدوس كليك .. واقف على المتغير X هتلاقي تلميح في مستطيل صغير بيقولك المتغير X=0 ، دي كدا القيمة المبدئية للمتغير ... لما تضغط F8 للمرة التالتة ، روح شوف قيمة X مرة تانية هتلاقي قيمة X=1 (ايه اللي خلاها 1 مش كانت صفر من لحظة ) اللي حصل إننا انتقلنا من السطر For X = 1 To 10 والسطر دا هيبدأ في عمل الحلقة التكرارية اللي بنقول عليها ، والحلقة بدايتها 1 زي ما حددنا (وطبعاً ممكن نغير نقطة البداية يا شباب .. مش شرط 1) حرك مؤشر الماوس من غير ما تدوس على المتغير X في السطر المظلل بالأصفر Range("A" & X).Value = X هنلاقي زي ما قلت إن X =1 يعني محرر الأكواد هيعمل ايه دلوقتي ، هيشيل كل X ويحط مكانه القيمة 1 ، فيصبح السطر في الذاكرة بهذا الشكل Range("A1").Value = 1 لحد كدا تمام التمام ، صغر محرر الأكواد بحيث تكون ورقة العمل ظاهرة بالنسبة لك واتأكد إن النطاق A1:A10 فارغ ليس به أي بيانات ، وركز في ورقة العمل ، واضغط F8 عشان تنقل السطر الأصفر إلى هذا السطر ، ولاحظ ورقة العمل Next X لاحظت يا منصور الخلية A1 وضعت فيها القيمة 1 ، نخلي بالنا إن السطر الأصفر بيتم تنفيذه بعد الخروج منه ، فلما خرجنا من السطر تم تنفيذ الأمر وأعطى القيمة 1 للخلية A1 .. اضغط F8 مرة أخرى ، ونلاحظ إن السطر الأصفر انتقل للسطر اللي قبليه ، مش لبداية الحلقة التكرارية ، يعني ببساطة السطر اللي بيحدد بداية الحلقة ونهايتها بيعدي عليه مرة واحدة فقط .. أما سطر الأمر والسطر اللي فيه كلمة Next بيبدل السطر الأصفر عليهم... نبص دلوقتي على قيمة المتغير X هنلاقيها بقت 2 فيتم تنفيذ السطر بمجرد الضغط على F8 ويضع القيمة 2 في الخلية A2 وهكذا ..جرب واضغط F8 وفي كل مرة شوف قيمة المتغير X وشوف النطاق A1:A10 في كل مرة أول ما توصل قيمة المتغير X إلى الرقم 10 تتوقف الحلقة التكرارية ، وينتقل السطر الأصفر لجملة End Sub .. وينتهي عمل الكود .. عارف إني طولت في النقطة اللي فاتت ، بس كان لازم أطول فيها ، عشان أنا فاضي ومفيش ورايا شغل ، فقلت أصدعكم شوية!! ننتقل لمثال آخر --------------- عشان نقدر نفهم إزاي نستفيد من الحلقات التكرارية .. عايزين نعد الاسم (أحمد) في النطاق A1:A10 نفترض إني عندي الأسماء دي في النطاق A1:A10 أحمد ياسر سليم حسام عيسى أحمد أحمد خليل عبد الله أحمد المطلوب : نشوف الاسم (أحمد) كم مرة تم تكراره .. المعطيات : استعن بالله ثم بالحلقة التكرارية .. الفكرة : هنعمل اختبار صغير بقاعدة IF وهنقول لو قيمة الخلية بتساوي "أحمد" .. زود المتغير Counter بقيمة واحد Sub CountName() Dim X As Long Dim Counter As Long For X = 1 To 10 If Range("A" & X).Value = "أحمد" Then Counter = Counter + 1 Next X MsgBox Counter End Sub عملنا متغير جديد باسم Counter عشان لما يتحقق الشرط ويلاقي الاسم "أحمد" يقوم يخلي المتغير Counter يساوي نفسه + 1 طيب ليه يساوي نفسه ، عشان في كل مرة يلاقي أحمد قيمته هتتغير فلازم نضيف واحد لكل Counter جديد النتيجة في الآخر هتظهر في رسالة ، وهي 4 .. طيب نجرب نشيل الواحد في هذا السطر Counter = Counter + 1 لو شيلنا الواحد هتكون النتيجة 0 ، لأن المتغير قيمته المبدئية صفر ، فلما يتحقق الشرط مش هيزيد المتغير إلا لما نضيف واحد في كل مرة يتحقق الشرط. هناخد مثال آخر ---------------- عندنا درجات في النطاق A6:A15 ، عايزين نكتب ناجح أوراسب في الخلية المجاورة للدرجة ، لو الدرجة أكبر من أو يساوي 50 يبقا ناجح ، مكانش يكون راسب ... نخلي بالنا أنا غيرت بداية النطاق عشان الحلقة التكرارية بردو هتتغير بدايتها ونهايتها طبقاً للصفوف الجديدة 58 41 88 40 50 40 98 94 60 35 نجرب الكود التالي .. Sub LoopsTest() Dim X As Long For X = 6 To 15 If Cells(X, 1).Value >= 50 Then Cells(X, 2).Value = "ناجح" Else Cells(X, 2).Value = "راسب" End If Next X End Sub نلاحظ الحلقة التكرارية بدأت من 6 إلى 15 (ودا متغير للصفوف من الصف رقم 6 إلى الصف رقم 15) ووضعنا الشرط بين سطري الحلقة التكرارية ، لو الخلية اللي في الصف X والعمود الأول أكبر من أو يساوي 50 يقوم يعمل ايه؟ يضع القيمة النصية "ناجح" في الخلية اللي في العمود الثاني والصف X (نفس الصف بالطبع لأن قيمة X في الحالة دي هي هي نفس القيمة لأننا في نفس اللفة) .. إذا لم يتحقق الشرط قام بتنفيذ الجزء الثاني بأن يكتب النص "راسب" ثم إغلاق جملة IF بالجملة End IF ومننساش القفلة زي ما اتعودنا.. ننتقل لآخر مثال في الحلقة دي (عشان أنا تعبت وإنتو كمان أكيد تعبتو) في الأمثلة اللي فاتت عملنا حلقات تكرارية للصفوف .. واحد بيقولي طيب والأعمدة ملهاش نصيب في الدوخة اللي إحنا فيها دي .. أقوله أكيد ليها نصيب .. المطلوب إننا في الصف الرابع ، نكتب معادلة =COLUMN() بس في الأعمدة من العمود رقم 1 إلى العمود رقم 15 (A To O) نعقدها شوية ونقول في الأعمدة اللي رقمها فردي بس (الأعمدة اللي رقمها زوجي مش محتاجينها) يعني ببساطة عايزين نحط المعادلة في الأعمدة A C E G I K M O Sub ColumnsLoop() Dim X As Long For X = 1 To 15 Step 2 Cells(4, X).Formula = "=COLUMN()" Next X End Sub الحلقة التكرارية بدأت من العمود الأول حتى العمود رقم 15 (البداية والنهاية) معلومة جديدة Step 2 (دي معناها إننا هنقفز ..والقفز هيكون بمقدار 2 أي خطوتين) بدأنا بـ 1 فلما نقفز بمقدار 2 ، هنروح لرقم 3 ، أي أن المتغير سيكون رقم فردي في كل مرة 1 ، 3 ، 5 ، 7 ، 9 ، 11 ، 13 ، 15 (وهو دا المطلوب بالضبط) سطر الأمر فيه الخاصية Formula ودي عشان نقدر نضع معادلة من خلالها .. والمعادلة ببساطة زي ما شفناها من شوية بس بتكون بين أقواس تنصيص .. طيب الجزء الأول من السطر نلاحظ إننا استخدمنا Cells ودي بتكون متبوعة بقوسين ، وبين القوسين رقم الصف ثم فاصلة ثم رقم العمود ، وبما إن رقم الصف ثابت اللي هو رقم 4 ، فكتبناه زي ما هو .. اما رقم العمود فمتغير فوضعنا رقم العمود X ... جرب الكود وشوف النتيجة بنفسك أرجو أن أكون قد وفقت في توصيل المعلومة بأسلوب مبسط كان معكم أخوكم أبو البراء من تراك أوفيسنا (لف على الحلقات من الحلقة رقم 1 إلى الحلقة رقم 14 .. لو عايز تتعلم الـ VBA) ويا رب ميكونش فيه حد جاله دووووووووخة من كتر اللف .. والله أنا اللي دوخت أستودعكم الله .. دمتم في رعاية الله تقبلوا تحياتي .. دمتم بود1 point
-
السلام عليكم ورحمة الله وأنقل إليك أخي الكريم إحدى الدوال المستحدثة لأخينا العزيز المشرف "أبو ثامر" حفظه الله ورعاه ويسّر عليه كل عسير ووفقه لما يحب ويرضى... جزاه الله عنا كل خير... الدالة المستحدثة تعطي عددا كبيرا من الخيارات لاستعمال الدالة الشرطية وهذه الدالة سماها أخونا الكريم IFYES وكيفية استعمالها تجدها في الملف المرفق... ويمكنك أيضا تحميلها مع دوال أخرى مستحدثة من الرابط التالي: http://www.officena.net/ib/index.php?showtopic=23009 أخوك بن علية IFYes.rar1 point
-
السلام عليكم ورحمة الله أقدم لك في الملف المرفق مثالا لتمديد استعمال الدالة IF إلى أكثر من 8 مرات في إكسيل 2003... أخوك بن علية أكثر من 8 شروط للدالة IF.rar1 point