Создание списка внешних документов с их свойствами в Excel

#excel #vba #ms-word

#excel #vba #ms-word

Вопрос:

У меня есть лист Excel, содержащий список документов (Word, Excel и PowerPoint). Для каждого из этих документов у меня есть номер версии и дата утверждения.

Я хотел бы автоматизировать обновление этого списка с помощью имен документов (имен файлов), соответствующих версий (возможно, в виде поля формы или тега) и дат (связанных с версиями), которые содержит документ.

Каков наилучший способ сделать это?

Комментарии:

1. В Word я могу использовать Formfields, устанавливающие закладку на «Daterad». Файл> Информация> Свойства> Дополнительные свойства, на вкладке «Пользовательские» я создаю пользовательские свойства и связываю их с выбранным полем формы.

2. В Excel я могу сделать то же самое, только вместо этого я использую имя ячейки (щелкните правой кнопкой мыши в ячейке).

3. Некоторые примеры были бы здесь действительно полезны.

4. Возможно, с помощью функции CustomDocumentProperties.

Ответ №1:

Это то, что я получил до сих пор, но это немного некрасиво, и часть публикации не работает.

 Option Explicit

Sub ExtractMetaData()

    Application.ScreenUpdating = False

    Sheets("Files").Activate
    Range("a1").Offset(1, 0).Select
    While Selection.Value <> ""
        If Right(Selection.Offset(0, 1), 4) = "docx" Then Call ExtractMetaDataWord
        If Right(Selection.Offset(0, 1), 4) = "xlsx" Then Call ExtractMetaDataExcel
        If Right(Selection.Offset(0, 1), 4) = "xlsm" Then Call ExtractMetaDataExcel
        If Right(Selection.Offset(0, 1), 3) = "pub" Then Call ExtractMetaDataPublischer
        Sheets("Files").Activate
        Selection.Offset(1, 0).Select
    Wend

End Sub
Sub ExtractMetaDataWord()
    Dim objWord As Object
    Dim strProperty As Object
    Dim objDoc As Object
    Dim objExcel As Object
    Dim objXls As Object

    Set objWord = CreateObject("Word.Application")
    objWord.Visible = False

            Set objDoc = objWord.Documents.Open(Filename:=Selection amp; "" amp; Selection.Offset(0, 1))
            Sheets("Metadata").Activate
            Range("A" amp; Cells(Rows.Count, "A").End(xlUp).Row).Select
            Selection.Offset(1, 0).Select

            'If Range("A1").End(xlDown).Row = 2 Then Range("A1").End(xlDown).Activate Else Range("A1").End(xlDown).Offset(1, 0).Activate
                For Each strProperty In objDoc.CustomDocumentProperties
                    On Error Resume Next
                        Selection = objDoc.Name
                        If strProperty.Name = "Dokumentnummer" Then Selection.Offset(0, 1) = strProperty.Value
                        If strProperty.Name = "Version" Then Selection.Offset(0, 2) = strProperty.Value
                        If strProperty.Name = "Daterad" Then Selection.Offset(0, 3) = strProperty.Value
                        'Selection.Offset(0, 2) = strProperty.Value
                        'Selection.Offset(0, 3) = Now()
                        'Selection.Offset(1, 0).Select
                Next
            objDoc.Close

    objWord.Quit
    Set objWord = Nothing
    Set objDoc = Nothing
    Set strProperty = Nothing

    Application.ScreenUpdating = True

End Sub

Sub ExtractMetaDataExcel()
    Dim objExcel As Object
    Dim strProperty As Object
    Dim objXls As Object

    Set objExcel = CreateObject("Excel.Application")
    objExcel.Visible = False

        Set objXls = Workbooks.Open(Filename:=Selection amp; "" amp; Selection.Offset(0, 1))
        ThisWorkbook.Sheets("Metadata").Activate
        Range("A" amp; Cells(Rows.Count, "A").End(xlUp).Row).Select
        Selection.Offset(1, 0).Select
        'If Range("A1").End(xlDown).Row = 2 Then Range("A1").End(xlDown).Activate Else Range("A1").End(xlDown).Offset(1, 0).Activate
        For Each strProperty In objXls.CustomDocumentProperties
            On Error Resume Next
                Selection = objXls.Name
                    If strProperty.Name = "Dokumentnummer" Then Selection.Offset(0, 1) = strProperty.Value
                    If strProperty.Name = "Version" Then Selection.Offset(0, 2) = strProperty.Value
                    If strProperty.Name = "Daterad" Then Selection.Offset(0, 3) = strProperty.Value
                    'Selection.Offset(0, 2) = strProperty.Value
                    'Selection.Offset(0, 3) = Now()
                    'Selection.Offset(1, 0).Select
        Next
        objXls.Close


    objExcel.Quit
    Set objExcel = Nothing
    Set objXls = Nothing
    Set strProperty = Nothing

    Application.ScreenUpdating = True

End Sub

Sub ExtractMetaDataPublischer()
    Dim objPublischer As Object
    Dim strProperty As Object
    Dim objPub As Object

    Set objPublischer = CreateObject("Publisher.Application")
   ' objPublischer.Visible = False

            Set objPub = objPublischer.Open(Filename:=Selection amp; "" amp; Selection.Offset(0, 1))
            Sheets("Metadata").Activate
            Range("A" amp; Cells(Rows.Count, "A").End(xlUp).Row).Select
            Selection.Offset(1, 0).Select

            'If Range("A1").End(xlDown).Row = 2 Then Range("A1").End(xlDown).Activate Else Range("A1").End(xlDown).Offset(1, 0).Activate
                For Each strProperty In objPub.CustomDocumentProperties
                    On Error Resume Next
                        Selection = objPub.Name
                        If strProperty.Name = "Dokumentnummer" Then Selection.Offset(0, 1) = strProperty.Value
                        If strProperty.Name = "Version" Then Selection.Offset(0, 2) = strProperty.Value
                        If strProperty.Name = "Daterad" Then Selection.Offset(0, 3) = strProperty.Value
                        'Selection.Offset(0, 2) = strProperty.Value
                        'Selection.Offset(0, 3) = Now()
                        'Selection.Offset(1, 0).Select
                Next
            objPub.Close

    objPublischer.Quit
    Set objPublischer = Nothing
    Set objPub = Nothing
    Set strProperty = Nothing

    Application.ScreenUpdating = True

End Sub