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

البحث في الموقع

Showing results for tags 'درس'.

  • Search By Tags

    اكتب الكلمات المفتاحيه بينها علامه الفاصله
  • Search By Author

نوع المحتوي


الاقسام

  • الترحيب
    • نرحب بزوار الموقع
  • قسم تطبيقات و لغات مايكروسوفت
    • منتدى الاكسيل Excel
    • قسم الأكسيس Access
    • منتدي الوورد Word
    • منتدى الباوربوينت
    • منتدى الاوتلوك Outlook
    • المنتدى التقني العام و تطبيقات الأوفيس الأخرى
    • إعلانات شخصية للأعضاء
    • قنوات تعليمية وإعلانات دورات تدريبية
  • إدارة المشاريع والبحث العلمي وعلوم البيانات
    • إدارة المشاريع ومحافظ المشاريع
    • البحث العلمي والإحصاء
    • الذكاء الإصطناعي و التنقيب فى البيانات
  • القسم العام
    • قسم الاقتراحات و الملاحظات
    • مشاركات المدونات
    • أوفيسنا على الفيسبوك

الاقسام

  • VBA Code Library
  • قسم الإكسيل
  • قسم الأكسيس
  • قسم الوورد
  • Project Management
  • Self development التطويرالذاتي
  • معلومات مفيدة
  • أدوات عامة

مدونات

  • M-Taher's Blog
  • مدونة محمد طاهر
  • Officena
  • اا الفاروق اا
  • ‎مدونة أخبار التكنولوجيا
  • M-Taher's Blog
  • يحيى حسين's Blog
  • خبور خير's Blog
  • Dr. AbdelMalek Abu Sheikh's Blog
  • m.hindawi's Blog
  • احمدزمان's Blog
  • الحسامي
  • مدونة أ / محمد صالح
  • yahiaoui's Blog
  • عبدالله المجرب's Blog
  • صيد الخواطر
  • حمادة عمر مدونة
  • مدونة جعفر
  • مدونة عادل حنقي
  • مجدى يونس: لمسة وفاء لمنتدى اوفيسنا
  • Excel Expert Financial&Accounting
  • مدونة اعمال ايقونات الماس لمنتدى اوفيسنا
  • رقائق فى دقائق
  • Shivan Rekany

ابحث عن النتائج فى ......

ابحث عن النتائج التي تحوي ....


تاريخ الانشاء

  • بدايه

    End


اخر تحديث

  • بدايه

    End


Filter by number of...

انضم

  • بدايه

    End


مجموعه


Job Title


البلد


الإهتمامات


AIM


MSN


Website URL


ICQ


Yahoo


Jabber


Skype

تم العثور علي 21 نتائج

  1. السلام عليكم ورحمة الله وبركاته 🌹 درسنا اليوم عن طريقة عمل قوائم ديناميكية متحركة بأقل عدد من الأكواد وطريقة مبتكرة . 🙂 النتيجة النهائية : الشرح : تحميل الملف : Dynamic Menus.accdb
  2. السلام عليكم, في سنة 2017 قمت بكتابة كلاس بسيط لحماية برنامجي ولضمان برنامجي لا يعمل في غير كومبيوترات في حاله بيعه. مميزات الكلاس: 1- قفل قاعدة البيانات على ( رقم الهارد , البروسيسور , المذربورد , الماك أدريس ) 2- (استحاله) فك النماذج والتقارير في حال عدم تجاوزك لنموذج ( تسجيل الدخول ) ببساطة ستقول يمكنني العثور على باسورد القاعدة داخل الجدول ( الطريقة المعتادة لدينا جميعا في انشاء نموذج تسجيل دخول ). قبل كل شي ليكن لدينا مثلا جدول اسمة ( tbl_Login ) و نموذج اسمه ( frm_Login ) الجدول لتخزين اسم المستخدم وكلمة المرور والنموذج لعمل تسجيل الدخول عند ذهابنا للجدول ( tbl_Login ) ، سوف نحصل على باسورد مشفر من الجدول لو كان الباسورد مثلا ( 313 ) فإنك ستحصل على ( 701D6068 ) 2- عندما نقوم بتسجيل الدخول في النموذج سيقوم البرنامج بأخذ كلمة السر المدخلة ويقوم بتشفيرها ثم يقوم بمطابقتها مع الباسورد الموجود في الجدول اذا كان الباسورد المُدخل يطابق الجدول سيكتب قيمة معينة runtime ويقوم بازالة جميع القيود من النماذج والتقارير. اولا: كلاس الحماية Option Compare Database '----------------------------------------------------- ' Protection Module Coded By Hassanein Hirz Aldeen (SEMO.Pa3x) ' Date 26/11/2017 ' All rights reserved. copyright © 2017 '----------------------------------------------------- Public SEMO As String Function SEMO_GET() SEMO = SEMO SEMO_GET = SEMO End Function Function PR() As Boolean PR = False 'False=Disabled , True=Enabled End Function Function HWND_ID() HWND_ID = "3C3F4825" 'Your HWID End Function Function HWND_MSG() HWND_MSG = "...ليست لديك صلاحيات كافية لإستخدام هذا الاجراء" End Function Function KEY_ENDE() KEY_ENDE = "PA$X" End Function Function HWND_GET() Set root = GetObject("winmgmts:{impersonationlevel=impersonate}!\\.\root\cimv2") Set disks = root.execquery("select * from win32_logicaldisk") For Each disk In disks If disk.volumeserialnumber <> "" Then HWND_GET = disk.volumeserialnumber Exit For End If Next End Function Function HWND_PROTECTION() Set root = GetObject("winmgmts:{impersonationlevel=impersonate}!\\.\root\cimv2") Set disks = root.execquery("select * from win32_logicaldisk") For Each disk In disks If disk.volumeserialnumber <> "" Then HWND_PROTECTION = disk.volumeserialnumber Exit For End If Next If HWND_ID = HWND_PROTECTION Then HWND_PROTECTION = "True" Else HWND_PROTECTION = "False" End If End Function 'Code contained within module named mdlforencryptionanddecryption Public Function XORDecryption(CodeKey As String, DataIn As String) As String Dim arkdata1 As Long Dim strDataOut As String Dim intXOrValue1 As Integer Dim intXOrValue2 As Integer For arkdata1 = 1 To (Len(DataIn) / 2) 'The first value to be XOr-ed comes from the data to be encrypted intXOrValue1 = Val("&H" & (Mid(DataIn, (2 * arkdata1) - 1, 2))) 'The second value comes from the code key intXOrValue2 = Asc(Mid(CodeKey, ((arkdata1 Mod Len(CodeKey)) + 1), 1)) strDataOut = strDataOut + Chr(intXOrValue1 Xor intXOrValue2) Next arkdata1 XORDecryption = strDataOut End Function Public Function XOREncryption(CodeKey As String, DataIn As String) As String Dim arkdata1 As Long Dim strDataOut As String Dim temp As Integer Dim tempstring As String Dim intXOrValue1 As Integer Dim intXOrValue2 As Integer For arkdata1 = 1 To Len(DataIn) 'The first value to be XOr-ed comes from the data to be encrypted intXOrValue1 = Asc(Mid$(DataIn, arkdata1, 1)) 'The second value comes from the code key intXOrValue2 = Asc(Mid$(CodeKey, ((arkdata1 Mod Len(CodeKey)) + 1), 1)) temp = (intXOrValue1 Xor intXOrValue2) tempstring = Hex(temp) If Len(tempstring) = 1 Then tempstring = "0" & tempstring strDataOut = strDataOut + tempstring Next arkdata1 XOREncryption = strDataOut End Function الاستخدام لكل النماذج والتقارير اكتب في حدث Form_Load Option Compare Database Private Sub Form_Load() On Error Resume Next If HWND_PROTECTION = "False" Then MsgBox HWND_MSG, vbCritical, "عملية خاطئة" For i = 0 To Controls.Count - 1 Dim X As Control Set X = Me.Controls.Item(i) X.Visible = False Next DoCmd.Close DoCmd.CloseDatabase DoCmd.Quit End If If Protection.SEMO_GET = "SEMO" = False Then MsgBox HWND_MSG, vbCritical, "عملية خاطئة" For i = 0 To Controls.Count - 1 Dim XS As Control Set XS = Me.Controls.Item(i) XS.Visible = False Next DoCmd.Close DoCmd.CloseDatabase DoCmd.Quit End If End Sub الان عندما تريد اعطاء القاعدة لشخص ما قم باعطاءه اولا ملف الـ VBS هذا '----------------------------------------------------- ' ReCoded By Hassanein Hirz Aldeen (SEMO.Pa3x) ' Date 26/11/2017 ' All rights reserved. copyright © 2017 '----------------------------------------------------- ' Get clipboard text Set objHTML = CreateObject("htmlfile") Set Ws = CreateObject("WScript.Shell") Clipboardtext = objHTML.ParentWindow.ClipboardData.GetData("text") sText = HWND_GET 'Set Clipboard Ws.Run "mshta.exe ""javascript:clipboardData.setData('text','" & Replace(Replace(sText, "\", "\\"), "'", "\'") & "');close();""", 0, True MsgBox "Copied!" Function HWND_GET() Set root = GetObject("winmgmts:{impersonationlevel=impersonate}!\\.\root\cimv2") Set disks = root.execquery("select * from win32_logicaldisk") For Each disk In disks If disk.volumeserialnumber <> "" Then HWND_GET = disk.volumeserialnumber Exit For End If Next End Function وظيفة هذا الملف يقوم باستخراج ( رقم الهارد , البروسيسور , المذربورد , الماك أدريس ) ثم ينسخه بعدما يشغله سيقوم العميل باعطاءك هذا الرقم لكي تقوم انت بدورك بوضعه داخل الكلاس في المنطقة Function HWND_ID() HWND_ID = "Your HWID" End Function استبدل كلمة ( Your HWID ) بالرقم الذي سيعطيه لك العميل. ثم بعد ذلك قم بحفظ القاعدة بصيغة ( ACCDE ) واتحدا اي شخص يفتحها مرة اخرى: لكي تفتح النماذج والتقارير عليك بتخطي نموذج تسجيل الدخول ارفقت لكم قاعدة محمية وقاعدة بدون حماية مع ملف الـ VBS الذي يستخرج ارقام قطع الجهاز ويقوم بنسخها،، اتمنى لكم الفائدة جميعاً اهداء الموضوع الى مُعلمي الرائع @jjafferr حسنين Login_SEMO_Pa3x.rar
  3. بسم الله الرحمن الرحيم السلام عليكم ورحمة الله وبركاته 🙂 درسنا اليوم عبارة عن فكرة تجميلية لقاعدة البيانات وإظهار شاشة إنتظار عند الإنتقال بين النماذج.. فكرة لمعت وحبيت أوثقها قبل أن تطير بلا عودة 😅 متابعة ممتعة 🙂 حمل المثال من المرفقات .. Waiting Screen.accdb
  4. السلام عليكم ورحمة الله وبركاته درسنا اليوم يتكلم عن كيفية تحزيم برنامج الأكسس بعد أن تنتهي من تصميم برنامجك وتكون مستعدا لتحويله إلى ملف EXE وذلك ليسهل عليك تنصيبه في أجهزة الحاسوب سواءا لعملائك أو أجهزة العمل أو غيرها .. كل ما ستحتاجه لتطبيق درس اليوم هو : ملف الأكسس / وأيكونة برنامجك الخاص ( اختياري) / وصورة لشاشة البدء بصيغة BMB ( اختياري) / وبرنامج الوينرار WinRAR . فعلى بركة الله ..
  5. السلام عليكم ورحمة الله تعالى وبركاته طبعا لن اضع افكارى صريحة لتطبيق فكرة محددة لا أنوى أن اعطيكم سمكا بل انوى أن أعلمكم الصيد ... لذلك سوف اضع الاكواد والافكار على وجه العموم وعلى سبيل الشرح ليس الا وليدل كل منكم بدلوه فى التطبيق وليستحضر بنات افكاره كما يترأى له 1- الحماية عن طريق اضافة بيانات الحماية فى الريجسترى نستخدم الأكواد الاتية فى وحدة نمطيه التطبيق فى القاعدة المرفقة .. تم وضع بعض التلميحات على الأكواد Public Const MyRegPath As String = "HKEY_CURRENT_USER\Software\Officena.net" Public Const MyRegKey As String = "Judy" Public Const myStringValue As String = "محمد" Public Const myValueData As String = "ابو جودى" 'returns True if the registry key i_RegKey was found 'and False if not Function RegKeyExists(i_RegKey As String) As Boolean Dim myWS As Object On Error GoTo ErrorHandler 'access Windows scripting Set myWS = CreateObject("WScript.Shell") 'try to read the registry key myWS.RegRead i_RegKey 'key was found RegKeyExists = True Exit Function ErrorHandler: 'key was not found RegKeyExists = False End Function Function RegKeyRead(i_RegKey As String) As String Dim myWS As Object On Error Resume Next 'access Windows scripting Set myWS = CreateObject("WScript.Shell") 'read key from registry RegKeyRead = myWS.RegRead(i_RegKey) End Function Function RegKeySave(i_RegKey As String, _ i_Value As String, _ Optional i_Type As String = "REG_SZ") Dim myWS As Object 'access Windows scripting Set myWS = CreateObject("WScript.Shell") 'write registry key myWS.RegWrite i_RegKey, i_Value, i_Type End Function Function RegKeyDelete(i_RegKey As String) As Boolean Dim myWS As Object On Error GoTo ErrorHandler 'access Windows scripting Set myWS = CreateObject("WScript.Shell") 'delete registry key myWS.RegDelete i_RegKey 'deletion was successful RegKeyDelete = True Exit Function ErrorHandler: 'deletion wasn't successful RegKeyDelete = False End Function يتبع.. القاعدة المرفقة 01-Dealing with the registry.accdb
  6. :: بسم الله الرحمن الرحيم :: ** السلام عليكم ورحمة الله وبركاته ** .. أما قبل .. فالصورة التالية تحكي لكم الفكرة باختصار : .. أما بعد : .. فإليكم الطريقة كما هداني إليها رب العالمين 🙂 : أولا :: تقوم بتصميم جدولك وإضافة حقول نعم/لا بالطريقة العادية ثانيا :: تصمم استعلام يكون مصدره جميع حقول جدولنا الجميل 🙂 ثالثا :: تضيف حقول جديدة في الاستعلام ( حقل مقابل كل حقل من نوع (نعم/لا) في الجدول ) نسميه بنفس اسم العقل مع إضافة رقم2 لتفنيده عن الحقل الأصلي وتضيف له هذه الدالة : .. NewFeildName: IIf([TrueOrFalseFeild]=-1;ChrW(10004);ChrW(10008)) وتقوم بتغيير اسم الحقل لكل واحد من حقول الجدول ملاحظة : ChrW(10004) تعطيك الرمز ✔ و ChrW(10008) تعطيك الرمز ✘ لتكون التيجة النهائية هكذا : وعند حفظ الاستعلام وعرضه يظهر لنا هكذا : رابعا :: تقوم بإنشاء نموذج جديد مبني على الاستعلام الظريف وتنسقه بالطريقة التي تحبها .. وتنتبه أنك ستدرج الحقول الجديدة التي أنشأناها في الاستعلام بدلا عن الحقول الأصلية .. ستكون الحقول البديلة عبارة عن حقول نصية عادية غير قابلة للتعديل ( لأنها حقول محسوبة ) .. لذلك سيسهل عليك تنسيقها باللون والشكل الذي تحبه تماما كما تنسق أي حقل نصي آخر 🙂 خامسا :: فقط بقي علينا أن نظيف أمر تغيير قيمة حقول (نعم/لا) الأصلية عند النقر على الحقول البديلة .. ولعمل ذلك نضع الأمر (الكود) البسيط التالي في حدث عند النقر على لكل خانة ( IsActive كمثال ) : Private Sub IsActive2_Click() IsActive = Not IsActive x.SetFocus End Sub وتكرر نفس العملية لكل واحد مع تغيير أسماء الحقول .. لاحظ أنني أضفت هذي للكود ( x.SetFocus ) في النهاية ، وهي باختصار حركة تجميلية .. حيث قمت بإضافة مربع نص (غير منظم) للنموذج وسميته x وجعلت لونه ولون حدوده نفس لون خلفية النموذج ، وجعلت حجمه صغيييييييييييييييير جدا 🙂 يعني الطول x العرض بمقدار = 0.01 تقريبا ..( الهدف أنه ما يظهر للمستخدم) وبعدها خليت الأمر ينقل التركيز لهذا المربع الصغير .. فكانت النتيجة كما شاهدتم سيداتي وسادتي 😊 ونكون بذلك قد انتهينا من عمل مربعات صح أو خطأ كبيرة وجميلة وتنفتح لها النفس 😉👌 وبعدها ينفتح لكم باب الخيال الواسع للإبداع والزيادة كما تشتهي أنفسكم وتلذ أعينكم 😊 ولا تنسونا من صالح دعواتكم وزكواتكم وهداياكم 😅 :: وختامها رابط المثال للتحميل (مجاناً) 😁 :: صح أو خطأ.accdb
  7. السلام عليكم ورحمة والله تعالى وبركاته طيب ببساطه انظر للسلسلة النصية الاتية "Moh8202281012343434" ونريد التعديل عليها لتظهر بهذا الشكل "Moh-820-228-101-234-343-4" او بهذا الشكل "Moh,820,228,101,234,343,4" او بهذا الشكل Moh820/228101/234343/4 يتم عمل ذلك من خلال الكود الاتى Function ReFormat(ByVal strText As String, Optional strSymbol As String = "-", Optional intCountDigits As Integer = 3) Dim i As Long ReFormat = "" For i = 0 To Len(strText) - 1 Step intCountDigits If i = 0 Then ReFormat = Mid(strText, i + 1, intCountDigits) Else ReFormat = ReFormat & strSymbol & Mid(strText, i + 1, intCountDigits) End If Next i End Function syntax code ReFormat(string ,Symbol, Count Digits) Result By default syntax used ReFormat(string) Symbol >-->> - Count Digits >-->> 3 اذا من خلال استدعاء الكود عن طريق البنية المفضلة الاتية: ReFormat(string) تحصل على اضافة العلامة - بعد كل 3 مواضع فى السلسلة النصية اما اذا اردت التعديل فى شكل الرمز وعدد المواضع يمكنك استخدام الكود الاتى : ReFormat(string ,Symbol, Count Digits) مثلا لو اردت استخدام الرمز $ بدلا من الرمز - وتريد وضع الرمز فى السلسلة النصية بعد كل خمس مواضع يكون الكود كالأتى: ReFormat(string ,"$", 5)
  8. السلام عليكم ورحمة الله وبركاته درسنا اليوم عبارة عن فكرة فريدة وهي أن تجعل الأكسس يقرأ أي عبارة تريدها ، هذه الميزة تعمل مع النصوص الإنجليزية، وللأسف لا تعمل على النصوص العربية، ولعل هناك طريقة أخرى لا أعلمها فليفدنا من له علم بذلك 🙂 ولا تنسوني من صالح دعواتكم .. ونصائحكم وتوجيهاتكم .. 🙂 ومع ملف الشرح للتطبيق : الأكسس يتكلم.accdb
  9. السلام عليكم إخواني الأعزاء .. ومع الدرس الثاني من سلسلة مهارات في أكسس .. صندوق قائمة لتعديل البيانات List Box آرائكم وتوجيهاتكم هي خير ما تتفضلون به علي .. متمنيا لكم دوام التوفيق .. مشاهدة ممتعة أتمناها لكم .. ‏‏ListBox - Lesson.accdb
  10. السلام عليكم ورحمة الله وبركاته،... كثيراً مانحتاج في برامجنا الى ( اسم مُدخل البيانات ) أي الذي قام بكتابة الفاتورة او تعديل أمر ما او طباعة ...الخ نريد أن نعرف من الشخص الذي قام بهذه العملية خصوصاً اذا كانت قاعدة البيانات قد تم ربطها بشكل شبكة ( سلسلة كومبيوترات متصلة بقاعدة البيانات ) كنا نستعمل الطريقة التقليدية أولا: بإنشاء جدول لتسجيل اسم المستخدم الحالي الذي يستخدم قاعدة البيانات في حال مروره بنموذج تسجيل الدخول ثانيا: نقوم بتخزينه في متغير Veriable من نوع String مثلاً وعند المرور بنموذج تسجيل الدخول يتم اسناد القيمة للمتغير في حال كان اليوزر والباسورد صحيحين Public CurrentUserName As String الكلام في الطريقتين صحيح، لكن في الطريقة الأولى سيبقى محتفظاً في اسم المستخدم حتى في حالة إغلاق الأكسس أجبارياً اما الطريقة الثانية فأن هذا المتغير سيفقد القيمة التي قمنا بتخزينها به عند ظهور أول رسالة خطأ من الأكسس جراء تطبيق أمر ما او أي عملية If قمت بكتابتها، بمجرد ظهور رسالة الخطأ ستختفي القيمة من المتغير CurrentUserName ونُصبح في مهب الريح ، حسناً لذلك سنقوم بإستخدام ( TempVars ) دعنا نسميها المخزن، نقوم بخزن اي قيمة بداخلها وتكون بهيئة ( Global Veriables ) يمكن استدعائها من أي مكان وسيتم تصفيرها بعد أغلاق الأكسس أجبارياً او إختيارياً ولن تمحى القيمة بعد ظهور رسالة خطأ كما أوضحت سابقاً. أضافة قيمة: TempVars.Add "CurrentUserName", "semo" إحضار القيمة: MsgBox TempVars("CurrentUserName") يمكنك إسناد الكثير من القيم لـ TempVars والإستفادة منها. لتفاصيل أكثر يمكنكم قراءة المقال من شركة مايكروسوفت: https://docs.microsoft.com/en-us/office/vba/api/access.tempvars.add أي سؤال أنا موجود، تحياتي لكم .
  11. السلام عليكم ورحمة الله وبركاته، كيف حالكم اخواني الأفاضل. مبارك عليكم حلول شهر رمضان المبارك أعاده الله علينا وعليكم باليمن والخير والبركات. اقدم لكم فنكشن لإحتساب المدة بين تاريخين سنة - شهر - اسبوع - ساعة - دقيقة - ثانية سؤال: ما الفائدة من هذا الفنكشن؟ بالدرجة الأولى سيُفيد أصحاب برامج الأقساط والتقسيط لإحتساب فترات التأخير والإستحقاق وغيرها. وربما هنالك استخدامات أخرى له، حسب احتياج كل شخص الفنكشن: Public Function MainElapsedTime(d1, d2) As String d1 = CDate(d1) d2 = CDate(d2) vSecs = DateDiff("s", [d1], [d2]) MainElapsedTime = ElapsedTimeAsTextRecur(vSecs) End Function Public Function ElapsedTimeAsTextRecur(ByVal pvSecs, Optional ByVal pvSecBlock) 'recursive time lapse given seconds Dim vTxt Dim iNum As Long Const kDAY = 86400 Const kSECpYR = 31536000 '60 sec = 1 min = 60 sec '60 min = 1 hour = 3,600 sec '24 hour = 1 day = 86,400 sec '07 days = 1 week = 604,800 sec '30 days = 1 month = 25,92,000 sec '12 months = 1 year = 31,536,000 sec 'YEARS If IsMissing(pvSecBlock) Then pvSecBlock = kSECpYR iNum = pvSecs \ pvSecBlock Select Case pvSecBlock Case kSECpYR 'yr sUnit = "years" If iNum > 0 Then vTxt = iNum & " Years " pvSecs = pvSecs - (iNum * pvSecBlock) End If vTxt = vTxt & ElapsedTimeAsTextRecur(pvSecs, 2592000) Case 2592000 'MO sUnit = "months" If iNum > 0 Then If iNum > 11 Then iNum = 11 vTxt = vTxt & iNum & " Months " pvSecs = pvSecs - (iNum * pvSecBlock) End If vTxt = vTxt & ElapsedTimeAsTextRecur(pvSecs, 604800) Case 604800 'WEEK sUnit = "weeks" If iNum > 0 Then If iNum > 3 Then iNum = 3 vTxt = vTxt & iNum & " Weeks " pvSecs = pvSecs - (iNum * kDAY * 7) End If vTxt = vTxt & ElapsedTimeAsTextRecur(pvSecs, 86400) Case kDAY 'day sUnit = "days" If iNum > 0 Then vTxt = vTxt & iNum & " Days " pvSecs = pvSecs - (iNum * kDAY) End If vTxt = vTxt & ElapsedTimeAsTextRecur(pvSecs, 3600) Case 3600 'hrs sUnit = "hrs" If iNum > 23 Then iNum = 23 If iNum > 0 Then vTxt = vTxt & iNum & " Hours " pvSecs = pvSecs - (iNum * pvSecBlock) End If vTxt = vTxt & ElapsedTimeAsTextRecur(pvSecs, 60) Case 60 'min sUnit = "mins" If iNum > 0 Then vTxt = vTxt & iNum & " Minutes " pvSecs = pvSecs - (iNum * pvSecBlock) End If vTxt = vTxt & ElapsedTimeAsTextRecur(pvSecs, 1) Case Else sUnit = "secs" If pvSecs > 0 Then vTxt = vTxt & pvSecs & " Seconds" End Select ElapsedTimeAsTextRecur = vTxt End Function الإستخدام بسيط جدا في الإستعلامات او في النماذج او التقارير كالآتي: MainElapsedTime("Here your date", Date()) --------------------------------------------------- Example: MsgBox MainElapsedTime("6/3/2020", "14/4/2021") النتيجة: هنا انا قمت بمقارنة تاريخين فقط بدون أوقات، سأقوم الآن بمقارنة تاريخ مع وقت MsgBox MainElapsedTime("2/02/2019 12:07:16 pm", "13/04/2021 1:08:6 am") النتيجة: للأمانة الكود ليس من كتابتي 100%، فقط انا قمت بالتعديل عليه ليصبح بشكل افضل.. تحياتي وانتضرو مفاجئتي في الموضوع القادم
  12. بسم الله الرحمن الرحيم السلام عليكم ورحمة الله وبركاته في هذا الدرس سأقدم نظرة عامة، ومُقدمة على التعابير القياسية Regular Expression وذلك لأهميتها الكبيرة في البرمجة. ملاحظة: لن اتطرق لكيفية كتابة الـ patterns نضرة لصعوبته على البعض لانه يحتاج اساسيات ومقدمات. في هذا الدرس سوف أستخدم بإذن الله لغة VBA في عمل اختبارات على الـ Regular Expression تعريف Regular Expression: هو كائن يصف نمطًا من المحارف ( أو الكلمات ). تعريف أعمق للتعابير القياسية: هي سلسلة من الأحرف التي تحدد نمطًا للبحث داخل النصوص (String) أو للمطابقة بين سلاسل من الأحرف. الهدف من التعاببير القياسية هو تسهيل عمليات البحث والاستبدال داخل النصوص، وتستخدم غالبًا في عمليات التحقق (Validation) وعمليات البحث (Searching) وايضًا في الحماية. ولتوضيح الفكرة بشكل أفضل بإمكاننا وضع مثال بسيط واقتراح الحلول له ثم بعد ذلك تبسيط الحل باستخدام التعابيير القياسية والتي سنرمز لها لاحقًا بـ RegExp. لنفرض أننا سنقوم ببرمجة نموذج تسجيل وستكون المدخلات المطلوبة ( اسم المستخدم - Username & البريد الإلكتروني - Email ) ونريد أن نتأكد من التالي: اسم المستخدم يجب أن يكون خليط من حروف وأرقام ، والرموز التالية فقط (_-.). البريد الإلكتروني يجب أن يكون بالشكل التالي : email_name@domain_name.top-level-domain مثال: cielblog@hotmail.com. وسيكون شكل نموذج التسجيل كالأتي: الحلول المقترحة كثيرة، مثلًا لكي نتأكد أن إسم المستخدم خالٍ من المسافات والرموز نحتاج لعمل تصفية (Filter) له، والتأكد اولًا من وجود مسافات واستبدالها مثلًا بالرمز _ او ازالتها كليًا، بعد ذلك تنقيح الاسم من الرموز الممنوعة ... عملية طويلة 🤔 اما البريد الإلكتروني يجب ان نتأكد اولًا من خلوه من المسافات ايضًا، والرموز الممنوعة في اغلب مشغلات البريد الإلكتروني، بعد ذلك التحرك قليلًا للتأكد أنّ ماقبل علامة @ هو String ومابعده String ثم التحقق أن ماقبل علامة النقطة - dot - هو String ومابعده هو top-level-domain ... عملية أطول 🤔 في التعابيير القياسية يمكننا اختصار كل هذه العمليات بسطر واحد أو نصف سطر حتى، وفي درسنا هذا سنتعلم كيف نحل مشكلتنا هذه ان شاء الله. أولاً: انسخ الفنكشن الآتي.. ' ----------------------------------------------------------------------' ' Return True if the given string value matches the given Regex pattern ' ' ----------------------------------------------------------------------' Public Function RegexMatch(value As Variant, pattern As String) As Boolean If IsNull(value) Then Exit Function ' Using a static, we avoid re-creating the same regex object for every call ' Static regex As Object ' Initialise the Regex object ' If regex Is Nothing Then Set regex = CreateObject("vbscript.regexp") With regex .Global = True .IgnoreCase = True .MultiLine = True End With End If ' Update the regex pattern if it has changed since last time we were called ' If regex.pattern <> pattern Then regex.pattern = pattern ' Test the value against the pattern ' RegexMatch = regex.test(value) End Function لاحظو الفنكشن يتكون من براميترات 2 الأول القيمة المراد اجراء التحقق عليها والبراميتر الثاني هو معيار التحقق ولو اردت ان اكتب تحقق لإسم المستخدم، سأكتب: If RegexMatch("semo", "^[\w_-]+$") = True Then MsgBox "Correct username", vbInformation, "CORRECT" Else MsgBox "Wrong username", vbCritical, "ERROR!" End If لو اردت ان اكتب تحقق للبريد الإلكتروني سأكتب: If RegexMatch("test@gmail.com", "[A-Za-z0-9_\-.]+@[A-Za-z0-9_\-.]+\.(com|org|net)") = True Then MsgBox "Correct email", vbInformation, "CORRECT" Else MsgBox "Wrong email", vbCritical, "ERROR!" End If للفائدة، google ممتلئ بالـ patterns ماعليك فقط ان تبحث قليلاً وستجد الباترن المطلوب ☺️ بالتوفيق للجميع.
  13. السلام عليكم ورحمة الله وبركاته.. في الوضع الطبيعي الاكسس يعطينا فقط مجموعة الوان عند تنسيقها في الكود Constant Value Description vbBlack 0x0 Black vbRed 0xFF Red vbGreen 0xFF00 Green vbYellow 0xFFFF Yellow vbBlue 0xFF0000 Blue vbMagenta 0xFF00FF Magenta vbCyan 0xFFFF00 Cyan vbWhite 0xFFFFFF White ولكن كثيراً ما نريد ان نقوم بإختيار الواناً غير التي موجودة في الاعلى مثلا اللون الفسفسوري غير موجود في القائمة. قمنا باخذ قيمة اللون الفسفوري من احد برامج تعديل الصور وليكن مثلا الفوتوشوب لكن احيانا تواجهنا مشاكل ورسائل مزعجة من الاكسس عند وضع الالوان عن طريق VBA مثلا انا دائما ماكانت تصادفني رسالة مزعجة Expected Array عندما اقوم بوضع اللون بالصورة الاتية: txt_name.BackColor = RGB(20,30,60) تظهرلي هذه الرسالة: فكرت في تحويل اللون من HEX الى OLE ، وقد تم تغيير اللون بنجاح وبدون اي رسائل خطأ Public Function HEX2OLE(ByVal hexValue As String) As Long Dim R, G, B As Long If Left(hexValue, 1) = "#" Then hexValue = Replace(hexValue, "#", "") R = CByte("&H" & Left(hexValue, 2)) G = CByte("&H" & Mid(hexValue, 3, 2)) B = CByte("&H" & Mid(hexValue, 5, 2)) HEX2OLE = CLng(R + (G * 256) + (B * 65536)) End Function بالتوفيق للجميع. HEX_2_OLE.accdb
  14. السلام عليكم.. موديول لـ InputBox لجعل الكتابة تظهر على شكل نجوم لمساعدتك في حماية كلمات السر او ماشابه. '---------------------------------- 'API CONSTANTS FOR PRIVATE INPUTBOX '---------------------------------- 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 '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 Private hHook As Long '---------------------------------- 'PRIVATE PASSWORDS FOR INPUTBOX '---------------------------------- '//////////////////////////////////////////////////////////////////// 'Password masked inputbox 'Allows you to hide characters entered in a VBA Inputbox. ' 'Code written by Daniel Klann 'March 2003 '//////////////////////////////////////////////////////////////////// Public Function NewProc(ByVal lngCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Dim RetVal Dim strClassName As String, lngBuffer As Long If lngCode < HC_ACTION Then NewProc = CallNextHookEx(hHook, lngCode, wParam, lParam) Exit Function End If strClassName = String$(256, " ") lngBuffer = 255 If lngCode = HCBT_ACTIVATE Then 'A window has been activated RetVal = GetClassName(wParam, strClassName, lngBuffer) If Left$(strClassName, RetVal) = "#32770" Then 'Class name of the Inputbox 'This changes the edit control so that it display the password character *. 'You can change the Asc("*") as you please. SendDlgItemMessage wParam, &H1324, EM_SETPASSWORDCHAR, Asc("*"), &H0 End If End If 'This line will ensure that any other hooks that may be in place are 'called correctly. CallNextHookEx hHook, lngCode, wParam, lParam End Function Function InputBoxDK(Prompt, Title) As String Dim lngModHwnd As Long, lngThreadID As Long lngThreadID = GetCurrentThreadId lngModHwnd = GetModuleHandle(vbNullString) hHook = SetWindowsHookEx(WH_CBT, AddressOf NewProc, lngModHwnd, lngThreadID) InputBoxDK = InputBox(Prompt, Title) UnhookWindowsHookEx hHook End Function الاستدعاء بهذا الشكل: Call: InputBoxDK("Enter your Password.", "Password Required") الحقوق لاصحابها بالتوفيق للجميع حسنين
  15. السلام عليكم, هذا جدول يوضح لكم تنسيقات الارقام في الاكسس كالعملة وغيرها. ارجو ان يفيدكم. انواع التنسيقات "5" التنسيق لعدد موجب "-5" التنسيق لعدد سالب "0.5" التنسيق لعدد عشري "0" التنسيق الخاص بالصفر Zero-length string ("") 5 -5 0.5 0 0 5 -5 1 0 0.00 5.00 -5.00 0.50 0.00 #,##0 5 -5 1 0 $#,##0;($#,##0) $5 ($5) $1 $0 $#,##0.00;($#,##0.00) $5.00 ($5.00) $0.50 $0.00 0% 500% -500% 50% 0% 0.00% 500.00% -500.00% 50.00% 0.00% 0.00E+00 5.00E+00 -5.00E+00 5.00E-01 0.00E+00 0.00E-00 5.00E00 -5.00E00 5.00E-01 0.00E00 "$#,##0;;\Z\e\r\o" $5 $-5 $1 Zero بالتوفيق للجميع
  16. السلام عليكم ورحمة الله وبركاته. كنت قد طرحت سابقا موضوع لتشغيل ملفات الصوت في الاكسس وكان الموضوع يتناول تشغيل الملفات التي تكون بصيغة WAV حصرا رابط الموضوع: درس اليوم هو حول تشغيل ملفات الصوت بصيغة MP3 في الاكسس. الدوال المستخدمة: mciSendStringA GetShortPathNameA بعض الحقوق لأصحابها اتمنى منكم الدعاء لي ولوالدي. حسنين Mp3Sounds_SEMO_Pa3x.accdb
  17. السلام عليكم, في السابق كنت استخدم خطوط معينة في برامجي وعند اعطاء البرنامج للعميل لاتظهر الخطوط التي قمت باستخدامها بل يظهر بمكانها الخط ( Arial ) وهذه مُشكلة. كت في وقتها الجأ الى ان اضع الخط بجانب قاعدة البيانات وفي داخل قاعدة البيانات اقوم بعمل تحقق لمجلد Fonts والبحث عن الخط في بداية تشغيل القاعدة, فإن لم يجده يعي رسالة للعميل بان الط مفقود وعليه ان يقوم بتثبيته من جانب البرنامج. بحثت طويلاً في الانترنت عن تثبيت خط من الاكسس فقط بدون مساعدة عامل خارجي ولكن لم اصل لنتيجة. اليوم بحمد الله قمت بحل المشكلة بإستخدام ( Visual .NET ) قمت بكتابة اداة بسيطة وظيفتها تثبيت الخط. يتم تمرير براميتر لها وهي بدورها ستقوم بتثبيته الدوال المستخدمة: AddFontResource CreateScalableFontResource ShellExecuteA للمزيد من المعلومات ، اضغط على اسم الدالة ارفقت لكم المصادر من MSDN شرح بسيط لمن لم يعرف ماذا اقصد بتثبيت الخط واستخدام الخط وانه لن يظهر في حال كان العميل لا يملكه. قمت بارفاق قاعدة بيانات لكم كـ مثال للشرح مع الخط المستخدم مع الاداة. شرح الاستعمال: يجب ان تكون الاداة ( SEMO_RegisterFont.exe ) هي والخط الذي سوف تستخدمه بجانب قاعدة البيانات. افتح برنامجك وضع فيه هذا الاجراء. Sub RegisterFont(nFont) Dim strExe As String Dim strArg As String strExe = CurrentProject.Path & "\" & "SEMO_RegisterFont.exe" strArg = "/SEMO/" & nFont ShellExecute 0, "runas", strExe, strArg, vbNullString, SW_SHOWNORMAL End Sub في الاستدعاء اي في الحدث Form_Current RegisterFont "DroidSansArabic.ttf" حيث ان الـ DroidSansArabic.ttf هو اسم الخط الذي قمنا بوضعه بجانب قاعدة البيانات ملاحظة مهمة جدا: في حال كان اسم الخط يتكون من اكثر من كلمة مثل ( Droid Sans Arabic.ttf ) قم بحذف المسافات بين كلمة واخرى بحيث يصبح ( DroidSansArabic.tts ) وستعمل قاعدة البيانات التي قمت بتصميمها بشكل رائع وبالخطوط التي قمت انت بأختيارها بدون الخوف من مشكلة عدم توفر الخطوط في جهاز العميل. الشرح حصري للمنتدى وغير موجود في الانترنت. لا تشكرني الا اذا وجدت انني استحق ذلك. تم بحمد الله حسنين RegisterFont_SEMO_Pa3x.rar
  18. Option Compare Database Option Explicit Const SND_ALIAS_SYSTEMASTERISK As String = "SystemAsterisk" Const SND_ALIAS_SYSTEMDEFAULT As String = "SystemDefault" Const SND_ALIAS_SYSTEMEXCLAMATION As String = "SystemExclamation" Const SND_ALIAS_SYSTEMEXIT As String = "SystemExit" Const SND_ALIAS_SYSTEMHAND As String = "SystemHand" Const SND_ALIAS_SYSTEMQUESTION As String = "SystemQuestion" Const SND_ALIAS_SYSTEMSTART As String = "SystemStart" Const SND_ALIAS_SYSTEMWELCOME As String = "SystemWelcome" Const SND_ALIAS_YouGotMail As String = "MailBeep" ' playsound Params Const SND_LOOP = &H8 Const SND_ALIAS = &H10000 Const SND_NODEFAULT = &H2 ' silence if no sound associated with event Const SND_ASYNC = &H1 ' play async (don't freeze program while sound is playing) Private Declare PtrSafe Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" (ByVal lpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) As Long Private Sub Form_Close() PlaySound vbNullString, ByVal 0&, SND_NODEFAULT End Sub Private Sub Form_Load() PlaySound CurrentProject.Path & "\" & "DB_FILES\About.wav", vbNull, SND_ALIAS Or SND_NODEFAULT Or SND_ASYNC Or SND_LOOP End Sub اي سؤال انا حاضر، اتمنى الفائدة للجميع.
  19. السلام عليكم. بعد جهد كبير وسهر ليالي كثيرة, وكلها محاولات بائت بالفشل لربط الـ Visual Studio .NET وقراءة البيانات بالاكسس وكانت متمثلة بمكتبة dll او tlb للاسف كانت هنالك عوائق ومنها لكي يتم استخدام مكتبة من نوع tlb كان يجب اعطائها صلاحيات مسؤول لكي تتمكن من تسجيل هذه المكتبة في HKEY_CLASSES_ROOT في الريجستري. وتستخدمها على شكل References وفي حال استخدام مكتبة من نوع dll كان يتطلب استخدام دالة LoadLibraryA وهذه سيعتبرها الانتي فايروس كـ ملف مريب خصوصا لانها تقوم بتحميل المكتبة في الذاكرة وبدون توقيع رقمي..الخ اليوم قمت ببرمجة شيء مختلف ومميز عبارة عن تطبيق صغير بلغة NET. يتم تمرير البيانات من الاكسس لهذه التطبيق لكي يقوم بعدها الاكسس باقتناص المخرجات من التطبيق بواسطة الي remote shell ثم عرضها في الاكسس مرة اخرى وكان التطبيق على تحويل التاريخ الميلادي الى هجري لكن هذه المرة بصورة ادق وافضل. كما نعرف جميعنا ان التاريخ الهجري يكون غير مضبوط زيادة يوم او يومين او نقصان يوم او يومين او لا يوجد زيادة او نقصان لذلك قمت بوضع ComboBox لهذا الأمر.. اكتب التاريخ الميلادي في الحقل الاول ثم اكتب فارق الايام ان وجدت زيادة او نقصان او اتركها صفر كما هي او لم يوجد تغيير السورس كود التطبيق بلغة NET. لمن يريده. Module SEMO_Pa3x '-------------------------------------------------------- 'c0ded bY : SEMO.Pa3x 'skype : security.najaf 'facebook : https://www.facebook.com/Nisr.Aln3jaf 'gmail : isec2090@gmail.com 'last edit : 26/4/2019 '-------------------------------------------------------- Sub Main() For Each arg As String In My.Application.CommandLineArgs If arg.StartsWith("/SEMO/") Then Dim rep As String Dim splt() As String rep = arg.Replace("/SEMO/", "") splt = Split(rep, ",") Dim GET_date, GET_args As String GET_date = splt(0) GET_args = splt(1) Dim ConvertToDate As DateTime ConvertToDate = DateTime.Parse(GET_date) DateFormating(ConvertToDate.AddDays(GET_args)) DateConvert(ConvertToDate.AddDays(GET_args)) Console.WriteLine(ArabicWeekdayString(Weekday(GET_date)) & "," & LongDateString) End If Next End Sub Public LongDateString As String = String.Empty '#Region " DateConverter (dateValue As String) As String " #Region " DateConverter (dateValue As String) As String " Public Function DateConvert(ByVal dateValue As String) As String LongDateString = "" ' الاحتفاظ بالإعدادت الحالية Dim currentCulture As Globalization.CultureInfo = Threading.Thread.CurrentThread.CurrentCulture Dim con As String = "" If DateFormating(dateValue) <> "" Then dateValue = DateFormating(dateValue) '---------------------------------- Dim y As String = IIf(dateValue <> "", dateValue.Split("/")(2), "") Dim mmm() As String If y > "1300" And y < "1451" Then con = GetGregorianDate(dateValue) mmm = Split(GetGregorianDate(dateValue), "/") LongDateString = ArabicWeekdayString(Weekday(GetGregorianDate(dateValue))) & " " & mmm(0) & " " & GregorianMonthString(Val(mmm(1))) & ", " & mmm(2) End If If y > "1883" And y < "2029" Then con = GetHijriDate(dateValue) mmm = Split(con, "/") LongDateString = mmm(0) & "," & HiriMonthString(Val(mmm(1))) & "," & mmm(2) & "H" End If End If ' إستعادة الإعدادت Threading.Thread.CurrentThread.CurrentCulture = currentCulture Return con End Function #End Region #Region " GetHijriDate(GregorianDate As String) As String " Private Function GetHijriDate(ByVal GregorianDate As String) As String Try Threading.Thread.CurrentThread.CurrentCulture = New Globalization.CultureInfo("ar-eg") Dim hijriDate As String = String.Empty 'Start Date is 10-31-1883 Dim DaysPan As Integer = DateDiff(DateInterval.Day, New System.DateTime(1883, 10, 31), CDate(GregorianDate)) + 1 Dim i As Integer = 0 Do While (DaysPan > 29 + Val(UmmUlquraHijriMonths.Chars(i))) DaysPan = DaysPan - 29 - Val(UmmUlquraHijriMonths.Chars(i)) i = i + 1 Loop hijriDate = Format$(DaysPan, "00") + "/" + Format((i Mod 12) + 1, "00") + "/" + CStr(1301 + (i \ 12)) Return hijriDate Catch ex As Exception ' MessageBox.Show("تأكد من التاريخ الميلادي.", "خطأ في التاريخ الميلادي", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign Or MessageBoxOptions.RtlReading) Return Nothing End Try End Function #End Region #Region " GetGregorianDate(HijriDate As String) As Date " Private Function GetGregorianDate(ByVal HijriDate As String) As String Try Threading.Thread.CurrentThread.CurrentCulture = New Globalization.CultureInfo("ar-eg") Dim gregorianDate As String = String.Empty Dim MonthsPan As Integer MonthsPan = (12 * (CInt(Mid(HijriDate, 7, 4)) - 1301)) + CInt(Mid(HijriDate, 4, 2)) Dim TempDaysPan As Integer Dim i As Integer For i = 0 To MonthsPan - 2 TempDaysPan = TempDaysPan + 29 + Val(UmmUlquraHijriMonths.Chars(i)) Next i If CInt(Mid(HijriDate, 1, 2)) > 29 + Val(UmmUlquraHijriMonths.Chars(i)) Then ' MessageBox.Show("رقم اليوم لهذا الشهر يجب أن لا يتجاوز 29", "خطأ اليوم الشهري للتاريخ الهجري", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign Or MessageBoxOptions.RtlReading) Return Nothing Else TempDaysPan = TempDaysPan + CInt(Mid(HijriDate, 1, 2)) End If 'Start Date is 10-31-1883 gregorianDate = CStr(DateAdd(DateInterval.Day, TempDaysPan - 1, New System.DateTime(1883, 10, 31))) Return gregorianDate Catch ex As Exception ' MessageBox.Show("تأكد من التاريخ الهجري.", "خطأ في التاريخ الهجري", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign Or MessageBoxOptions.RtlReading) Return Nothing End Try End Function #End Region #Region " UmmUlquraHijriMonths " 'UmmUlquraHijriMonths Private Function UmmUlquraHijriMonths() As String Dim HijriMonthSequence As String = "" 'Create the Months data from 1301H to 1450H - (150years) HijriMonthSequence += "111010010011" 'Year 1301H HijriMonthSequence += "011101001001" 'Year 1302H HijriMonthSequence += "011101100100" 'Year 1303H HijriMonthSequence += "101101101010" 'Year 1304H HijriMonthSequence += "010101110101" 'Year 1305H HijriMonthSequence += "010010110110" 'Year 1306H HijriMonthSequence += "101001010110" 'Year 1307H HijriMonthSequence += "101101001010" 'Year 1308H HijriMonthSequence += "110110100100" 'Year 1309H HijriMonthSequence += "110111010010" 'Year 1310H HijriMonthSequence += "010111011001" 'Year 1311H HijriMonthSequence += "001011011100" 'Year 1312H HijriMonthSequence += "100101011101" 'Year 1313H HijriMonthSequence += "010010101101" 'Year 1314H HijriMonthSequence += "101001010101" 'Year 1315H HijriMonthSequence += "101101001010" 'Year 1316H HijriMonthSequence += "101101101001" 'Year 1317H HijriMonthSequence += "010101110100" 'Year 1318H HijriMonthSequence += "100101110110" 'Year 1319H HijriMonthSequence += "010010110111" 'Year 1320H HijriMonthSequence += "001001010111" 'Year 1321H HijriMonthSequence += "010100101011" 'Year 1322H HijriMonthSequence += "011010010101" 'Year 1323H HijriMonthSequence += "011011001010" 'Year 1324H HijriMonthSequence += "101011010101" 'Year 1325H HijriMonthSequence += "010101011011" 'Year 1326H HijriMonthSequence += "001001011101" 'Year 1327H HijriMonthSequence += "100100101101" 'Year 1328H HijriMonthSequence += "110010010101" 'Year 1329H HijriMonthSequence += "110101001010" 'Year 1330H HijriMonthSequence += "111010100101" 'Year 1331H HijriMonthSequence += "011011010010" 'Year 1332H HijriMonthSequence += "101011010101" 'Year 1333H HijriMonthSequence += "010101011010" 'Year 1334H HijriMonthSequence += "101010101011" 'Year 1335H HijriMonthSequence += "010101001011" 'Year 1336H HijriMonthSequence += "011010100101" 'Year 1337H HijriMonthSequence += "011101010010" 'Year 1338H HijriMonthSequence += "101110101001" 'Year 1339H HijriMonthSequence += "001101110100" 'Year 1340H HijriMonthSequence += "101010110110" 'Year 1341H HijriMonthSequence += "010101010110" 'Year 1342H HijriMonthSequence += "101010101010" 'Year 1343H HijriMonthSequence += "110101010010" 'Year 1344H HijriMonthSequence += "110110101001" 'Year 1345H HijriMonthSequence += "010111010100" 'Year 1346H HijriMonthSequence += "101011101010" 'Year 1347H HijriMonthSequence += "010011011101" 'Year 1348H HijriMonthSequence += "001001101110" 'Year 1349H HijriMonthSequence += "100100101110" 'Year 1350H HijriMonthSequence += "101010100110" 'Year 1351H HijriMonthSequence += "110101010100" 'Year 1352H HijriMonthSequence += "110110101010" 'Year 1353H HijriMonthSequence += "010110110101" 'Year 1354H HijriMonthSequence += "001010110110" 'Year 1355H HijriMonthSequence += "100100110111" 'Year 1356H HijriMonthSequence += "010010011011" 'Year 1357H HijriMonthSequence += "101001001011" 'Year 1358H HijriMonthSequence += "101100100101" 'Year 1359H HijriMonthSequence += "101101010100" 'Year 1360H HijriMonthSequence += "101101101010" 'Year 1361H HijriMonthSequence += "010101101101" 'Year 1362H HijriMonthSequence += "010010101101" 'Year 1363H HijriMonthSequence += "101001010101" 'Year 1364H HijriMonthSequence += "110100100101" 'Year 1365H HijriMonthSequence += "111010010010" 'Year 1366H HijriMonthSequence += "111011001001" 'Year 1367H HijriMonthSequence += "011011010100" 'Year 1368H HijriMonthSequence += "101011101010" 'Year 1369H HijriMonthSequence += "010101101011" 'Year 1370H HijriMonthSequence += "010010101011" 'Year 1371H HijriMonthSequence += "011010010101" 'Year 1372H HijriMonthSequence += "101101001001" 'Year 1373H HijriMonthSequence += "101110100100" 'Year 1374H HijriMonthSequence += "101110110010" 'Year 1375H HijriMonthSequence += "010110110101" 'Year 1376H HijriMonthSequence += "001010111010" 'Year 1377H HijriMonthSequence += "100101011011" 'Year 1378H HijriMonthSequence += "010010101011" 'Year 1379H HijriMonthSequence += "010101010101" 'Year 1380H HijriMonthSequence += "011010110010" 'Year 1381H HijriMonthSequence += "011011011001" 'Year 1382H HijriMonthSequence += "001011101100" 'Year 1383H HijriMonthSequence += "100101101110" 'Year 1384H HijriMonthSequence += "010010101110" 'Year 1385H HijriMonthSequence += "101001010110" 'Year 1386H HijriMonthSequence += "110100101010" 'Year 1387H HijriMonthSequence += "110101010101" 'Year 1388H HijriMonthSequence += "010110101010" 'Year 1389H HijriMonthSequence += "101010110101" 'Year 1390H HijriMonthSequence += "010010111011" 'Year 1391H HijriMonthSequence += "001001011011" 'Year 1392H HijriMonthSequence += "100100101011" 'Year 1393H HijriMonthSequence += "101010010101" 'Year 1394H HijriMonthSequence += "101101001010" 'Year 1395H HijriMonthSequence += "101110100101" 'Year 1396H HijriMonthSequence += "010110101010" 'Year 1397H HijriMonthSequence += "101010110101" 'Year 1398H HijriMonthSequence += "010101010110" 'Year 1399H HijriMonthSequence += "101010010110" 'Year 1400H HijriMonthSequence += "110101001010" 'Year 1401H HijriMonthSequence += "111010100101" 'Year 1402H HijriMonthSequence += "011101010010" 'Year 1403H HijriMonthSequence += "011011101001" 'Year 1404H HijriMonthSequence += "001101101010" 'Year 1405H HijriMonthSequence += "101010101101" 'Year 1406H HijriMonthSequence += "010101010101" 'Year 1407H HijriMonthSequence += "101010100101" 'Year 1408H HijriMonthSequence += "101101010010" 'Year 1409H HijriMonthSequence += "101110101001" 'Year 1410H HijriMonthSequence += "010110110100" 'Year 1411H HijriMonthSequence += "100110111010" 'Year 1412H HijriMonthSequence += "010011011011" 'Year 1413H HijriMonthSequence += "001001011101" 'Year 1414H HijriMonthSequence += "010100101101" 'Year 1415H HijriMonthSequence += "101010100101" 'Year 1416H HijriMonthSequence += "101011010100" 'Year 1417H HijriMonthSequence += "101011101010" 'Year 1418H HijriMonthSequence += "010101101101" 'Year 1419H HijriMonthSequence += "010010111101" 'Year 1420H HijriMonthSequence += "001000111101" 'Year 1421H HijriMonthSequence += "100100011101" 'Year 1422H HijriMonthSequence += "101010010101" 'Year 1423H HijriMonthSequence += "101101001010" 'Year 1424H HijriMonthSequence += "101101011010" 'Year 1425H HijriMonthSequence += "010101101101" 'Year 1426H HijriMonthSequence += "001010110110" 'Year 1427H HijriMonthSequence += "100100111011" 'Year 1428H HijriMonthSequence += "010010011011" 'Year 1429H HijriMonthSequence += "011001010101" 'Year 1430H HijriMonthSequence += "011010101001" 'Year 1431H HijriMonthSequence += "011101010100" 'Year 1432H HijriMonthSequence += "101101101010" 'Year 1433H HijriMonthSequence += "010101101100" 'Year 1434H HijriMonthSequence += "101010101101" 'Year 1435H HijriMonthSequence += "010101010101" 'Year 1436H HijriMonthSequence += "101100101001" 'Year 1437H HijriMonthSequence += "101110010010" 'Year 1438H HijriMonthSequence += "101110101001" 'Year 1439H HijriMonthSequence += "010111010100" 'Year 1440H HijriMonthSequence += "101011011010" 'Year 1441H HijriMonthSequence += "010101011010" 'Year 1442H HijriMonthSequence += "101010101011" 'Year 1443H HijriMonthSequence += "010110010101" 'Year 1444H HijriMonthSequence += "011101001001" 'Year 1445H HijriMonthSequence += "011101100100" 'Year 1446H HijriMonthSequence += "101110101010" 'Year 1447H HijriMonthSequence += "010110110101" 'Year 1448H HijriMonthSequence += "001010110110" 'Year 1449H HijriMonthSequence += "101001010110" 'Year 1450H Return HijriMonthSequence End Function #End Region ' Function DateFormating(ByVal _Date As String) As String #Region " DateFormating( _Date As String) As String " Public Function DateFormating(ByVal _Date As String) As String ' / تجزئة نص التاريخ من الفاصل Dim dt() As String = Split(_Date, "/") '------------------------------------------------------ ' في حالة عدم وجود فاصل تاريخ أصلا فيتم المغادرة If dt.Length <> 3 Then Return "" '------------------------------------------------------ ' التأكد أن أجزاء التاريخ هي أرقام فعلا For i = 0 To dt.Length - 1 If Not IsNumeric(dt(i)) Then Return "" End If Next i '------------------------------------------------------ ' ترتيب التاريخ بحيث يبدأ باليوم وينتهي السنة If Val(dt(0)) > 999 And Val(dt(2)) < 99 Then Dim a As String = Val(dt(0)) Dim b As String = Val(dt(2)) dt(0) = b : dt(2) = a End If '------------------------------------------------------ ' التأكد من عدم تجاوز كل جزء الحدود المسموح له If Val(dt(2)) < 1301 Or Val(dt(2)) > 2029 Then Return "" ' عدم تجاوز الشهر عن 12 If Val(dt(1)) < 1 _ Or Val(dt(1)) > 12 Then Return "" End If ' عدم تجاوز اليوم الهجري عن 30 If Val(dt(2)) >= 1301 _ And Val(dt(2)) <= 1450 Then If Val(dt(0)) < 1 Or Val(dt(0)) > 30 Then Return "" End If '------------------------------------------------------ Dim y As Integer, m As Integer, d As Integer d = Val(dt(0)).ToString("00") m = Val(dt(1)).ToString("00") y = Val(dt(2)).ToString("0000") Return Val(dt(0)).ToString("00") _ & "/" & Val(dt(1)).ToString("00") _ & "/" & Val(dt(2)).ToString("0000") End Function #End Region '#End Region #Region " ArabicWeekdayString " Private Function ArabicWeekdayString(ByVal weekdayValue As Integer) Dim w As String = String.Empty Select Case weekdayValue Case 7 w = "Saturday" Case 1 w = "Sunday" Case 2 w = "Monday" Case 3 w = "Tuesday" Case 4 w = "Wednesday" Case 5 w = "Thursday" Case 6 w = "Friday" End Select Return w End Function #End Region #Region " HiriMonthString " Private Function HiriMonthString(ByVal hijriMonthValue As Integer) Dim m As String = String.Empty Select Case hijriMonthValue Case 1 m = "Muharram" Case 2 m = "Safar" Case 3 m = "Rabi al-Awwal" Case 4 m = "Rabi ath-Thani" Case 5 m = "Jumada al-Ula" Case 6 m = "Jumada al-Akhirah" Case 7 m = "Rajab" Case 8 m = "Shaaban" Case 9 m = "Ramadan" Case 10 m = "Shawwal" Case 11 m = "Dhu al-Qaadah" Case 12 m = "Dhu al-Hijjah" End Select Return m End Function #End Region #Region " GregorianMonthString " Private Function GregorianMonthString(ByVal gregorianMonthValue As Integer) Dim m As String = String.Empty Select Case gregorianMonthValue Case 1 m = "January" Case 2 m = "February" Case 3 m = "March" Case 4 m = "April" Case 5 m = "May" Case 6 m = "June" Case 7 m = "July" Case 8 m = "August" Case 9 m = "September" Case 10 m = "October" Case 11 m = "November" Case 12 m = "December" End Select Return m End Function #End Region End Module ملاحظة: حقوق بعض الاكواد من google ارجو ان ينال موضوعي اعجابكم. حسنين Hijri_SEMO_Pa3x.rar
  20. السلام علكيم. الاغلب يعاني من مشكلة تصدير البيانات كان تكون جداول او استعلامات او تقارير..الخ الى اكسل ولكن! مع بقاء مسميات الحقول العربية ( Caption ) الان لنفرض لدي الجدول اسمة Customers وهذه الاعمدة الخاصة به واما المسميات فهي هذه الان عند محاول تصدير هذا الجدول الى اكسل بإستخدام VBA يتم تصديره ولكن لا تظهر المسميات العربية مثل اسم الموظف, الرقم الوظيفي..الخ بل تظهر اسماء الحقول باللغة الانكليزية , وهذه مشكلة. الان قم بأنشاء ماكرو جديد ثم طبق كما موجود بالصورة, اختر نوع الكائن الذي تريد تصديره جدول استعلام ... الخ واسم الكائن ، واهم شي تنتبه للتنسيق اختار كما قمت انا بأختياره وسيتم تصدير الجدول بالمسميات العربية. ارفقت لكم قاعدة بيانات كـ مثال للشرح لمن واجه صعوبة في شيئ ما. حسنين export_to_excel_semo_pa3x.accdb
  21. ارجو ان يكون الشرح واضح واذا استفدت ارجو ان لا تنساني من داعئك الصالح http://youtu.be/p2dsbTlK8m4
×
×
  • اضف...

Important Information