اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

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

أوفيسنا
  • Posts

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

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

  • Days Won

    13

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

  1. أين هي البيانات حتى أصمم لك التقرير؟! على كل حال أخذت العينة المرفقة من أحد مشاركاتك وكررت فيها البيانات حتي أصل إلى العدد المطلوب! إليك النتيجة السجل.accdb
  2. في الحقيقة أنت محكوم بعرض وطول الورق الذي ستطبع عليه البيانات! على سبيل المثال لكي تطبع تقريرا مكون من عامودين على ورقة A4 فأنت بحاجة إلى بيانات يمكن عرضها في مساحة أقصى أبعادها (10سم عرضاً) لكل عامود! وخلاف ذلك لن تستطيع إظهار البيانات بشكل صحيح!
  3. وعليكم السلام أقترح عليك أن ترفق مثالا حتى يتمكن الجميع من فهم ما تريد
  4. أهلا @طاهر الوليدي هذه هي الطريقة المطلوب اظهار قرب حقل ميلادي تقويم ميلاد وقرب حقل الهجري تقويم هجري .mdb
  5. نعم يمكن بشرط أن تكون المتصفح هو محرك ChromeDriver، بمعنى أنه يقلع من خلال أكسس.. تعليمى.mdb
  6. إداة Selenium تختلف كليا عن (HTML Document Object Model (DOM، وبالتالي من المهم الرجوع إلى موقع المشروع لمعرفة كيفية استخدام الأداة، ومن المهم أيضاً أن نعلم أن لغة VBA لم تكن ضمن المشروع بالأساس، لكن أحد المطورين قام بإلحاقها في مشروع مستقل.. كما تجدر الإشارة أن ملجد Selenium يحتوي على ملف للمساعدة باسم (Selenium.chm). انقر عليه نقراً مزدوجاً وخذ لمحة عن كيفية استخدام الأدة في بيئة VBA.. ستلاحظ أن نموذج Selenium يتأخر في الظهور عند فتحه وذلك لأني جعلت المتصفح يقلع مع النموذج في وضع التخفي.. ولن يظهر النموذج حتى ينتهي المتصفح من تحميل الصفحة.. تعليمى.mdb
  7. حسناً لنرى إذا كانت متطلبات العمل على سلينيوم مكتملة لديك.. يتطلب سلينيوم تحميل وتثبيت المحرك (ChromeDriver) التابع للمتصفح Chrome، ولإنهاء هذه المهمة يجب أولا التأكد من أن نسخة المحركة مطابقة لنسخة المتصفح.. كيف انقر على النقاط الثلاث في متصفح كروم ثم انقر المساعدة ثم نبذة عن قوقل كروم (واجهةالعمل عندي إنجليزية والأسماء التي أضعها بالعربي تقريبية) إذهب إلى موقع سلنيوم (تثبيت المحركات) Web Browser/Getting Started/Instal Drivers، ثم من الجدول انقر فوق Downloads المحاذية Google Chrome.. اتبع الخطوات ثم اختر النسخة المطابقة لمتصفك مع التأكد من النواة الملائمة.. قم بفك الملف المضغوط وانسخ الملف التنفيذي chromedriver.exe وضعه في المجلد SeleniumBasic.. هذا المجلد ضمن المجلد C:\Users\[UserName]\AppData\Local أرجو منك إنهاء هذه الخطوات حتى نبدأ باستخدام Selenium مع Access
  8. إذا كنت لاتزال تستخدم متصفح Internet Explorer فالأمر سهل، لكن إذا كان غير ذلك فأن بحاجة إلى الأداة Selenium Basic VBA، ولمعرفة استخدامة اذهب إلى Selenium WebDrive
  9. لو فتحت الموقع في أحد المتصفحات لديك وقمت بالنقر بالزر اليمين للفارة على العدد 8.24 وأخترت فحص Inspect من القائمة سوف تظهر لك وسوم هتشمل التي تتحتوي عليها الصفحة مع التأشير على الوسم الذي يحتوي على عدد النقاط. كما في الصورة الوسم الذي يحتوي على النقاط هو الوسم الثاني ضمن أبناء الوسم الأب المعرف ضمن spaceit_pad، وبما أن الأبناء هي عبارة عن مصفوفة، وترتيب المصفوفة يبدأ بالرقم صفر فسوف يكون رقم الوسم الذي يحتوي على النقاط هو (1) وبناء عليه سيكون تعديل الشفرة على النحو التالي Case "score" Me.Score = t(1) '' السابقة '---------------------------------------------------- Case "score" Me.Score = el.Children(1).innerText '' التعديل
  10. لمعالجة هذه السبب أنت بين خيارين. الأول. أن تلغي الإشارة إلى الغرض IHTMLElement الثاني أن تضيف إلى قائمة المراجع المكتبة التي ينتمي إليها الغرض كما في الصورة ملاحظة: المكتبة باللون الأصفر يأشر عليها تلقائيا عند إضافة عنصر التحكم WebBrowser، لكنها تلغى عند حدوث القص واللصق.. ولذا يبغي أن تتأكد من أنه مؤشر عليها.. هتان المكتبتان من المكتبات الأساسية في ويندوز ويندر جدا أن لا تكون متوفرة، وبناءً عليه يجب عدم القلق بشأن توفرها عند نقل التطبيق إلى جهاز العميل.. تعليمى.mdb
  11. أهلا @محمد احمد لطفى لا يخفى أن مستندات هتشمل HTML مبنية على وسوم مترابطة هرمياً، وأن لهذه الوسوم رتب في هذا الهرم، وهي الآباء والأبناء والإخوة، وهذه الرتب قد تتداخل في بعضها البعض.. والمقصود من هذه التقدمة هو تسهيل الوصول إلى البييانات المضمنة داخل هذه الوسوم بطريق سهلة ومبسطة.. يمكن الوصول إلى البيانات بأحد الخصائص التالية Dim Tag,Class,Name,Id With WebBrowser1.Document ' أكثر هذه الخصائص تحديد Id=.getElementById("...") ' أقلها اتساعا وأقربها تحديدا For Each Name in .getElementsByName("...") Name Next ' تتوسع أفقيا أي في رتبة الأخوة For Each Class in .getElementsByClassName("...") Class Next ' أكثرها إنتشار For Each Tag in .getElementsByTagName("...") Tag Next end with أغلب هذه الخصائص تعيد مصفوفة غرضية ماعدا الأولى منها... نأتي على تطبق هذا على قاعدة البيانات Private Sub أمر11_Click() Dim el As IHTMLElement Dim t For Each el In WD.getElementsByClassName("spaceit_pad") t = Split(el.innerText, ":") Select Case t(0) Case "score" Me.Score = t(1) Case "rating" Me.Rating = t(1) Case "genres" Me.Genres = t(1) Case "theme" Me.Theme = t(1) End Select Next End Sub أرجو أن يكون بإمكانكم اكتشاف طريقة معالجة البيانات..
  12. في الحقيقة نحن لسنا بحاجة لا إلى FormatNumber ولا إلى Round.. يطلب منك أكسس فقط أن تغير المنازل العشرية بعد الفاصلة إلى صفر في الحقل المطلوب
  13. وعليكم السلام ورحمة الله وبركاته أهلا @عبد الله قدور استخدم التابع FormatNumber بهذه الطريقة FromatNumber(15.5,0)
  14. من هذه المصورة يتضح أن صفحة الويب ضمن خادم الويب (Web Server) وليست صفحة ويب منفردة! كما كنت أتوقع! وبناء عليه أصبح الوضع معقدا بعض الشيء لأنه ينقصني الآن معرفة كيف يتخاطب الخادم مع صفحة الويب، وكيف يرسل ويتسقبل البيانات.. وأياً كان البروتوكول المستخدم ؛ يمكن اختبار أرسال البيانات بالطريقة التالية.. التأكد من أن صندوق الإختيار ضمن الوسم <Form> (النموذج في صفحة الويب) التأكد من وجود معرف للنموذج يمكن استخدامه للوصول للنموذج، أو يمكن استخدام رقمه التأكد من أن البيانات ترسل عن طريق نموذج الويب وطريق عرض مصدر الصفحة أو عن طريق أدوات المطورين بعد ذلك يمكن استخدام الشفرة التالية Sub PostCheckBox() Dim I As Integer Dim TC_ID With WD.querySelectorAll("table tr") For I = 1 To .length - 1 Dim WC_ID WC_ID = Val(.Item(I).Children(1).innerText) TC_ID = DLookup("View", "Customers Accounts", "Account_No=" & WC_ID) If TC_ID Then .Item(I).setAttribute "class", "checked" .Item(I).Children(4).Children(0).Checked = True .Item(I).Style.background = "skyblue" WD.Forms(0).submit '//يرسل البيانات للخادم بعد كل اختيار Else .Item(I).removeAttribute "class" .Item(I).Children(4).Children(0).Checked = False .Item(I).Style.background = "" End If Next End With End Sub إذا أرسل البيانات للخادم وتم قبولها فسوف يقوم بإعادة إرسال البيانات إلى الصفحة وسوف تظهر صناديق الاختيار وقد تم التأشير عليها، والعكس إذا لم تنجح العملية.. هذا ما أستطيع تقديمه لك على ضوء المعلومات التي قدمتها لدعم طلبك.. TestCheckBoxOnHtml.zip
  15. لقد رجعت إلى أول المشاركة لأتفهم سوالك بعناية وكان ما وجدته هذا الاقتباس أيش يعني أرسال القيمة بدلا عن معرفتها؟! ومن أين ترسل؟ وهذه العبارة أيضا تحتاج إلى توضيح.. في ظني أنك تريد حفظ البيانات على صفحة بعد تحديد السجلات المراجعة.. إذا كان هذا ماتريد الشفرة التالية تقوم بالعمل Private Sub cmdSavePage_Click() Dim FileName FileName = SaveAs() If IsEmpty(FileName) Then Exit Sub Open FileName For Output As #1 Print #1, LCase(WD.documentElement.outerHTML) Close #1 End Sub مكان هذه الشفرة تحت زر الأمر cmdSavePage انظر المرفق TestCheckBoxOnHtml.accdb
  16. لو أعطيتني فكرة عن كيف وصلت البيانات إلى صفحة الويب وإلى أين ستذهب بعدها.. كان الجواب على قدر السؤال ولو زدتنا زدناك.. لكنك لا تزال تدور حول نقطة واحدة!
  17. أهلا بك @أبو عبدالله الحلوانى هذا شيء جيد ومبهج صراحة أن تقوم بمعالجة الأخطاء بنفسك! قم فقط باستبدال childNodes بــ children أجريت بعض التعديل على الشفرة وجعلتها تقوم بتحديث جدول البيانات TestCheckBoxOnHtml.accdb
  18. للتخلص من استخدام مكتبة الأوفس ومشكلة عدم التوافق يمكن عمل التالي -- الإعلان عن متغير غرضي عام (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
  19. كيف تحس أن اللقب ثقيلا عليك وأنت من أصحاب المعلقات! عن نفسي كنت أظنك خبيراً فعلا!
  20. أعتذر إليك أستاذ أبو خليل لأني لم استطع أن أجد طريقة سهلة يمكن لمبرمج أكسس التعامل معها في تطبيق مفهوم Google Drive API
  21. أهلا بكم.. أعتقد أنه يمكن ذلك عن طريق استخدام Google Drive API أحاول أجهز مثال على أكسس وأشرح طريقته إن شاء الله
  22. جعلت عملية الاختيار تتم عن طريق مربع التحرير والسرد في صفحة الويب.. إذا أردت أن أجعل الاختيار يتم عن طريق أزرار الاختيار في النموذج فهذا أسهل للفهم.. لكني أفضل أن يكون التعامل مع صفحة البيانات مباشرة! طريقة عمل التبديل بين المخططات تمرير قيمة نصية باسم نوع المخطط إلى المعامل 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
  23. المسألة متعلقة بخصائص RichBox كونها محدودة؛ حتى مع الألون!
  24. للتخلص من هذه المشكلة؛ اكتب اسم الون (Blue, red, Green, Orange, Black) بدلا من رقمه وهذه قائمة بأسماء الألون مجمعة حسب اللون.. أسماء الألوان من W3Schools
×
×
  • اضف...

Important Information