Microsoft Office Forums

Go Back   Microsoft Office Forums > >

 
 
Thread Tools Display Modes
Prev Previous Post   Next Post Next
  #1  
Old 03-16-2021, 10:41 PM
LQuinn LQuinn is offline sort custom document properties Windows 10 sort custom document properties Office 2019
Novice
sort custom document properties
 
Join Date: Jan 2021
Location: Western Australia
Posts: 20
LQuinn is on a distinguished road
Default sort custom document properties


where i work there are a number of custom document properties in use, and they can't be sorted in the user interface - they display in the order that they were originally added
this is ok for a handful of properties, but when there are a lot of them...

i've put this together to recreate the custom properties, adding them in alphabetical order - i'm no expert, but i hope this helps someone!

my routine:
Code:
Private Sub Tools_Custom_Document_Properties_Alpha_Sort_Recreate()
'
' get all custom document properties
' sort alphabetically, delete, then recreate
' custom properties display in the order they were added
'
    Dim docCustomProperty As DocumentProperty
    Dim intDeleted As Integer, intCreated As Integer
    Dim arrCustomDocProps() As String
    Dim varCounter As Variant
    
    ReDim Preserve arrCustomDocProps(0)
    arrCustomDocProps(0) = ""
    
    ' get custom properties into array, then delete
    For Each docCustomProperty In ActiveDocument.CustomDocumentProperties
'        Debug.Print docCustomProperty.Name & " value " & docCustomProperty.Value
        ' don't recreate 'sharepoint' type custom properties - ContentType, ContentTypeID
        If InStr(1, docCustomProperty.Name, "contenttype", vbTextCompare) Then
'            Debug.Print "found contenttype property: " & docCustomProperty.Name
        Else
            ReDim Preserve arrCustomDocProps(UBound(arrCustomDocProps) + 1)
            arrCustomDocProps(UBound(arrCustomDocProps)) = docCustomProperty.Name & "^" & docCustomProperty.Value
        End If
        ' uncomment to delete the custom property
'        docCustomProperty.delete
        intDeleted = intDeleted + 1
    Next docCustomProperty
    
    ' sort custom properties alphabetically
    Quicksort arrCustomDocProps, LBound(arrCustomDocProps), UBound(arrCustomDocProps)
    
    ' recreate custom properties from array
    For varCounter = 1 To UBound(arrCustomDocProps)
'        Debug.Print "item: " & varCounter & " " & arrCustomDocProps(varCounter)
'        Debug.Print Split(arrCustomDocProps(varCounter), "^")(0)
'        Debug.Print Split(arrCustomDocProps(varCounter), "^")(1)
        If InStr(1, Split(arrCustomDocProps(varCounter), "^")(0), "date", vbTextCompare) Then
'            Debug.Print "found date property: " & Split(arrCustomDocProps(varCounter), "^")(0)
            updateCustomDocumentProperty (Split(arrCustomDocProps(varCounter), "^")(0)), (Split(arrCustomDocProps(varCounter), "^")(1)), msoPropertyTypeDate
        Else
            updateCustomDocumentProperty (Split(arrCustomDocProps(varCounter), "^")(0)), (Split(arrCustomDocProps(varCounter), "^")(1)), msoPropertyTypeString
        End If
        intCreated = intCreated + 1
    Next varCounter
    
    Set docCustomProperty = Nothing
    Set varCounter = Nothing
    Erase arrCustomDocProps
    
    Debug.Print "deleted " & intDeleted & " and recreated " & intCreated & " custom document properties"
End Sub
borrowed routine to alpha sort the custom properties:
Code:
Private Sub Quicksort(vArray As Variant, arrLbound As Long, arrUbound As Long)
'
' Sorts a one-dimensional VBA array from smallest to largest
' using a very fast quicksort algorithm variant.
'
' https://wellsr.com/vba/2018/excel/vba-quicksort-macro-to-sort-arrays-fast/
'
    Dim pivotVal As Variant, vSwap As Variant
    Dim tmpLow As Long, tmpHi As Long
     
    tmpLow = arrLbound
    tmpHi = arrUbound
    pivotVal = vArray((arrLbound + arrUbound) \ 2)
     
    While (tmpLow <= tmpHi) 'divide
        While (vArray(tmpLow) < pivotVal And tmpLow < arrUbound)
            tmpLow = tmpLow + 1
        Wend
      
        While (pivotVal < vArray(tmpHi) And tmpHi > arrLbound)
            tmpHi = tmpHi - 1
        Wend
     
        If (tmpLow <= tmpHi) Then
            vSwap = vArray(tmpLow)
            vArray(tmpLow) = vArray(tmpHi)
            vArray(tmpHi) = vSwap
            tmpLow = tmpLow + 1
            tmpHi = tmpHi - 1
        End If
    Wend
     
    If (arrLbound < tmpHi) Then Quicksort vArray, arrLbound, tmpHi 'conquer
    If (tmpLow < arrUbound) Then Quicksort vArray, tmpLow, arrUbound 'conquer
    
    Set pivotVal = Nothing
    Set vSwap = Nothing
End Sub
borrowed routine to create the custom properties:
Code:
Private Sub updateCustomDocumentProperty(strPropertyName As String, varValue As Variant, docType As Office.MsoDocProperties)
'
' updates custom document property, creates it if it doesn't exist
'
' https://stackoverflow.com/questions/14863250/how-to-add-a-documentproperty-to-customdocumentproperties-in-excel
'
    On Error Resume Next
    ActiveDocument.CustomDocumentProperties(strPropertyName).Value = varValue
    If Err.Number > 0 Then
        ActiveDocument.CustomDocumentProperties.Add _
            Name:=strPropertyName, _
            LinkToContent:=False, _
            Type:=docType, _
            Value:=varValue
    End If
End Sub
Reply With Quote
 



Similar Threads
Thread Thread Starter Forum Replies Last Post
sort custom document properties Phantom fields (custom document properties)- where do they come from - and how can they be stopped?! andiekit Word 13 03-18-2021 07:02 AM
sort custom document properties Adding Custom Document Properties NicoleJones Word VBA 3 03-10-2021 08:43 PM
sort custom document properties Create Custom Document Properties with Content Control kschmidt Word VBA 7 02-04-2019 03:09 PM
sort custom document properties Updating Document Properties without using advanced properties dialogue thedr9wningman Word VBA 3 01-20-2014 05:56 PM
sort custom document properties Add custom document properties into document NicBodkin Word 8 05-05-2011 09:09 AM

Other Forums: Access Forums

All times are GMT -7. The time now is 08:13 AM.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2025, vBulletin Solutions Inc.
Search Engine Optimisation provided by DragonByte SEO (Lite) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.
MSOfficeForums.com is not affiliated with Microsoft