ممكن معرفة المصنف الذي اتصل به وظيفة في الوظيفة الإضافية Excel (XLA)

StackOverflow https://stackoverflow.com/questions/4901148

سؤال

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

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

التطبيق. بدا المتصل كحل ممكن ، ولكن يبدو أن هذا يعمل فقط عندما يتم استدعاء الوظيفة من خلية ، وليس من VBA.

هل ما أحاول فعله مستحيل؟

تحديث

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

هل كانت مفيدة؟

المحلول

حسنا، لذلك بعد قراءة السؤال بشكل صحيح سأحاول مرة أخرى ...

لذلك، لتوضيح المشكلة:

تريد روتين مكتوب في Addin، عندما يتم استدعاء من VBA في مصنف آخر أن يعمل (من بين أشياء أخرى) يحتوي المصنف الذي يحتوي على VBA الذي جعل المكالمة، دون الحاجة إلى اجتياز هذه المعلومات بشكل صريح.

كما ذكر أن هذا غير ممكن (هذا سؤال مماثل للوصول إلى مكدس المكالمات من التعليمات البرمجية: شيء على معرفتي غير ممكنة)

ومع ذلك يمكنك الحصول على ما تريد تقريبا مثل هذا

تعلن وظيفة السجل الخاصة بك مثل هذا: giveacodicetagpre.

ثم أينما استدعاء الاستخدام الفرعي giveacodicetagpre.

ليس جيدا تماما كما يمر أي شيء، ولكن على الأقل دائما نفس الشيء

نصائح أخرى

للحصول على اسم مصنف الاتصال ، استخدم Genacodicetagpre

يعرض Application.Caller معلومات حول كيفية استدعاء Visual Basic.إذا تم الاستدعاء من دالة مخصصة تم إدخالها في خلية واحدة ، فسيتم إرجاع كائن نطاق يحدد تلك الخلية

بعد الحصول على مرجع للخلية ، يمنحك .Worksheet.Parent.Name اسم المصنف

لاحظ أن Application.Caller سيعيد أشياء أخرى بناءً على كيفية استدعاء وظيفتك (راجع تعليمات VBA للحصول على التفاصيل)

في دالة الوظيفة الإضافية التي تم استدعاؤها بواسطة استدعاء دالة مصفوفة ورقة عمل Excel ، أجد أن "Application.Caller.Parent.name" يعطي اسم الورقة (اسم علامة التبويب ، وليس رقم الورقة).

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

للحصول على دفتر العمل الذي استخدمته: Genacodicetagpre

يجب أن يعمل هذا إذا كانت وظيفتك في خلية.

فات أوان المشاركة الأصلية ، ولكن قد تساعد الآخرين!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top