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

أبو إبراهيم الغامدي

أوفيسنا
  • Posts

    685
  • تاريخ الانضمام

  • تاريخ اخر زياره

  • Days Won

    13

كل منشورات العضو أبو إبراهيم الغامدي

  1. للتخلص من استخدام مكتبة الأوفس ومشكلة عدم التوافق يمكن عمل التالي -- الإعلان عن متغير غرضي عام (Object) بدلا من التخصيص لشريط الأدوات أو قائمة الأدوت (CommandBar, CommandBarControl). -- عمل قائمة دلالية بأرقم خيارات موقع الأدوات أو استخدام الرقم مباشرة.. Public Enum MsoBarPosition msoBarBottom = 3 '..Command bar is docked at the bottom of the application window. msoBarFloating = 4 '..Command bar floats on top of the application window. msoBarLeft = 0 '..Command bar is docked on the left side of the application window. msoBarMenuBar = 6 '..Command bar will be a menu bar (Macintosh only). msoBarPopup = 5 '..Command bar will be a shortcut menu. msoBarRight = 2 '..Command bar is docked on the right side of the application window. msoBarTop = 1 '..Command bar is docked at the top of the application window. End Enum '--- يكون الأعلان بهذه الطريقة Sub MyMenu2() Dim Mnu As Object, Itm As Object Set Mnu = CommandBars.Add("", MsoBarPopUp, , True) Set Itm = Mnu.Controls.Add: Itm.Caption = "Export To PDF": Itm.OnAction = "amr3" Set Itm = Mnu.Controls.Add: Itm.Caption = "Export To Excel": Itm.OnAction = "amr4" Mnu.ShowPopup End Sub
  2. كيف تحس أن اللقب ثقيلا عليك وأنت من أصحاب المعلقات! عن نفسي كنت أظنك خبيراً فعلا!
  3. أعتذر إليك أستاذ أبو خليل لأني لم استطع أن أجد طريقة سهلة يمكن لمبرمج أكسس التعامل معها في تطبيق مفهوم Google Drive API
  4. أهلا بكم.. أعتقد أنه يمكن ذلك عن طريق استخدام Google Drive API أحاول أجهز مثال على أكسس وأشرح طريقته إن شاء الله
  5. جعلت عملية الاختيار تتم عن طريق مربع التحرير والسرد في صفحة الويب.. إذا أردت أن أجعل الاختيار يتم عن طريق أزرار الاختيار في النموذج فهذا أسهل للفهم.. لكني أفضل أن يكون التعامل مع صفحة البيانات مباشرة! طريقة عمل التبديل بين المخططات تمرير قيمة نصية باسم نوع المخطط إلى المعامل ChartType ضمن الإجراء CHARTS(ChartLabels, ChartData, ChartType) Public Sub CHARTS(ChartLabels, ChartData, CharType) Dim J As String ' ------- All these codes implemented in Web browser document '------- Chart container J = J & "var ctx=document.getElementById('chart-bar').getContext('2d');" '------- Chart Type J = J & "var myChart=new Chart(ctx,{type:'" & CharType & "'," '------- Chart Data J = J & "data:{labels: [" & ChartLabels & "]," J = J & "datasets: [{label: 'Count Of Transaction Type',data: [" & ChartData & "]," '------- Styling Chart components J = J & "backgroundColor:" J = J & "['rgba(255, 99, 132, 0.2)','rgba(54, 162, 235, 0.2)','rgba(255, 206, 86, 0.2)'," J = J & "'rgba(75, 192, 192, 0.2)', 'rgba(153, 102, 255, 0.2)','rgba(255, 159, 64, 0.2)']," J = J & "borderColor:" J = J & "['rgba(255,99,132,1)','rgba(54, 162, 235, 1)','rgba(255, 206, 86, 1)'," J = J & "'rgba(75, 192, 192, 1)','rgba(153, 102, 255, 1)','rgba(255, 159, 64, 1)']," J = J & "borderWidth: 1}]}," '------- Chart options added here,refer to ChartJS documentation for more practicing J = J & "options: {responsive:true,scales:{yAxes:[{ticks:{beginAtZero:true}}]}}});" '--- Execute JScript code WF.PW.execScript (J) End Sub الإجراء سابق الذكر لا يقوم بتنفيذ رسم المخطط بذاته ولكن يقوم بتجميع شفرة JavaScript وكتابتها في صفحة الويب وهذه الأخيرة تقوم بتنفيذه.. والأفضل أن نقوم بكتابة شفرة JavaScript في بنية الصفحة ضمن الجدول WebCode ثم نقوم باستدعاءها من داخل أكسس بعد تمرير قيم المعاملات إليها.. وسبب كون الخيار الثاني هو الأفضل .. صعوبة الأول: لأن كتابة شفرة جافا بهذه الطريقه يوقع في الخطأ لا محالة.. .. أما الثاني: سهولة كتابة الشفرة مباشرة، لكونها أسهل شفرة يمكن كتابتها بين الشفرات البرمجية! كما أنه يمكن اقتباسها من الويب ولصقها في الجدول من دون قلق! أقول هذا لأني وقعت في اشكال بسيط واحتجت معه إلى استدعاء أحد إجراءات الشفرة.. ولتوضيح السبب.. حيث أننا قمنا باستعاء الإجراء CHARTS مرتين: مرة عند إقلاع النموذج، والمرة الثانية عند اختيار نوع المخطط؛ فإن شفرة الجافا تقوم بإشاء رقعة الرسم مرتين، مرة للمخطط الأساسي ومرة للرسم المختار من القائمة.. عند المرور بالمؤشر على رقعة الرسم فسوف نرى أن الصفحة تقوم بالتبديل بين الرسمين! وهذا أمر سيء للغاية، ولذا احتجنا إلى انهاء الأول قبل رسم الثاني وذلك باستخدام إجراء متعلق بالمخطط اسمه Destroy قبل اختيار المخطط الجديد Private Sub WebBrowser0_TitleChange(ByVal Text As String) If Not Text Like "about:*" Then JS.mychart.destroy ' انهاء الرسم السابق Call CHARTS(TransData.Labels, TransData.Data, Text) End If End Sub المرفق بعد التعديل.. Web Charts3.zip
  6. المسألة متعلقة بخصائص RichBox كونها محدودة؛ حتى مع الألون!
  7. للتخلص من هذه المشكلة؛ اكتب اسم الون (Blue, red, Green, Orange, Black) بدلا من رقمه وهذه قائمة بأسماء الألون مجمعة حسب اللون.. أسماء الألوان من W3Schools
  8. لا تشغل بالك! كنت حضرت هذه الدالة مع صاحباتها في الوحدة النمطية MTextUtilities لاختزال الشفرة التي تفضلت بها أنت. لكن عندما رجعت إلى زر أمر التلوين وجدك سبقتني لذلك! فأخذت الشفرة من تحت زر الأمر ووضعتها في الوحدة النمطية خاصتك وسميتها بنفس الاسم.. إلا أني غيرت في اسم الدالة خاصتي بزيادة شرطات سفلية في نهايتها حتى لا يحدث تعارض بين الأسماء.. أما عن Public: فجميع الإجراءات والدالات التي تكتب تحت الوحدة النمطية فإنها تأخذ الوضع Public كوضع افتراضي.. وبناءً عليه كتبتها أو لم تكتتبها؛ سيان.. لا تحزن.. فضيفك لم يعتد السمين من الطبخ! ولم يألف سوى الإقط والسمن! وأخشى أن يغص بالسمين...
  9. هذا الكلام موجه لك، ولا أعتقد أن فيه مايشير إلى الاستاذ @Khalf وطالما أني فتحت هذا الباب فسوف أسده بإذن الله.. في المرفق قمت بإجراء بعض التعديلات غير المخلة بما تفضل به الأستاذ @Khalf من الفكرة الرائعة.. وطبقت ما أشار إليه الأستاذ @jjafferr أعلاه.. هذا المرفق هو تطبيق لما سبق أن ذكرت من مقتراحات.. Colorizing (1).accdb
  10. هذه الأيقونة لملف يحمل بيانات نصية بها اسم الكمبيوتر واسم مسئول قاعدة البيات! وليس منها ضرر أبداً.. إذا لم يغلق تلقائيا فلا تحاول حذف هذا الملف أبداً يمكن فتح هذا الملف بإي محرر نصوص لتعرف مابداخله
  11. حتى يكون هذا العمل مثمراً أقترح عليك التالي.. -- ابتعد عن حفظ إجراءات تلوين الحواشي في الجدول لأن هذا سيؤثر على حجم الجدول وبطيء من أداءه! وفي الواقع أن تحتاج إلى الحاشية الملونة فقط عند عرض البيانات.. لحل هذا اللازم أقترح عليك إنشاء استعلام من جدول Book، وتعرف فيه عامودا جديد باسم النص الملون وتربطه بدالة تلوين النص، مع التأكد من تغيير خاصية نوع النص في العامود إلى RichText.. -- قبل هذا أنت بحاجة إلى اختزال دالة تلوين النص في دالة واحدة حتى تتمكن من ربطها في الاستعلام.. يلزمك قبل استخدام هذه الدالة جلب قيم سجل التلوين باستخدام تابع تجميع البيانات Dlookup على الأقل لاختزال دالة تلوين النص نستخدم عبارة شرطية If.. كالتالي Public Function ColorTxtOnePeace(myData As String, ColorTxtStart As String, _ Optional ColorTxtEnd As String = vbNullString, Optional ColorCode As String = 0) If ColorTxtEnd = vbNullString Then myData = Replace(myData, ColorTxtStart, "<b><font color=" & ColorCode & ">" & ColorTxtStart & "</font></b>") Else myData = Replace(myData, ColorTxtStart, "<b><font color=" & ColorCode & ">" & ColorTxtStart) myData = Replace(myData, ColorTxtEnd, ColorTxtEnd & "</font></b>") End If ColorTxtOnePeace = myData End Function -- ما يتعلق باختلاف الحواشي بين الكتب فأقترح استخدام طريقة التحزيم: وهي أن تجعل لكل نوع من الحواشي حزماً من الألون وفقاً للطريقة التي وضعاها صاحب التحشية.. لتحقيق هذا المطلب يلزمك إضافة حقل بيانات جديد إلى جدول التلوين برقم معرف المحشي.. تنشيء جدولا جديدا بحقلين على الأقل: الأول رقم معرف بصاحب التحشية، والثاني باسم صاحب التحشية كمثال.. المعرف رقم: 1 اسم صاحب التحشية: الألباني المعرف رقم: 2 اسم صاحب التحشية: زهير
  12. لا أضاع الله تعبك وجهدك أستاذ @Khalf .. فعلا حل ذكي! مع بساطته وسهولته.. وأشهد أنه أحد نوادرك.. شكراً لك..
  13. أستاذ @jjafferr بل لك وافر الشكر والامتنان على تقبلك مداخلاتي
  14. أهلا بك @أبو عبدالله الحلوانى نعم ممكن.. لكن في مثالك لن تكون القيمة ثابتة! بل مجرد تحديث الصفحة سوف يرجع إلى وضعه الطبيعي، لكون الحقول غير مرتبطة بجدول بيانات.. الشفرة كالتالي -- نقوم بتحديد صفوف الجدول أولا لأن لنا معها أمران: الأول القيمة المطابقة للبحث وهي في الحقل الثاني من الصف، وللوقوف على الحقل المطابق يلزمنا عمل دوارة فحص.. الثاني إذا تطابقت البيانات نحدد الحقل الذي به صندوق الاختيار ومن ثم نعطيه القيمة True Sub IsChecked() Dim I As Integer Dim tr As Object Set tr = WD.querySelectorAll("table tr") For I = 1 To tr.length - 1 '-- check if second cell in the row matched textbox value If tr(I).childNodes(1).innerText = Me.Text0 Then '-- if true: in fifth cell in the row set checked property true tr(I).childNodes(4).childNodes(0).Checked = True End If Next End Sub TestCheckBoxOnHtml.zip
  15. طلبي كان إعادة تجربة الشفرة بعد إدخال البيانات فقط نعم هناك طرق كثيرة لمعالجة البيانات وأبسط بكثير من RegExp إذا كانت البيانات في المقطع الأخير نصية وبها فراغات فإن استخدام Split في الدورة الثانية سوف يحدث خللا في البيانات وبما أن السجل التاريخي ذو بيانات ثابتة إلى المقطع الأخير فيمكن استخدام الطريقة التالية Sub SplitHistory() Dim XHistory Dim L, D, T, V XHistory = Split(Application.ColumnHistory("Products", "List Price", "id=1"), vbCrLf) For Each L In XHistory Debug.Print L D = Mid(L, 12, 10) ' Date T = Mid(L, 23, 8) ' Time V = Mid(L, 34) ' Value Debug.Print D, T, V Debug.Print Next End Sub
  16. أهلا أستاذ جعفر.. المثال مطبق على قاعدة البيانات المرفقة.. أرجو منك تكرماً تعديل بيانات الحقل List Price لسجل معين أكثر من مرة ثم إعادة تجربة الشفرة.. لا تنس تحديد قيمة لمعامل معيار التصفية
  17. كنت أتمنى أن تبدأ مشاركة جديدة حتى أتمكن من مساعدك! هذا مثال آمل أن تتمكن من معرفة آلية عمله وإذا احتجت إلى مزيد من المعلومات أرجو فتح مشاركة جديدة HTML Table.accdb
  18. من الأشياء المتعلقة بهذا الموضوع (تتبع التغيرات).. في الإصدار 2007 البيانات من نوع ( ملاحظات Memo) وما بعده من الإصدارات (النصوص الطويلة Long Text) يوجد خاصية ضمن خواص هذا النوع من البيانات اسمها (Append Only)، عند ضبطها على (On) تقوم بتكديس البيانات السابقة للحقل في الخلفية بالتاريخ والوقت ولإعادة طلب البيانات نستخدم التابع Application.ColumnHistory، يأخذ هذا التابع ثلاثة عوامل: العامل الأول اسم الجدول، والثاني اسم الحقل، والثالث معيار التصفية ويعيد هذا التابع التاريخ والوقت والبيانات المتغيرة للحقل XHistory = Application.ColumnHistory("Products", "List Price", "id=1") [Version: 30/01/2022 09:55:41 ] 20 [Version: 30/01/2022 10:07:44 ] 30 يمكن معالجة البيانات باستخدام الإجراء التالي للحصول على بيانات نظيفة Sub XColHist() Dim RE As New RegExp Dim R, M As Match Dim XHistory As String, P As String '-- Refer to Microsoft Docum for more info XHistory = Application.ColumnHistory("Products", "List Price", "id=1") '-- Data History before processing Debug.Print XHistory Debug.Print '-- Data History after processed by RegExp P = P & "(\d{1,2}/\d{1,2}/\d{2,4})\s" ' date of change P = P & "(\d{1,2}:\d{1,2}:\d{1,2})\s\]\s" ' time of change P = P & "([A-Z0-9]+)" ' value of change '--Refer to regexp docum for more info RE.Pattern = P RE.IgnoreCase = True RE.Global = True '-- For Each M In RE.Execute(XHistory) For Each R In M.SubMatches Debug.Print R; Tab; Next Debug.Print Next End Sub Data History before processing [Version: 30/01/2022 09:55:41 ] 20 [Version: 30/01/2022 10:07:44 ] 30 Data History after processed by RegExp 30/01/2022 09:55:41 20 30/01/2022 10:07:44 30 لمزيد من المعلومات أرجو زيارة الرابط التالي Docs.Microsoft.ColumnHistory AppendOnly.accdb
  19. أهلا بكم.. DLookup (Expr, Domain, Criteria) -- في معامل Expr: يمكن أن نستخدم Last First Count أو أي تابع من توابع أكسس أو تنشئ دالة تقوم بحساب أو فحص شئ ما. -- في معامل Criteria: يمكن أن نمرر إلى الحد الأيسر من المعيار أي من توابع أكسس مثل توابع التاريخ DateDiff أو Format أو Cstr. On Immediate Window ?Dlookup("UCase(First([Last Name]&', '&[First Name]))","Customers","City='Boston'") GRATACOS SOLSONA, ANTONIO ?Dlookup("UCase(Last([Last Name]&', '&[First Name]))","Customers","City='Boston'") AUTIER MICONI, CATHERINE ?Dlookup("'Count Records: '&Count([Last Name]&', '&[First Name])","Customers","City='Boston'") Count Records: 2
  20. أهلا بك أبا جودي في الفريق العمل.. عضو فاعل وصاحب مبادرات غير مسبوقة.. أتمنى لك مزيدا من التألق والعطاء..
  21. كل ما عليك فعله هو تغيير مصدر السجل للنموذج فقط! ملاحظة هامة: هذى المشاركة والتي قبلها مخالفة لأنظمة وقواعد المشاركة.. ولذا إذا كنت ستسمر في طرح الأسئلة رجاءً قم بفتح مشاركة جديدة مع الإشارة إلى هذه الجزئة..
  22. أهلا بك.. كانت مدالخلتي في هذه المشاركة لكون اسمي ذكر فيها! والمرفق كانت لغرض محدد فقط وهو توضيح فكرة تجاوب مكونات HTML.. لتحويل الواجه من اليسار إلى اليمين، كل ماعليك هو تعديل بسيط على التابع WD ليصبح كالتالي Public Property Get WD() As HTMLDocument Set WD = Me.WebBrowser0.Document "WD.Dir = "rtl End Property
  23. أهلا بك.. مع أني اقتبست مشاركتك وأدرجتها في مشاركتي، إلا أنّ تركيزي كان منصب على QR الوفيديو الذي طلبت.. أعتذر عن ذلك.. سوف أقوم بعمل مشاركة بهذا الخصوص في أقرب فرصة إنشاء الله..
  24. أهلا بك.. للأسف لم يسبق لي أن سجلت فيديو من قبل! إذا كان تعلم الويب صعبا عليك فيمكنك استخدام أداة QRCodeAX كبديل.. قم بفك ضغط المرفق التالي في \:C ومن افتح قاعدة البيانات.. تسطيع نقل قاعدة البيانات لكن لا تسطيع نقل الأداة أو تغيير اسم المجلد! إلا إذا كنت تريد تسجيل الأداة من جديد Saudi Invoice With QRCodeAX.zip
×
×
  • اضف...

Important Information