2013-02-13 14 views
7

मैं कस्टम डॉक्यूमेंटप्रॉपर्टीज संग्रह में एक दस्तावेज़प्रोपर्टी जोड़ने की कोशिश कर रहा हूं। कोड इस प्रकार है:Excel में CustomDocumentProperties में दस्तावेज़प्रोपर्टी कैसे जोड़ें?

Run-time error '5': 
Invalid procedure call or argument 

मैं एक शून्य समारोह के रूप में .Add साथ इसे चलाने की कोशिश की, तो जैसे:

docprops.Add Name:="test", LinkToContent:=False, Value:="xyz" 

यह मुझे दिया

Sub testcustdocprop() 
Dim docprops As DocumentProperties 
Dim docprop As DocumentProperty 

Set docprops = ThisWorkbook.CustomDocumentProperties 
Set docprop = docprops.Add(Name:="test", LinkToContent:=False, Value:="xyz") 

End Sub 

यह मेरे निम्नलिखित त्रुटि देता है चल रहा है एक ही त्रुटि मैं एक कस्टम दस्तावेज़ संपत्ति कैसे जोड़ूं?

+2

चिप पियर्सन का एक उपयोगी सेट लिखा है डाउनलोड करने योग्य कोड [यहां] (http://www.cpearson.com/excel/docprop.aspx) के रूप में उपलब्ध दस्तावेज़ गुणों को प्राप्त करने और सेट करने के लिए कार्य। – chuff

उत्तर

8

इस दिनचर्या का प्रयास करें:

Public Sub subUpdateCustomDocumentProperty(strPropertyName As String, _ 
    varValue As Variant, docType As Office.MsoDocProperties) 

    On Error Resume Next 
    Wb.CustomDocumentProperties(strPropertyName).Value _ 
     = varValue 
    If Err.Number > 0 Then 
     Wb.CustomDocumentProperties.Add _ 
      Name:=strPropertyName, _ 
      LinkToContent:=False, _ 
      Type:=docType, _ 
      Value:=varValue 
    End If 
End Sub 
+1

मुझे लगता है - मुझे 'टाइप' तर्क गुम था। इंटेलिजेंस ने इसे वैकल्पिक के रूप में दिखाया, इसलिए मुझे लगता है कि यह संस्करण के लिए डिफ़ॉल्ट होगा। धन्यवाद! – sigil

+3

@ सिगिल न केवल इंटेलिजेंस इसे वैकल्पिक के रूप में दिखाता है, यह भी [वैकल्पिक के रूप में प्रलेखित] है (http://office.microsoft.com/en-au/excel-help/HV080558571.aspx)। बाहर निकलता है यह नहीं है। यह कभी-कभी होता है। – GSerg

2

मैं लगा doctype तर्क में पारित करने के लिए बिना मैं काम करने के लिए 2013 से ऊपर जवाब का विस्तार करना चाहिए:

Private Function getMsoDocProperty(v As Variant) As Integer 
    'VB TYPES: 
     'vbEmpty    0  Empty (uninitialized) 
     'vbNull     1  Null (no valid data) 
     'vbInteger    2  Integer 
     'vbLong     3  Long integer 
     'vbSingle    4  Single-precision floating-point number 
     'vbDouble    5  Double-precision floating-point number 
     'vbCurrency    6  Currency value 
     'vbDate     7  Date value 
     'vbString    8  String 
     'vbObject    9  Object 
     'vbError    10  Error value 
     'vbBoolean    11  Boolean value 
     'vbVariant    12  Variant (used only with arrays of variants) 
     'vbDataObject   13  A data access object 
     'vbDecimal    14  Decimal value 
     'vbByte     17  Byte value 
     'vbUserDefinedType  36  Variants that contain user-defined types 
     'vbArray    8192 Array 

    'OFFICE.MSODOCPROPERTIES.TYPES 
     'msoPropertyTypeNumber 1  Integer value. 
     'msoPropertyTypeBoolean 2  Boolean value. 
     'msoPropertyTypeDate 3  Date value. 
     'msoPropertyTypeString 4  String value. 
     'msoPropertyTypeFloat 5  Floating point value. 

    Select Case VarType(v) 
     Case 2, 3 
      getMsoDocProperty = Office.MsoDocProperties.msoPropertyTypeNumber 
     Case 11 
      getMsoDocProperty = Office.MsoDocProperties.msoPropertyTypeBoolean 
     Case 7 
      getMsoDocProperty = Office.MsoDocProperties.msoPropertyTypeDate 
     Case 8, 17 
      getMsoDocProperty = Office.MsoDocProperties.msoPropertyTypeString 
     Case 4 To 6, 14 
      getMsoDocProperty = Office.MsoDocProperties.msoPropertyTypeFloat 
     Case Else 
      getMsoDocProperty = 0 
    End Select 
End Function 

Public Sub subUpdateCustomDocumentProperty(strPropertyName As String, _ 
    varValue As Variant, Optional docType As Office.MsoDocProperties = 0) 

    If docType = 0 Then docType = getMsoDocProperty(varValue) 
    If docType = 0 Then 
     MsgBox "An error occurred in ""subUpdateCustomDocumentProperty"" routine", vbCritical 
     Exit Sub 
    End If 

    On Error Resume Next 
    Wb.CustomDocumentProperties(strPropertyName).Value _ 
     = varValue 
    If Err.Number > 0 Then 
     Wb.CustomDocumentProperties.Add _ 
      Name:=strPropertyName, _ 
      LinkToContent:=False, _ 
      Type:=docType, _ 
      Value:=varValue 
    End If 
End Sub 
संबंधित मुद्दे