أتمتة العمليات التجارية في Excel أو كيفية إنقاذ فتاة من المعالجة

تعمل صديقتي في عمليات الشراء في شبكة التوزيع. لقد شهدت الشركة مؤخرًا انخفاضًا كبيرًا ، وبالتالي زاد حجم العمل لكل موظف بشكل كبير. لذلك ، كان عليها أن تبقى بانتظام في العمل ، وأحيانا تخرج في أيام السبت. كان لزملائها نفس المشكلة.

صورة

حول القرار الذي سمح لصديقتي بالعودة إلى المنزل في الوقت المحدد ، يمكنك أن تقرأ تحت القص.

علاوة على ذلك ، يمكن أتمتة جزء كبير مما فعلوه: تلقي البيانات من المقدمة ، وملء وثائق التفوق ، وتحديث البيانات في المقدمة ، إلخ.

الشيء الأكثر عقلانية الذي يمكن القيام به في هذا الموقف هو كتابة بيان عمل حول تطوير الوظيفة الضرورية ونقلها إلى المطورين عبر السلطات. ومع ذلك ، فإن الحد أثر على الجميع ، بما في ذلك المطورين. نتيجة لذلك ، لم يكن لديهم موارد كافية لتنفيذ هذه الأتمتة. ولم تخطط الشركة لشراء أنظمة RPA المتخصصة في المستقبل المنظور.

بالإضافة إلى ذلك ، زيادة رصد ما يقوم به الموظفون في العمل والتطبيقات التي يعملون فيها.

بناءً على نتيجة كل هذه الظروف المعاكسة ورغبتي اليائسة في المساعدة ، قررت أن أكتب وظائف لـ Excel في VBA ، وبفضل ذلك سيكون من الممكن أتمتة العمليات الروتينية لصديقيتي وزملائها.

متطلبات المنتج


كنقطة انطلاق ، اخترت المهمة التي أمضتها الفتاة معظم وقتها وفقًا لمشاعرها. كجزء من هذه المهمة ، تحتاج الفتاة إلى:

  • نقل رقم المقالة من ملف excel إلى شريط بحث نظام المكتب الأمامي ؛
  • للحصول على هذه المقالة ، من نتائج البحث ، احصل على الشراء وسعر البيع وعدد من القيم الإضافية ؛
  • معالجة البيانات التي تم جمعها في التفوق لإنشاء سعر المنتج النهائي ؛
  • تحميل الأسعار مرة أخرى إلى النظام.
  • استغرق التفريغ وتحميل البيانات اللاحق يوميًا حوالي 3 ساعات.

بالنظر إلى أن صديقتي لم تكن لديها معرفة برمجية ، كان من الضروري إنشاء أداة ذات واجهة بسيطة ومألوفة في شكل وظائف في التفوق. يجب تعريف تسلسل الإجراءات ببساطة كتسلسل للوظائف. في كلمة واحدة ، قبلة .

بناءً على هذه الحالة ، قمت بتكوين المتطلبات الوظيفية التالية:

  • السيطرة على الماوس (التحرك ، ضغط المفاتيح) لتسليط الضوء على العناصر المقابلة على الشاشة ؛
  • محاكاة ضغط المفاتيح على لوحة المفاتيح لإدخال البيانات ؛
  • نقل البيانات من Excel إلى تطبيقات الطرف الثالث ؛
  • استرداد البيانات من تطبيق في Excel ؛
  • تنفيذ نفس العمليات عند سحب صيغة في Excel.

الماوس والصعوبات الأولى


قبل نقل المؤشر إلى أي مكان ، يجب أن تفهم بالضبط مكان تحريكه. يبدو لي الأكثر ملاءمة في هذه الحالة أن أتذكر ببساطة موضع المؤشر عندما يكون أكثر من عنصر معين. من أجل تذكر الإحداثيات ، استخدمت الدالة GetCursorPos من مكتبة user32.

حسنًا ، حصلنا على الإحداثيات ، والآن سيكون من الجيد أن نتذكرها. حسنًا ، لا يوجد شيء معقد ، حسب اعتقادي ، فقط قم بحساب خلية أو خليتين من الخلية النشطة واكتب الإحداثيين X و Y. ومع ذلك ، لم يعمل ActiveCell.Offset (0 ، 1) .Value = x. لم تتغير القيمة. ونتيجة التنفيذ ، خطأ. بعد التحقق من الافتراضات المختلفة ، اتضح أن تغيير القيمة على الورقة يؤدي إلى إعادة فرز الورقة بأكملها ، وبالتالي الصيغة التي تسبب إعادة فرز الأصوات هذه. للتغلب على هذا التقييد ، بدلاً من الاتصال المباشر من إحدى وظائف بعض الإجراءات ، كان من الضروري استبدال هذه المكالمات بـ "تقييم" ، مما سمح لنا بتحقيق النتيجة المرجوة.

كانت النتيجة هي وظيفة PrintCursorPosition () ، والتي سجلت في خليتين على يمين موضع المؤشر في وقت تنفيذ الوظيفة. كان من الضروري كتابة PrintCursorPosition () في المنطقة لإدخال الصيغ ، وحرك المؤشر واضغط مفتاح الإدخال على لوحة المفاتيح.

لتحريك الماوس ، استخدمت SetCursorPos من نفس مكتبة user32. من أجل استخدام هذه الوظيفة ، كانت بحاجة إلى تمرير قيمة إحداثيات x و y التي تم تخزينها مسبقًا لها كمدخل. باستخدام SetCursorPosition (x، y) ، تمكنت من نقل المؤشر عبر الإحداثيات المخزنة مسبقًا. أول نتيجة واضحة. الصيحة!

لمحاكاة إجراءات الماوس ، استخدمت mouse_event من نفس مكتبة user32. بتمرير أعلام المفاتيح إلى الإدخال ، تمكنت من محاكاة ضغطات المفاتيح المقابلة. في البداية ، خططت لكتابة دالة واحدة MouseButtonPrees (إشارة) ، حيث تمثل العلامة تعيين المفتاح المضغوط ، ولكن بعد العرض التوضيحي الأول ، أدركت الفتاة أنه من الأفضل استبدال مجموعة الوظائف LeftClick () و RightClick () و DoubleClick (). هذا النهج يجعل من الأسهل قراءة الوظيفة الناتجة.

لوحة المفاتيح


في VBA ، هناك عبارة SendKeys التي تنفذ جميع الإجراءات اللازمة. يتم تمرير النص بسهولة إلى الوظيفة بالرجوع إلى الخلية والوفاء دون مشاكل. ومع ذلك ، فإن الضغط على المفاتيح الخاصة (Enter ، Tab ، Alt ، Ctrl ، أسهم لوحة المفاتيح ، وما إلى ذلك) تسبب في الرفض (للضغط عليهم ، كان من الضروري كتابتها بين قوسين مجعدين {ENTER}). لذلك ، بالنسبة للوظائف الأكثر استخدامًا ، كتبت وظائف مثل PressEnter (). لتلك التي نادرا ما تستخدم ، أنا خلقت ورقة الغش في نفس المستند.

تم نقل المعلومات بين النظام و Excel من خلال النسخ إلى المخزن المؤقت ولصقه من المخزن المؤقت. تم إجراء النسخ إلى المخزن المؤقت بشكل أساسي عن طريق محاكاة الضغط على Control + C ، وبعد ذلك تم نقل البيانات من المخزن المؤقت إلى MSForms.DataObject ونقلها إلى خلية محددة.

اختبار والأداء القضايا


بدأت المشاكل على الفور.

تتكون عملية كتابة تسلسل نصي من الإجراءات من العمل على مجموعات صغيرة من الإجراءات ودمجها في مجموعة واحدة. ولكن عند التبديل إلى خلية حرة ، تم حل التسلسل بالكامل على الفور ، وهو أمر مزعج للغاية ، خاصة إذا كان الوقت الذي استغرقته مجموعة الإجراءات يستغرق أكثر من 10 ثوانٍ. لحل هذه المشكلة ، راجعت التواجد في نص الصيغة للخلية النشطة لاسم الوظيفة. لقد ساعد.

بالإضافة إلى ذلك ، أثناء الاختبار ، أضاف وظيفة الانتظار (ثواني) و WaitMS (مللي ثانية) ، من أجل تتبع ما نجح وما لم ينجح. يستند إلى سليب من مكتبة kernel32. الفرق بين WaitS و WaitMS هو أنه في وقت WaitMS يكون بالميللي ثانية ، وفي WaitS بالثواني.

هناك مشكلة أخرى تتمثل في التنفيذ غير المتناسق للوظائف عندما يتم سحبها إلى الخلايا. كان هذا بسبب الحساب غير المتزامن لبرنامج Excel. قام بتوزيع حساب كل خلية على معالجات مختلفة. ونتيجة لذلك ، يتم تنفيذ التسلسل لأول مرة في الخلية الثانية ، ثم في الخامسة ، ثم في الثالثة ، إلخ. علاوة على ذلك ، تم تنفيذ تسلسل أنفسهم من البداية إلى النهاية دون أي مشاكل. للتخلص من هذا السلوك ، قمت بإيقاف تشغيل حسابات متعددة الخيوط في إعدادات Excel (إعدادات Excel -> خيارات متقدمة -> صيغ).

النتائج


بعد شرح كيفية التعامل مع كل هذا وتعلم كيفية استخدامه ، أطلق صديقته لأتمتة العمليات في الشركة بطريقة مزرية.

بفضل هذه الأتمتة ، اتضح أنه يقلل الوقت من ثلاث ساعات إلى 30 دقيقة. في الوقت نفسه ، أتاحت الأتمتة تغيير النهج إلى حد ما في عملية تحميل وتنزيل البيانات. يحدث التفريغ الآن أثناء مغادرة صديقتي لتناول طعام الغداء والتحميل في الليل. وبالتالي ، يمكننا القول إن الحمل انخفض بمقدار نصف يوم العمل تقريبًا ، مما سمح لصديقتي بالعودة إلى المنزل في الوقت المحدد ، ويمكننا القيام بأشياء أكثر إثارة للاهتمام من التشغيل الآلي.

Source: https://habr.com/ru/post/ar447346/


All Articles