بحث مخصص من جوجل فى أوفيسنا
![]()
Custom Search
|

امير عاطف
المشرفين السابقين-
Posts
760 -
تاريخ الانضمام
-
تاريخ اخر زياره
نوع المحتوي
المنتدى
مكتبة الموقع
معرض الصور
المدونات
الوسائط المتعددة
كل منشورات العضو امير عاطف
-
Microsoft Office 2003
امير عاطف replied to امير عاطف's topic in المنتدى التقني العام و تطبيقات الأوفيس الأخرى
الرابط السابق لنسخة الأوفيس 2003 (انجليزي) -
ظهور رسالة Message Box عند كتابة قيمة بخلية
امير عاطف replied to امير عاطف's topic in منتدى الاكسيل Excel
Private Sub Worksheet_Change(ByVal Target As Range) Dim r For Each r In Range("a1", "a1000") If r.Value > 0 Then MsgBox "تمت أضافة المبلغ", vbOKOnly, "Officena" Exit For End If Next r End Sub -
كيف أمنع تسجيل قيمة فى خلية مع وجود قيمة فى أخرى
امير عاطف replied to حسام نور's topic in منتدى الاكسيل Excel
بالنسبه للسؤال الأول : الافضل ان تستخدم التنسيق الشرطي كما في مثال الاخ شرف (فكرة عملية) السؤال الثاني تم وضعه بمشاركة مستقلة هنــــــــــــــــــــــــا -
السؤال للأخ hosam : مطلوب ظهور رساله ( MESSAGE BOX ) عند أدخال رقم في خلية الأيداع تقول ( تمت أضافة المبلغ ) . - وظهور رساله أخرى عند أدخال رقم في خلية السحب تقول ( تم خصم المبلغ ) .
-
كيف اقوم باجبار البرنامج على عملية حذف او تحديث
امير عاطف replied to امير عاطف's topic in قسم الأكسيس Access
الأخ rudwan : المشكله ابسط مما تتخيل ولا تحتاج لكل هذا العناء حيث انك لا تحتاج الى الجدول الرابع ... حيث يمكنك استنتاج الجدول الرابع من الجدول الثالث عن طريق عمل استعلام اختيار (تحديد) وبعد ذلك تقوم بتجميع حسب رقم الفاتورة الرئيسيه مثل ما هو متواجد بالصورة التالية بحيث تقوم بوضع القيمة Group By اسفل حقل رقم الفاتورة الأساسية وتقوم بوضع القيمة Sum اسفل حقل مبلغ الفاتورة التفصيله ... بالطبع كل ذلك تقوم بأخذه من الجدول الثالث وبعد ذلك قم بتشغيل الاستعلام تجد كما تريد بالضبط ... واذاقمت بأي تغيير بقيم الفواتير التفصيليه سوف يتم تحدث القيمة لااجمالية مباشرةً -
كيف أمنع تسجيل قيمة فى خلية مع وجود قيمة فى أخرى
امير عاطف replied to حسام نور's topic in منتدى الاكسيل Excel
يستحسن وضع كل سؤال بمشاركة مستقله حتى نتبع قواعد طرح الاسئلة وفي نفس الوقت لا يوجد تداخل :pp: -
حل آخر : منقول من مشاركة لأستاذي محمد طاهر اذا لم يتم تحويل قاعدة البيانات الى صيغة MDB واذا لم يفلح
-
عمل نسخة محددة العرض من البرنامج - تجريبية Demo
امير عاطف replied to أبو وليد's topic in قسم الأكسيس Access
وهذا الكود ايضاً يقوم بنفس المهمة ... حيث ما عليك الاّ وضعه عند حدث الفتح On Open لنموذج بدء التشغيل Start UP واذا تعدى استخدام النسخة 30يوماً يقوم باظهار رسالة تخبر المستخدم بانتهاء استخدام النسخة ويتم اغلاق قاعدة البيانات واذا تم التلاعب بتاريخ الجهاز تخبره ايضاً بالتلاعب ويتم الاغلاق الفوري Private Sub Form_Open(Cancel As Integer) On Error Resume Next Dim db As DAO.Database Dim tbl As DAO.TableDef Dim fld As DAO.Field Dim rst As DAO.Recordset Dim beforelast As Date Dim beforelast2 As Date Set db = CurrentDb Set tbl = db.CreateTableDef("tbldate") Set fld = tbl.CreateField("dtmstart", dbDate) tbl.Fields.Append fld db.TableDefs.Append tbl Set rst = db.OpenRecordset("tbldate") rst.MoveFirst If DCount("dtmstart", "tbldate") > 1 Then Do Until rst.EOF beforelast = rst!dtmstart rst.MoveNext beforelast2 = rst!dtmstart If beforelast2 < beforelast Then MsgBox "تم التلاعب بتاريخ الجهاز", vbOKOnly, "Officena" rst.Close db.Close DoCmd.Quit Exit Do End If Loop End If rst.MoveLast beforelast = rst!dtmstart rst.AddNew rst!dtmstart = date rst.Update rst.Close db.Close If date > DLookup("dtmstart", "tbldate") + 30 Then 'هنا عدد ايام النسخة 30يوم يمكنك بالطبع تغييرها لعدد الأيام التي تريدها MsgBox "انتهت مدة استخدام النسخة التجريبية", vbOKOnly, "Officena" DoCmd.Quit ElseIf date < DLookup("dtmstart", "tbldate") Or _ DLast("dtmstart", "tbldate") < beforelast Then MsgBox "تم التلاعب بتاريخ الجهاز", vbOKOnly, "Officena" DoCmd.Quit End If End Sub -
ماهي افضل وأسهل الخطوات لوضع البرنامج على شبكة ؟
امير عاطف replied to officenamember's topic in قسم الأكسيس Access
يكون هناك سهوله في عملية النسخ حيث تقوم بنسخ البيانات Data اي الجداول فقط ولا تقوم بنسخ النماذج والتقارير والاستعلامات والوحدات النمطية بحيث تكون نسخة ال BackUp ليست كبيرة حيث تحتوي على البيانات فقط ومن الأشياء المهمه جداً والتي تحققه هذه الفائدة وهو سرعة التعامل لكل المستخدمين على الشبكة بحيث اذا وضعنا كامل ملف قاعدة البيانات على جهاز وليكن الجهاز الخادم مثلاً وهنا10 عشر مستخدمين يعملوا على استخدام هذه القاعدة فانه عند فتح كل مستخدم لنموذج مثلاً فإن كل مستخدم يأخذ من الجهاز الخادم النموذج بعناصر التحكم التي يحتويها بالوحدات النمطية التي يحتويها ايضاً ... ولك ان تتخيل كل مستخدم يستهلك من الشبكة هذا الجزء فبتأكيد سيحدث بطء في استخدام قاعدة البيانات لدى المستخدمين !!! والله يكون في عون اسلاك الشبكة التيي تتحمل كل هذا :crash: ولكن عند فصل الجداول فقط على الجهاز الخادم .. فإنه عند فتح جميع المستخدمين للنماذج التي لديهم فإنهم لا يأخذو من الجهاز الخادم الاّ البيانات Data فقط اي يتم مرور البيانات فقط بأسلاك الشبكة ويكون هناك سرعة وراحة للمستخدين وللشبكة:d -
كيف اقوم باجبار البرنامج على عملية حذف او تحديث
امير عاطف replied to امير عاطف's topic in قسم الأكسيس Access
الاخ الكريم : يمكنك تنفيذ استعلام الحذف او استعلام التحديث او اي استعلام اجرائي من خلال الكود بحيث اذا تحقق الشرط يتم تنفيذ الكود (الذي قوم بنفس عمل الاستعلام) واذا لم يتحقق لا يتم التنفيذ -
كيف اقوم باجبار البرنامج على عملية حذف او تحديث
امير عاطف replied to امير عاطف's topic in قسم الأكسيس Access
راجع هنــــــــــا و هنــــــا ايضــــاً -
السؤال للأخ Rudwan وهو : السادة الأفاضل الكرام لدي سؤال حول ربط الجداول بعضها ببعض . هل توجد في الأكسس طريقة أو كود معين أو مثل ما يسمى في الأوراكل Triger بحيث أجبر البرنامج أن يقوم بعملية معينة مثل تحديث أو حذف بيانات من جدول الى جدول آخر ؟ و لذلك لأنه عندي برنامج و فيه جدولين , بيانات أحدهما أريدها أن تنتقل أتوماتيكيا الى الجدول الآخر فو الانتهاء من كتابة بيانات السطر , و تتحدث مباشرة الى الجدول الثاني . و في حال تم حذف أو تعديل تلك البيانات سواء من الجدول أو الاستعلام أو النموذج يجب أن يتم التعديل تلقائيا في الجدول الثاني المرتبط به . أرجو افادتي أدامكم الله
-
Private Sub Workbook_Open() 'هذا السطر لإخفاء شاشة الاكسيل Application.Visible = False 'هنا تضع الأوامر الذي تريد تشغيلها سواء ماكروات أو اي شيء Dim PauseTime, Start PauseTime = 660 'هذا السطر لكي ينتظر احدى عشر دقيقة قبل الاغلاق Start = Timer Do While Timer < Start + PauseTime DoEvents Loop 'هذا السطر لاغلاق ملف الاكسيل مع الحفظ Workbooks("FileName.XLS").Close SaveChanges:=True End Sub
-
؟؟؟؟؟ لو سمحت قم بتوضيح اكثر
-
حل اخر : قم بعمل تقرير Report مبني على هذا الاستعلام Query وقم بوضع مربع نص Text Box بجانب الحقول بالتقرير وضع القيمة =1 بعد ذلك اذهب الى خصائص مربع النصText Boxوقم بتغيير الخاصية مجموع تراكمي (Runing Sum) الى شامل (Over All)
-
عمل نسخة محددة العرض من البرنامج - تجريبية Demo
امير عاطف replied to أبو وليد's topic in قسم الأكسيس Access
اتذكر ان هناك فكرة اعجبتى بخصوص هذا الصدد للأخ محمد طاهر وهو عن طريق تحديد السجلات بإستخدام الدالة Dcount .... يعني تضع شرط مثلاً اذا زاد عدد سجلات جدول معين عن عشر سجلات تظهر رسالة تخبر العميل بانتهاء استخدام نسخة البرنامج وها هو مثال لذلك: If DCount("number", "TableName") > 10 Then MsgBox "انتهت مدة استخدام النسخة التجريبية", vbOKOnly + vbInformation, "Officena" DoCmd.Quit -
تطبيق في التصميم القياسي للجداول بقاعدة البيانات
امير عاطف replied to المالكي's topic in قسم الأكسيس Access
بالنسبه لــ الجدول 2 لا يوجد داعي لتسجيل بيانات العميل به فذلك يعتبر تكرار للمعلومات واهدار للقاعدة من الأفضل يكفي تسجيل كود العميل فقط لجدول 2 ولا داعي لتسجيل بقية بيانات العميل... بعد ذلك قم بعمل استعلام وضع به الجدول 2 و الجدول 1 بحيث انه بالطبع يوجد علاقة بين الجدولين (واحد الى متعدد) وتقوم بتجميع كل البيانات الذي تريدها بخصوص العملاء في هذا الاستعلام وبعد ذلك قم بعمل استعلام اخر تضع به نتيجة الاستعلام السابق مع الجدول 3 ويكون الربط بينهم عن طريق حقل (رقم بطاقة الخدمة) ومن هذا الاستعلام تجد كل كما تريد وكل ما يخص كل عميل سواء من بيانات أو من طلبات وفي نفس الوقت قمت باستخدام الاسلوب العلمي في التصميم وقمت بالتوفير في الوقت والجهد الناتج عن تكركار ادخال بيانات العملاء راجع هذا الرابط لما به من فائدة كبيرة اضغط هنـــــــــــــا -
حساب مجموع آخر عشر سجلات أو اي عدد حسب الطلب
امير عاطف replied to أبو وليد's topic in قسم الأكسيس Access
تظهر هذه الرسالة لأنه من المنطق لا يجب ان يكون عدد السجلات التي بالنموذج اقل من الرقم الذي قمت بكتابته ويجب عليك ادخال رقم اقل من او يساوي السجلات التي بالنموذج و ها هو مثال لذلك مع المرفقات SumtionLastRec.zip -
حساب مجموع آخر عشر سجلات أو اي عدد حسب الطلب
امير عاطف replied to أبو وليد's topic in قسم الأكسيس Access
ضع هذا الكود عند حدث النقر لزر الأمر الذي تريد ..... If bnumber > Me.RecordsetClone.RecordCount Then MsgBox "عفواً .. عدد السجلات المحددة اكبر من عدد سجلات النموذج", vbOKOnly, "فريق أوفيسنا" Exit Sub ElseIf IsNull(bnumber) Then MsgBox "عفواً .. يجب كتابة السجلات المراد حساب مجموعها أولاً", vbOKOnly, "فريق أوفيسنا" Else On Error Resume Next Dim db As DAO.Database Dim rst As DAO.Recordset Set db = CurrentDb Set rst = Me.RecordsetClone rst.MoveFirst rst.Move Me.RecordsetClone.RecordCount - bnumber Dim LngNumber As Long LngNumber = rst!number Do Until rst.EOF rst.MoveNext LngNumber = rst!number + LngNumber Loop FinalValue = LngNumber rst.Close db.Close End If حيث عندما تضغط على زر الأمر الذي به هذا الكود يتم كتابة مجموع اخر عشر سجلات للحقل المسمى number في النموذج في مربع النص المسمى FinalValue وهناك ايضاً مرونه في ذلك حيث يمكنك حساب مجموع آخر أي عدد من السجلات وليس آخر عشر سجلات فقط وذلك بمجرد كتابة عدد السجلات الذي تريد حساب مجموعها في مربع النص المسمى bnumber ... فمثلاً لو قمت بكتابة الرقم 8 داخل مربع النص bnumber ثم قمت بالضغط على زر الأمر الذي به الكود السابق فيتم حساب مجموع اخر ثمان سجلات للحقل المسمى number بالنموذج ويتم وضع الناتج بمربع النص المسمى FinalValue -
امامك ثلاث حلول: الحل الأول: ان تستخدم الدالة Dcount عن طريق وضع هذا الكود عند حدث قبل التحديث لنموذج ادخال البيانات If DCount("number", "TableName", "number = forms!FormName!number") > 1 Then MsgBox "الرقم مكرر" Cancel = True End If مع افتراض ان ان نموذج ادخال البيانات اسمة FormName والجدول الذي به البيانات TableName وحقل الرقم اسمه number الحل الثاني: وهو ان تستخدم كائنات الوصول للبيانات DAO عن طريق وضع هذا الكود قبل التحديث لنموذج ادخال البيانات Dim db As DAO.Database Dim rst As DAO.Recordset Set db = CurrentDb Set rst = Me.RecordsetClone rst.MoveFirst Do Until rst.EOF If rst!number = Me.number Then MsgBox "الرقم مكرر" Cancel = True Exit Do End If rst.MoveNext Loop rst.Close db.Close الحل الثالث: وهو عن طريق ايقاف رسالة الخطأ التي تظهر في حالة المفتاح الأساسي وتظهر الرسالة الذي تريدها انت بوضع الكود التالي عن حدث الخطأ On Error للنموذج Private Sub Form_Error(DataErr As Integer, Response As Integer) Dim DATAERRCONTINUE Select Case DataErr Case Is = 3022 MsgBox "الرقم مكرر" Response = DATAERRCONTINUE End Select End Sub مع خالص التحية
-
اهلاً أسمى : ضعي هذا الكود عند حدث زر الأمر الذي تريدين عند الضغط عليه يتم الاختيار عشوائياً من بين الارقام Dim MyRondomValue As Long Dim a As Long Dim b As Long Let a = Me.Range("b20").Value Let b = Me.Range("b2").Value MyRondomValue = Int((a * Rnd) + b) MsgBox "الرقم هو" & " " & MyRondomValue, vbOKOnly, "فريق أوفيسنا" مع ملاحظة تغيير نطاق الخلايا التي تريدين الانتقاء من بينها في الكود ... ولتغيير نطاق الخلايا التي تريدي الاختيار من بينها عشوائياً ما عليك الاً تغيير عنوان الخلية بالكود مرفق مثال للترى النتيجه بنفسك Rondom_Choise.zip
-
كيف يمكن تصميم قائمة مختصرة Shortcut Menu
امير عاطف replied to hassaan100's topic in قسم الأكسيس Access
الله ينور عليك اخ osama457 :) -
ما هو كود VBAواين يتم كتابته وما هي الوحدة النمطية
امير عاطف replied to ahmadhamada's topic in قسم الأكسيس Access
الاخ ahmadhamada : اولاً .. اهلاً ومرحباً بك بالنسبه لكود ال VBA يتم وضعه داخل الوحدات النمطيه والوحدة النمطيه عبارة عن وعاء يحتوي على كود VBA مثلما يحتوي النموذج على ادوات التحكم من ازرار ومربعات نص وغيرها ... وهناك اربع انواع من الوحدات النمطية : 1 - (النوع الأول) وحدات نمطيه للبرنامج نفسه Access module : ويتم انشائها بنفس طريقة انشاء كائنات اكسس المعتادة كالجداول والتقارير .. ولانشاء وحدة نمطيه جديده لكي تضع بها كود ما اتبع الخطوات التالية .... تأكد من ان نافذة قاعدة البيانات مفتوحة امامك --- من نافذة قاعدة البيانات انقر زر وحدات نمطية --- ثم انقر زر جديد New --- بعد ذلك تظهر لك نافذه جديد للوحدة النمطية التي قمت باعدادها 2 - (النوع الثاني) وحدات نمطية للنموذج Form Module : ونضع بها الكود اللازم للاستجابة لأحداث النموذج أو احداث عناصر التحكم المتواجدة داخل النموذج ... مثلاً ... مثل الكود الذي تضعه عندما يضغط المستخدم على زر امر فيتم فتح تقرير نتيجه لحدث الضغط على الزر ... ولفتح وحدة نمطيه خاصة بالنموذج اختر Code من قائمة View أو اضغط على الزر Code مباشرةً على شريط ادوات النموذج وفي كلتا الحالتين سوف يقوم اكسس بفتح الوحدة النمطيه الخاصة بالنموذج ويمكنك ايضاً فتح الوحدة النمطية الخاصة بنموذج معين عن طريق الضغط على الزر المجاور لأي حدث من احداث النموذج ثم الضغط على Code Builder من المربع الحواري Choose Builder 2 - (النوع الثالث) وحدات نمطية للتقرير Report Module : وتحتوي ايضاً على الكود اللازم لاستجابة احداث التقرير ويتم فتح الوحدة النمطيه الخاصة بالتقرير بنفس الطريقة المتبعة لفتح الوحدة النمطيه الخاصة بالنموذج 2 - (النوع الرابع) وحدات نمطية للتصنيف Class Module : وهي لا ترتبط بنموذج أو تقرير معين ومن خلالها يمكنك تعريف كائناتك الخاصة من البداية وتحديد خصائصها والاحداث التي تجري عليها (واهتمامك سيكون منصب على الانواع الثلاثة السابقة) اخي ahmadhamada هناك كلمة ترددت اكثر من مرة الان وهي عبارة (الحدث) أو (الأحداث) وماذا تعني هذه الكلمة ... الضغط على زر يعتبر حدث ... فتح النموذج ايضاً حدث ... اغلاق النموذج ايضاً حدث ... وهناك اداث اخرى عديدة يمكنك اكتشافها بنفسك ...... ونحن نضع الكود الذي نريد في الوحدة النمطيه الخاصة بحدث فتح زر معين على نموذج محدد على سبيل المثال ... نضع الكود الخاص بفتح تقرير معين عند حدث الضغط على زر محدد داخل نموذج محدد اتمنى ان تكون وصلت اليك الفكرة الأن -
محاذاة بيانات الحقول بالتقرير (الرأسية و الأفقية)
امير عاطف replied to بوحمدان2000's topic in قسم الأكسيس Access
الرابط لا يعمل اخي alhajri -
حذف السجلات الأولى اذاوصل عدد السجلات الى عدد محدد
امير عاطف replied to أبو وليد's topic in قسم الأكسيس Access
في حالة ان اسم الجدول tss5 والحقل الذي نريد الحذف على اساسه الشركة يكون الكود هكذا Public Function delfirstrec1() On Error Resume Next Dim db As DAO.Database Dim rst As DAO.Recordset Dim rsttransaction As DAO.Recordset Dim rst_temp As DAO.Recordset Dim tblofficena As DAO.TableDef Dim qryOfficena As DAO.QueryDef Dim fldtest As DAO.Field Set db = CurrentDb Set rst = db.OpenRecordset("tss5", dbOpenTable) rst.MoveFirst Do Until rst.EOF Set tblofficena = db.CreateTableDef("tbltest") Set fldtest = tblofficena.CreateField("city_temp", dbText) fldtest.Size = 50 tblofficena.Fields.Append fldtest db.TableDefs.Append tblofficena Set rst_temp = db.OpenRecordset("tbltest", dbOpenTable) rst_temp.AddNew rst_temp!city_temp = rst![الشركة] rst_temp.Update rst_temp.Close Set qryOfficena = db.CreateQueryDef("Officena", _ "SELECT [الشركة] FROM tss5 where [الشركة] = dlookup('[city_temp]','[tbltest]')") Set rsttransaction = db.OpenRecordset("Officena") Do Until DCount("[الشركة]", "[officena]") <= 20 rsttransaction.MoveFirst rsttransaction.Delete Loop rsttransaction.Close rst.MoveNext db.TableDefs.Delete ("tbltest") db.QueryDefs.Delete ("officena") Loop rst.Close db.Close MsgBox "تم الغاء السجلات اللازمة", vbOKOnly, "فريق اوفيسنا" End Function