programing

Excel에서 사용자 정의 문서 속성에 문서 속성을 추가하는 방법은 무엇입니까?

starjava 2023. 8. 20. 10:09
반응형

Excel에서 사용자 정의 문서 속성에 문서 속성을 추가하는 방법은 무엇입니까?

사용자 지정 문서 속성 컬렉션에 문서 속성을 추가하려고 합니다.코드는 다음과 같습니다.

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

이를 실행하면 다음 오류가 발생합니다.

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

로 실행해 보았습니다..Add보이드 함수로서, 다음과 같이:

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

이것은 저에게 같은 오류를 주었습니다.사용자 정의 문서 속성을 추가하려면 어떻게 해야 합니까?

다음 루틴을 사용해 보십시오.

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

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

편집: 사용

5년이 지난 지금도 공식 문서는 엉망입니다몇 가지 사용 예를 추가하기로 했습니다.

사용자 지정 속성 설정

Sub test_setProperties()
    updateCustomDocumentProperty "my_API_Token", "AbCd1234", msoPropertyTypeString
    updateCustomDocumentProperty "my_API_Token_Expiry", #1/31/2019#, msoPropertyTypeDate
End Sub

사용자 지정 속성 가져오기

Sub test_getProperties()
    MsgBox ActiveWorkbook.CustomDocumentProperties("my_API_Token") & vbLf _
        & ActiveWorkbook.CustomDocumentProperties("my_API_Token_Expiry")
End Sub

모든 사용자 지정 속성 나열

Sub listCustomProps()
    Dim prop As DocumentProperty
    For Each prop In ActiveWorkbook.CustomDocumentProperties
        Debug.Print prop.Name & " = " & prop.Value & " (" & Choose(prop.Type, _
            "msoPropertyTypeNumber", "msoPropertyTypeBoolean", "msoPropertyTypeDate", _
            "msoPropertyTypeString", "msoPropertyTypeFloat") & ")"
    Next prop
End Sub

사용자 지정 속성 삭제

Sub deleteCustomProps()
    ActiveWorkbook.CustomDocumentProperties("my_API_Token").Delete
    ActiveWorkbook.CustomDocumentProperties("my_API_Token_Expiry").Delete
End Sub

저는 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 vbInteger, vbLong
            getMsoDocProperty = Office.MsoDocProperties.msoPropertyTypeNumber
        Case vbBoolean
            getMsoDocProperty = Office.MsoDocProperties.msoPropertyTypeBoolean
        Case vbDate
            getMsoDocProperty = Office.MsoDocProperties.msoPropertyTypeDate
        Case vbString, vbByte
            getMsoDocProperty = Office.MsoDocProperties.msoPropertyTypeString
        Case vbSingle, vbDouble, vbCurrency,vbDecimal
            getMsoDocProperty = Office.MsoDocProperties.msoPropertyTypeFloat
        Case Else
            getMsoDocProperty = 0
    End Select
End Function

Public Sub subUpdateCustomDocumentProperty(ByVal doc as object, ByVal strPropertyName As String, _
    ByVal varValue As Variant, Optional ByVal 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
    doc.CustomDocumentProperties(strPropertyName).Value _
        = varValue
    If Err.Number > 0 Then
        doc.CustomDocumentProperties.Add _
            Name:=strPropertyName, _
            LinkToContent:=False, _
            Type:=docType, _
            Value:=varValue
    End If
End Sub

언급URL : https://stackoverflow.com/questions/14863250/how-to-add-a-documentproperty-to-customdocumentproperties-in-excel

반응형