عرض قيمة خاصية المستندات المخصصة في خلية ورقة عمل Excel 2007

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

سؤال

لقد قمت بإنشاء برنامج يقوم بإنشاء وملء خاصية مستندات مخصصة في ملف مصنف Excel 2007. ومع ذلك، لم أتمكن من إظهار قيمة هذه الخاصية في خلية ورقة عمل. في Word 2007، يمكنك فقط تحديد "إدراج -> أجزاء سريعة -> الحقل ..." واستخدم حقل DocProperty لإظهار قيمة الحقل المخصص في مستند. ومع ذلك، لم أجد وظيفة مماثلة في Excel 2007.

هل يعرف أي شخص كيفية عرض قيمة خاصية المستندات المخصصة في خلية ورقة عمل Excel؟ أفضل حل مشابه لحل Word 2007 المذكور أعلاه. أنا بدلا من عدم استخدام رمز ماكرو / مخصص لهذا.

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

المحلول

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

Function DocumentProperty(Property As String)
  Application.Volatile
  On Error GoTo NoDocumentPropertyDefined
  DocumentProperty = ActiveWorkbook.BuiltinDocumentProperties(Property)
  Exit Function
NoDocumentPropertyDefined:
  DocumentProperty = CVErr(xlErrValue)
End Function

دعوة إلى Application.Volatile يفرض على الخلية التي سيتم تحديثها في كل إعادة حساب ضمان أنها ستلتقط التغييرات في خصائص المستندات.

نصائح أخرى

سيكون ما يعادل Excel في الصيغة ولا أعتقد أنه من الممكن استخراج خاصية المستند دون رمز. لا توجد وظائف أصلية لاختيار خصائص المستندات. (يمكن أن يكون البديل لتخزين المعلومات في أسماء مصنف / أسماء ورقة العمل، والتي يمكن الوصول إليها عبر الصيغة)

في VBA، عليك إنشاء وظيفة مثل:

Public Function CustomProperty(ByVal prop As String)

    CustomProperty = ActiveWorkbook.CustomDocumentProperties(prop)

End Function

ثم اتصل به في صيغة مع =CustomProperties("PropertyName").

هناك نقطة خفية أخرى. تبعيات الصيغة تتعلق فقط بالخلايا الأخرى؛ تعتمد هذه الصيغة على خاصية مخصصة. إذا قمت بتحديث خاصية مخصصة صيغة موجودة مسبقا تتضمن CustomProperty لن يتم تحديثها تلقائيا. يجب إعادة تقييم الخلية يدويا أو المصنف بأكمله مجبر من خلال Recalc. ستكون أفضل فرصة لجعل الوظيفة المتقلبة، مما يعني أن الصيغة ستكون recalc'd على كل تغيير خلية - ولكن هذا لا يزال يعني أنك تحصل على تحديث فقط إذا تم تغيير خلية.

حدد الخلية التي تريد استخراجها إعادة تسمية الخلية إلى بعضها مفيدة. من "B1" إلى "project_number". افتح "خصائص مسبقة" انقر فوق علامة التبويب "مخصص". أدخل اسما للعقار الجديد. انقر فوق "رابط للمحتوى" تحديد اسم الخلية من قائمة سحب "القيمة".

أتمنى أن أغتنم Cerdit لكنني وجدت الإجابة عبر الإنترنت:http://pdmadmin.com/03/03/displaying-custom-property-values-in-excel-using-a-lamed-range/

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

أعلم أنك تريد تجنب ذلك، ولكن إذا كنت ترغب في استخدام قيمة العقار في صيغة، فسيتعين عليك ذلك إنشاء وظيفة ورقة عمل مخصصة لنفعل ذلك.

لقد واجهت نفس القضايا الأخرى. لذلك سأحاول تغطية شمولية كيف تناولت ذلك.

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

=yourPropertyGettingFunctionName(PropertyName)

اسم الملكية يجري سلسلة تشير إلى اسم الممتلكات المخصصة / المدمجة التي تريد عرضها في الخلية.

يمكن كتابة الوظيفة (كما اقترح سابقا) على النحو التالي:

Public Function StdProp(ByVal sPropName As String) As String
    Application.Volatile
    StdProp = ActiveWorkbook.BuiltinDocumentProperties(sPropName).Value
End Function

للحصول على خاصية مدمجة، أو باسم:

Public Function UsrProp(ByVal sPropName As String) As String
    Application.Volatile
    On Error GoTo UndefinedProp
    UsrProp = ActiveWorkbook.CustomDocumentProperties(sPropName)
    GoTo Exit
UndefinedProp:
    UsrProp  = "n/a"
Exit:
End Function

كما ذكرنا بالفعل، بما في ذلك التطبيق. سوف يسمح بتحديث محتويات خلية شبه تلقائية.

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

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

لذلك قررت استخدام كل شيء في متناول اليد للقيام بكل ما أحتاج إليه وتجنبه، في نفس الوقت، تأثير التحديث الذاتي هذا لم أكن أرغب في ذلك.

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

Private Function RangeAssign(sRange As String, sValue As String) As Integer
Dim rDest As Range
    If RangeCheck(sRange) Then
        Set rDest = Range(sRange)
    Else
        Set rDest = Application.InputBox(sMsg + vbCrLf + vbCrLf + _
            "Please, select a cell to get" + vbCrLf + _
            "the name " + sRange + " assigned", sCopyRight, Type:=8)
        rDest.Name = sRange
    End If

    rDest.Cells(1, 1).NumberFormat = "@"
    rDest.Cells(1, 1).Value = sValue

    RangeAssign = True

End Function

يسمح باختيار مناسب من الخلية الوجهة. عند تعيين القيم إلى خاصية (دعونا نقول "المؤلف"، والتي تحدث أن تكون مدمجة واحدة)، أقوم أيضا بتحديث القيمة المخزنة في النطاق المسمى، ويمكنك الكتابة في خلية:

=Author

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

كل هذا لم يحدث بين عشية وضحاها. آمل أن يكون الأمر كذلك.

لقد استخدمت هذا لاستخراج خصائص SharePoint (بناء على إجابة مارتن):

Public Function DocumentProperty(Property As String)
    Application.Volatile
    On Error GoTo NoDocumentPropertyDefined

    DocumentProperty = ActiveWorkbook.ContentTypeProperties(Property).Value
Exit Function

NoDocumentPropertyDefined:
    DocumentProperty = CVErr(xlErrValue)
End Function
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top