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

نجوم المشاركات

  1. AbuuAhmed

    AbuuAhmed

    الخبراء


    • نقاط

      11

    • Posts

      976


  2. jjafferr

    jjafferr

    أوفيسنا


    • نقاط

      7

    • Posts

      9,814


  3. ابوخليل

    ابوخليل

    أوفيسنا


    • نقاط

      6

    • Posts

      12,179


  4. عبد الله قدور

    عبد الله قدور

    الخبراء


    • نقاط

      3

    • Posts

      1,177


Popular Content

Showing content with the highest reputation on 23 ينا, 2023 in all areas

  1. للعلم ، اذا كان الاستعلام مصدر بيانات النموذج ،فالنموذج يحترم الفرز الذي يتم في الاستعلام ، ويتم عرض بيانات النموذج على اساسه ، بينما التقرير لا يحترم فرز الاستعلام ، ويجب استعمال زر تجميع وفرز: . جعفر
    3 points
  2. السلام عليكم ورحمة الله وبركاته اسعد الله اوقاتكم جميعا بالنسبة لبناء برنامج مشتريات ومبيعات فأولا يجب تسميته برنامج محاسبة بحيث لا يمكن ان تحصل على مبيعات والمشتريات بدون كامل ارتباطهم باخواتهم في المحاسبة لذلك سأسرد لك اهم الجداول التي تحتاجها لبناء قاعدة بيانات محاسبية 1- جدول شجرة الحسابات وهو جدول تضع فيه اسماء الحسابات التي سوف تستخدمها في البيع والشراء والمصاريف هذا نموذج ادخال على شجرة الحسابات وهذه صورة عن الجدول الحسابات 2- جدول المواد: هو جدول تضع فيه الاصناف التي تستخدمها في بيع او الشراء ويسمى شجرة المواد وهذا جدول المواد 3- جدول العملات اذا كنت تحتاج استخدام اكثر من عملة 4- جدول المستودعات 5- جدول مراكز الكلفة : وهو جدول يستخدم في القيود لحساب الكلفة وضبط المصاريف على المراكز (قد لا تحتاجه في عملك) 6- جدول المستخدمين هذه الجداول هي جداول التعريف الاساسية لاي برنامج محاسبة في مشاركة اخرى ساضع لك جداول الادخال
    3 points
  3. تم إصلاح الخلل وقمت ببعض التجارب ولكن يحتاج إلى مزيد من التجارب من طرفكم أيضا. وتم إضافة ضبط عدد الأسطر في صفحة القائمة بعدد تكرار السجلات في الصفحة الواحدة وقد كان سابقا يتم مراعاة هذه الميزة إذا كان عدد الصفحات صفحة واحدة فقط. توزيع القرار لمدارس العراق_04.xlsm
    3 points
  4. وعليكم السلام ورحمه الله وبركاته تفضل ان شاء الله طلبك المصنف1.xlsm
    2 points
  5. @saad 77 @saad alyousif @فوزى فوزى @مصطفى محمود مصطفى @mohameddeela @فارس حسن3
    2 points
  6. الله يسعدكم جميعا تم ايجاد الخطاء بعد عدة محاولات (D) الخطاء كان في الملف نفسة حيث ان الارقام كانت مةجوده في العامود يعني العامود رقم 5 تم تعديل رقم العامود في نفس الامر من (1) الي (5) وبحمد الله تم معالجة المشكلة شكرا جزيلا
    2 points
  7. من الاهمية بمكان الاحتراف في تصميم الجداول ، لأنها القاعدة التي يبنى عليها البرنامج ، لذا سميت قواعد بيانات وحتى نتمكن من بناء الجداول بطريقة سليمة وصحيحة ونتلافى المشاكل والصعوبات في تنفيذ بعض الاجراءات مستقبلا : يجب عند التصميم ان نتخيل ونتصور عمل جميع واجهات الادخال وواجهات الاخراج ، بمعنى اوضح يجب ان اتخيل عمل النماذج عند الادخال ، وكيف استخرج وأعرض ادق البيانات كتقارير بأقل عدد من الاستعلامات والأكواد . الاصناف تختلف حسب المشروع ، والاساس هو ثلاثة اشياء : كود الصنف واسمه وسعر البيع ، وبعض الاصناف تحتاج الى شيء من التفصيل كــ الوحدات والعدد في كل وحدة ونحو ذلك لم اذكر سعر الشراء لأن سعر الشراء مرتبط برقم الفاتورة ، وتتم عمليات الشراء على فترات متباعدة وقد يتغير السعر في الصنف الواحد بين فاتورة وأخرى ، ومكانه الصحيح في جدول الحركات او ما يسمى بتفصيل العمليات ، بينما سعر البيع مرتبط برقم الصنف ، وعمليات البيع مستمرة على مدار الساعة لذا تثبيت سعر البيع مطلوب من اجل السرعة في الادراج في جدول الحركة فهو عبارة عن مشتريات لم تسجل بعد ، سواء عند العمل على البرنامج لأول مرة .. او عند الجرد السنوي والرغبة في ترحيل بيانات العام المنصرم والعمل من جديد وهنا تتضح اهمية تحليل البيانات وتصميم الجداول بما يتوافق معه . تصور انك في نهاية العام وبعد اخذ نسخة احتياطية تستطيع تصدير الاصناف المتبقية في المخزن ثم استيرادها الى النسخة الجديدة كرصيد افتتاحي . معظم البرامج يوجد فيها هذه الخاصية .. ولكنها غير متاحة الا لصاحب الصلاحية ، لأن الاصل عدم التعديل .. والحذف محظور تماما تجد ادناه مرفق لبعض الجداول الأساسية لعمليات البيع والشراء اطلع عليها جيدا ووافني بما يشكل عليك فهمه ملحوظة : سوف افصل المشاركات الاخيرة بموضوع وعنوان جديد buyAndSale.accdb
    2 points
  8. برنامج للحسابات المدينة والدائنة Creditor and debtor.mdb
    1 point
  9. السلام عليكم تم فصل هذا النقاش من موضوع سابق لتطرقه الى عملية بناء الجداول من الامور المتعارف عليها خاصة في برامج الحسابات والمالية هي منع منعا باتا اجراء الحذف او التعديل على البيانات التاريخية ويقصد بالبيانات التاريخية كل ما سبق ادخاله بعد اجراء عملية الحفظ . بحيث لو تم ارجاع سلعة بعد ساعة من البيع فانه يتم عمل ارجاع للسلعة بعملية جديدة وسجل جديد . ولست بحاجة الى مرفق فالمسألة واضحة فالمكان الذي نسجل فيه قيمة المشتريات او قيمة المبيعات نضع فيه العدد في الاخير وعند الاستعلام والجرد : نطرح مجموع المبيعات من مجموع المشتريات لاظهار المتبقي ...... لو طلب صاحب العمل تقريرا بعدد مشتريات صنف معين خلال سنتين : كل ما علينا هو عمل استعلام لجمع عمود المشتريات اما حسب فكرتك الحالية .. فسوف تعمل على جمع عدد المبيعات من هذا الصنف + ما تبقى من المشتريات ... وهذا لا يعطي نتيجة صحيحة ودقيقة في الغالب لوجود مرتجعات بيع وشراء واصناف تستبعد لعدم صلاحيتها .
    1 point
  10. السلام عليكم الاخ محمد هذا عمل بسيط مع وضع بعض التعديلات لتسهيل العمل حيث يعتمد على وضع التقييمات لجميع الاشهر داخل نفس ورقة العمل نتمنى من الله أن ينال اعجابك وربما احد الافاضل عنده فكره أفضل لأوراق العمل المتفرقة New Evaluation 001.xlsx
    1 point
  11. وفقكم الله وحفظكم من كل سوء
    1 point
  12. جزاك الله خيرا ربي يوفقك ويحفظك
    1 point
  13. جرب استخدام استعلام Crosstab وسوف تجد فيه الكثير من المتعة والمنفعة. أضفت لك هذا الاستعلام إلى مثالك ، مع ملاحظة أنه يمكنك التعديل على الاستعلام بعد انشائه. موفقين. Gradedata_02.accdb
    1 point
  14. جرب ان تحول النص الى تاريخ قبل التحديث باستخدام متغير
    1 point
  15. وعليكم السلام 🙂 فيه 3 طرق تجي على بالي ، ولكن يجب عرض التقرير في وضع معاينة الطباعة Print Preview : 1. اعد ترتيب الحقول ، واستعمل خط اكبر ، وبعدين ، والاهم ، انك توسع قسم "التفصيل" Detail ، بأنك تنزل ذيل الصفحة قدر حاجتك (شوف الاسهم) ، بحيث توسع شوي ، وتعرض التقرير في وضع معاينة الطباعة ، وتشوف اذا محتاج تزحفه اكثر واكثر . ملاحظة تقدر تستخدم Page Breaker كما سيتم شرحه في رقم 3 ، او طريقة رقم 2 ، بحيث لا تحتاج معها الى توسيع قسم "التفصيل" . 2. تنقر على قسم "التفصيل" Detail ، ثم من الاعدادادت تختار : اضافة صفحة بعد القسم . 3. استعمل Page Breaker تحت الحقول في قسم "التفصيل" Detail . جعفر 1549.تقرير لموظف واحد.accdb.zip
    1 point
  16. عزيزي ، لا أعتقد ولا أجزم برأيي .. الرأيان يحتاجان إلى تجربة. إذا التقرير لا يحتوي على (فرز وليس تجميع) فلن يتبدل ترتيب (المصدر) الاستعلام أو الجدول.
    1 point
  17. نعم كذلك ، فالخطوة الأولى شكلية فقط لا تؤثر على النتائج فالشراء عندك ليس يومي فغيرت الإسم إلى بالتاريخ أو حسب التاريخ. والخطوة الثانية جوهرية حيث كانت هناك هفوة فبدلا من استعمال Group استعملت Max وبسببها تعطي كانت تعطي نتائج خاطئة. استخدم دالة Nz لتخلصك من مشكلات الـ Null وبهذه الدالة تستطيع تحويل هذه تحويل هذه القيمة إلى صفر. واضح لست مبتدئا ، إذا لم تتمكن من تطبيقها حدد لي اسم الاستعلام وأنا أقوم بالتعديل عليه.
    1 point
  18. سبحان الله ، هذا اللي يسمونه "تفاكر أوراد" 🙂
    1 point
  19. في اعتقادي ، مشاركة أكثر من شخص في الرد على السؤال ، يفتق الاذهان ويدمج التجارب ويبلور الافكار وفائدة للجميع ، فمنه نتعلم الطرق الاخرى للإجابة على السؤال صدقت استاذي جعفر
    1 point
  20. تم الفصل وافراد النقاش حول الجداول بهذا الموضوع الجديد
    1 point
  21. ومادام ال 00 عاملالك مشكلة خليها 11 ولا 22 ولا 33 مش هتفرق معاك 😅
    1 point
  22. تفضل Private Sub JO_AfterUpdate() If Me.JO = "0" Then Me.nNAME = "ahmed" Me.fNAME = "ali" ElseIf Me.JO = "00" Then Me.nNAME = "khaled" Me.fNAME = "hassan" End If End Sub جعفر
    1 point
  23. ما دامك مصر أنه الموضوع ما يحتاج مثال .. 🙂 استخدم هذا الكود على زر أمر بحيث تغير رابط الملف النصي وتغير اسم مربع النص اللي بيلصق النص فيه : Private Sub btnGetText_Click() ' Declare variables to hold the text from the online file and the textbox Dim strText As String Dim txtTarget As TextBox ' Set the URL of the online text file Dim strURL As String strURL = "http://www.website.com/text.txt" ' Use the XMLHTTP object to retrieve the text from the online file Dim objXMLHTTP As Object Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP") objXMLHTTP.Open "GET", strURL, False objXMLHTTP.Send ' Check if the request was successful If objXMLHTTP.Status = 200 Then ' Get the text from the response strText = objXMLHTTP.responseText ' Get a reference to the textbox on the form Set txtTarget = Me.txtTextBox ' Put the text from the online file into the textbox txtTarget.Value = strText Else ' Show an error message if the request was not successful MsgBox "There was an error retrieving the text from the online file." & vbCrLf & _ "HTTP Status: " & objXMLHTTP.Status, vbExclamation End If ' Clean up Set objXMLHTTP = Nothing Set txtTarget = Nothing End Sub
    1 point
  24. تفضل Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long Private Sub Command27_Click() Dim i As String i = Me.k_code ShellExecute Me.hwnd, "open", CurrentProject.Path & "\files\" & i & ".tif", "", "", 1 End Sub Downloads.rar
    1 point
  25. As for the solution, you can use the following code to replace the cases of 8208 character Sub Test() ActiveSheet.Columns(1).Replace ChrW(8208), ChrW(45), xlPart, , , , True, False End Sub After the code, you will find the strings are the same exactly and you can use Remove Duplicates easily
    1 point
  26. The separator in the two strings in your file are different Try this formula in G1 to make sure =MID($A1,COLUMN(F$1),1) then use this formula in any cell =CODE(G1) The result of the last formula will be 63 Do the same steps with the second string and you will get the result 45 In cell G2 =MID($A2,COLUMN(F$1),1) and use this formula =CODE(G2) So these two characters (the separators) are the different
    1 point
  27. وعليكم السلام ورحمة الله وبركاته 🙂 العمل على الوندوز نواة 32بت او 64بت لا تعمل اي تغيير في برنامج الاكسس ، اما اذا برنامجك معمول على اكسس نواة 32بت ثم شغلته على اكسس نواة 64بت ، الشيء الوحيد اللي لازم تغيره هو تصريح مكتبات الوندوز API اللي تستعملها في الوحدات النمطية ، بحيث تلائم العمل على المكتبتين 32بت و64بت ، وهنا بعض طرق العمل على ذلك. اما التغير في هوامش طباعة التقارير (وليس هوامش التقارير العادية) ، فتعتمد على الطابعة اللي مصمم لها التقرير ، وتغيير من افقي الى رأسي ، فهاي اول مرة اسمع بها !! اذا قصدك في تغيير التنسيق هو تغيير نوع/حجم الخط ، فهذا يعتمد على نوع الخط المستخدم سابقا ووجوده حاليا بعد ان غيّرت نظام الوندوز 🙂 بوجه عام ، يمكنك استعمال الاكسس على مختلف النسخ ، اذا لم تستخدم الخواص الجديدة في النسخ الجديدة 🙂 جعفر
    1 point
  28. جزاكم الله الف خير اخ ابو احمد ... لكن تبقى ملاحظة عند التنفيذ وكان عدد الطلاب اكثر من العدد بالملف مثلا 300 طالب او اكثر .. لا تظهر نتائج في شيت القائمة نتمنى ان تكمل معروفك مع خالص تحياتنا توزيع القرار لمدارس العراق_031.xlsm
    1 point
  29. اخي هل هناك ملف اخر غير الدي قمت بارفاقه في المشاركة تريد تنفيد الامر عليه بعد اضافة الكود قم بحفظ الملف بصيغة الماكرو
    1 point
  30. ملف آخر حصلته ومن فضلك وافني بالرد حق اتوقف عن البحث أو استمر agenda.rar
    1 point
  31. خلاص .. آخر نسخة 🙂 ، هذه النسخة تم فيها معالجة وضوح/جودة الطابعة فهذا الإعداد كان يؤثر على سمك البراويز، والحمد لله. DrawLines_05.accdb
    1 point
  32. السلام عليكم ورحمة الله اخواني اعضاء ومشرفي المنتدي الكرام اليوم اقدم لكم برنامج لطباعة الهويات هذا برنامج مؤخوز فكرته من احد الموضيع المطروحه في المنتدي ولاكن انا صممته من جديد وبطريقتي اريد رايكم في البرنامج ولو في تطوير اوي اي ملاحظات ياريت نطرحها في الموضوع ليستفاد الجميع وياريت حد يكون عنده طابعة الهويات البلاستكية يجربه ويفيدنا بالنتيجة وضع الملف في برتشن ال D ولو وضعته في برتشن اخر الدخول الي نموذج الربط لتعديل الربط بملف الصور الدخول من زر امر Lank_Photo واختيار مسار ملف الصور الي هو داخل الفولدر SYSTEM Preint Card.rar
    1 point
  33. السلام عليكم 🙂 لتعم الفائدة ، رجاء قراءة الطريقة السابقة ، والتي يمكن قراءتها من هنا : https://www.officena.net/ib/topic/107637-اجعل-برنامجك-يعمل-على-النواتين-32بت-و-64بت/ ------------------------------------------------------------------------------------------------------------------ اذا عملنا برنامج على الاكسس 32بت ، وفيه مكتبات الوندوز الـ 32بت (لاحظ الرقم 32 في اسم المكتبة: comdlg32.dll) ، ثم شغلنا البرنامج على اكسس 64بت ، فنحصل على هذا الخطأ : . للعمل بهذه الطريقة محتاجين الى: 1. ملف في موقع مايكروسوف (مرفق نسخة Win32API_PtrSafe.zip) ، وفيه طريقة عمل مناداة النواتين : https://www.microsoft.com/en-us/download/details.aspx?id=9970 وعند فك الملف ، سنستعين بالملف Win32API_PtrSafe.TXT ، 2. البرنامج Notepad++ المجاني ، ويمكن انزاله من هنا : https://notepad-plus-plus.org بعد تنصيب البرنامج ++Notepad ، يمكننا فتح الملف Win32API_PtrSafe.TXT به : هذا البرنامج يفهم تنسيق وعمل الكثير من لغات البرمجة ، ومنها VB ، ونستفيد منه حتى في برمجة كود VBE لأنه يفهم تنسيقها: . ------------------------------------------------------------------------------------------------------------------ سنستخدم المرفق في هذ الرابط لنجعله يعمل على النواتين 32بت و 64بت: https://www.officena.net/ib/topic/61106-هدية-من-اليمين-الى-اليسار،-مربع-القائمة-listbox-والشجرة-treeview/ هذه هي مكتبات 32بت الوندوز المستعمله في المرفق: Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Public Declare Function InvalidateRect Lib "user32" (ByVal hwnd As Long, lpRect As Long, ByVal bErase As Long) As Long Public Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long Public Declare Function GetFocus Lib "user32" () As Long Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long . خطوات العمل: A. ننسخ اسم المكتبة GetWindowLong من برنامج الاكسس ، B. ثم في برنامج ++Notepad ، نبحث عن هذه الكلمة عن طريق Ctrl+F ، C. فنضع الكلمة مكان البحث ، وننقر على المربع: Find All in Current Document . D. نرى هذ النافذة تُفتح في اسفل البرنامج ، اهم شيء في هذه النافذه هو ان نفرق بين كلمة البحث التي نريدها ، ونفرقها عن كلمات البحث المشابهه والتي لا علاقة لنا بها (يجب ملاحظة ان بعض البرامج/الامثلة التي ننزلها من الانترنت ، يكون صاحبها عمل تغيير في اسم المكتبة ، مثلا: بدل GetWindowLong يكون apiGetWindowLong ، فيجب ان نعرف انه نفس الاسم ، ونبحث عن الكلمة الاصل ، كما نلاحظ ان تعديل الاسم يتم من بدايته وليس من نهايته) . E. اذن نرى هنا ان آخر سطرين فيهما طلبنا ، F. ندقق في السطر ، ونبحث عن اي كلمة تنتهي بـ Ptr ، مثل LongPtr ، CLngPtr ، VarPtr ، ObjPtr ، StrPtr ، او الكلمات التالية LongLong ، CLngLng ، فاذا وجدناها ، اذن يجب التصريح لهذه المكتبة في الكود في برنامجنا على سطرين مختلفين ، السطر الاول للنواة 64 بت ، ونأخذه من برنرنامج ++Notepad ، والسطر الثاني للنواة 32 بت ، ونأخذه من برنامجنا الاصل ، هكذا : #If VBA7 And Win64 Then '64 bits Public Declare PtrSafe Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As LongPtr, ByVal nIndex As Long) As Long #Else '32 bits Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long #End If . *** الخطوة الاولى والاهم هي اضافة كلمة PtrSafe بعد كلمة Declare ، للنواة 64بت. *** لاحظ اننا اضفنا كلمة Public في اول السطر للنواتين ، *** وبعد كل خطوة نعملها ، يجب ان نعمل Compile :على الاكسس 32 بت والاكسس 64 بت :حتى نتأكد انه لا توجد اخطاء ونتبع نفس الخطوات اعلاه لبقية المكتبات ، المكتبة التاليه: SetWindowLong ، والنتيجة نفسها مثل المكتبة السابقة ، اذن الكود اصبح #If VBA7 And Win64 Then '64 bits Public Declare PtrSafe Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As LongPtr, ByVal nIndex As Long) As Long Public Declare PtrSafe Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long #Else '32 bits Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long #End If . وهكذا مع بقية المكتبات ، فيكون الكود النهائي: #If VBA7 And Win64 Then '64 bits Public Declare PtrSafe Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As LongPtr, ByVal nIndex As Long) As Long Public Declare PtrSafe Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Public Declare PtrSafe Function InvalidateRect Lib "user32" Alias "InvalidateRect" (ByVal hwnd As LongPtr, lpRect As Long, ByVal bErase As Long) As Long Public Declare PtrSafe Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As LongPtr, ByVal hWnd2 As LongPtr, ByVal lpsz1 As String, ByVal lpsz2 As String) As LongPtr Public Declare PtrSafe Function GetFocus Lib "user32" Alias "GetFocus" () As LongPtr Public Declare PtrSafe Function GetWindow Lib "user32" Alias "GetWindow" (ByVal hwnd As LongPtr, ByVal wCmd As Long) As LongPtr #Else '32 bits Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Public Declare Function InvalidateRect Lib "user32" (ByVal hwnd As Long, lpRect As Long, ByVal bErase As Long) As Long Public Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long Public Declare Function GetFocus Lib "user32" () As Long Public Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long #End If . الآن لنفترض ان لدينا هذه المكتبة كذلك: Public Declare Sub Sleep Lib "kernel32" (ByVal lngMilliSeconds As Long) . نلاحظ في البحث انه لا توجد لدينا اي من كلمات التي ذكرناها في #F اعلاه . اذن نكتب السطر (من برنامجنا ذو 32 بت) نفسه مرتين ، مرة للنواة 64 بت ، ومرة للنواة 32 بت ، فيصبح الكود (الفرق بين السطرين هي كلمة PtrSafe) : #If VBA7 And Win64 Then '64 bits Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal lngMilliSeconds As Long) #Else '32 bits Public Declare Sub Sleep Lib "kernel32" (ByVal lngMilliSeconds As Long) #End If او #If VBA7 And Win64 Then '64 bits Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal lngMilliSeconds As Long) #Else '32 bits Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal lngMilliSeconds As Long) #End If او سطر واحد مستقلا Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal lngMilliSeconds As Long) ------------------------------------------------------------------------------------------------------------------ 2021-11-20 : اخوي @عبدالله المجرب نبهني عند استخدام الاكسس 64بت ، يظهور خطأ في مرفق الرابط: https://www.officena.net/ib/topic/64989-هدية-برنامج-تصدير-بيانات-من-جداولاستعلامات-اكسس-الى-اكسل-،-32بت-و-64بت/ لما نعمل Compile للبرنامج على كمبيوتر به اكسس 64بت ، تظهر هذه الرسالة ، واللي معناها مافي توافق في تعريف المتغير (يعني جزء من سطر الكود تم تعريفه بطريقة ، وجزء آخر من سطر الكود تم تعريفه بطريقة لا تتلائم مع المتغير السابق ، وابسط مثال: متغير تم تعريفه كنص ، ثم تعطي قيمته الى متغير آخر تم تعريفه كرقم) : . من الملاحظة ، نرى انه بما اننا نستخدم اكسس 64بت ، فتعريف المكتبة ShellExecute يكون عن طريق (VB7) ، وتعريفها انها LongPtr ، بينما في الكود ، اعطينا قيمة ShellExecute الى المتغير lRet والذي تم تعريفه على انه Long ، لهذا السبب لا يوجد توافق بين المتغيرين ، وعليه نحصل على الخطأ !! هناك حلين للموضوع: إما ان نعمل if VBA7 then# خاص للمتغير lRet لحالتي 32بت و 64بت ، او نحذف تعريف المتغير lRet من الكود ، ونضعه في الاعلى ، مع تعريف المكتبة ShellExecute ، وهذا ما قمت به: . وبعد عمل Comiple مرة اخرى ، نحصل على خطأ مشابه للخطأ اعلاه ، ولكن لمكتبة اخرى : . والحل ، كما عملته للمشكلة السابقة ، فيصبح الكود : . وبعد عمل Compile مرة اخرى ، نجد ان الكود يعمل بدون اخطاء 🙂 ------------------------------------------------------------------------------------------------------------------ 2021-11-23: اخوي @ابا جودى طلب مساعدة في برنامجه ، ليعمل على النواتين: https://www.officena.net/ib/topic/111963-سؤال-بخصوص-التعديل-على-قاعدة-بيانات-لتعمل-على-32-64-bit/ والشيء الجديد فيه والذي لم يتم شرحه سابقا هو: المتغير hIcon (باللون الاصفر) ، تعريفه يعتمد على النواة : . وعندنا هذه الدالة fSetIcon ومعرفها Long ، وفي الدالة ، نعطي نتيجة hIcon الى fSetIcon . المشكلة لما نواة البرنامج تكون 64بت ، فحينها يكون معرف الحقل hIcon هو LongPtr ، بينما الدالة fSetIcon لا يزال معرفها Long ، وهنا نحصل على رسالة خطأ بعدم تطابق معرف الحقلين !! والطريقة التي استعملتها هي: استعمال الدالة مرتين ، مرة بمعرف LongPtr اذا كانت النواة 64بت ، ومرة بمعرف Long اذا لم تكن النواة 64بت : . وعلشان نعرف ان البرنامج تقبل هذا التغيير ، يجب ان نعمل Compile 🙂 جعفر Win32API_PtrSafe (2).zip
    1 point
×
×
  • اضف...

Important Information