1

我对编码特别陌生,更不用说 VBA。在认真学习 VBA 一周后,我开始掌握它的窍门。目前,我正在尝试编写一个代码,将超链接(地址和名称)从 word 文档(最终是 word、excel 和 power point 文件)中提取出来,并将它们转储到我运行的 excel 文件中来自的代码。它还将文件路径和名称转储到列表顶部。我可以一次运行代码并从 1 个文件中提取链接,并且代码在最后填充的行结束后将其弹出。当我必须更新链接时,它将为我节省大量时间。

Sub ExtractWordLinks()
    'the following code gets and sets an open file command bar for word documents
    Dim Filter, Caption, SelectedFile As String
    Dim Finalrow As String
    Filter = "docx Files (*.docx),*.docx, doc Files (*.doc),*.doc, xlsm Files (*.xlsx),*.xlsx"
    Caption = "Please Select .doc, .docx, .xlsx files only, " & TheUser
    SelectedFile = Application.GetOpenFilename(Filter, , Caption)
    'check if value is blank if it is exit
    Finalrow = Cells(Rows.Count, 1).End(xlUp).Row
    If (Trim(SelectedFile) = "") Then
        Exit Sub
    Else
        'setting up the inital word application object
        Set wordapp = CreateObject("word.Application")
        'opening the document that is defined in the open file dialog
        wordapp.documents.Open (SelectedFile)
        'ability to change wether it needs to burn cycles updating the UI
        wordapp.Visible = False
        'declare excel sheet
        Dim xlsSheet As Excel.Worksheet
        'set active sheet
        Set xlsSheet = Application.ActiveSheet
        Dim i As Integer
        i = 1
        'MsgBox (wordapp.ActiveDocument.Hyperlinks.Count)
        For i = 1 To wordapp.ActiveDocument.Hyperlinks.Count
            'puts the title of the document in the formatted cells
            'xlsSheet.Cells(Finalrow + 1, 1).Value = wordapp.ActiveDocument.Path & "\" & wordapp.ActiveDocument.Name
            'formats the file name cell to be a bit easier to discern from the listing.
            Range(Cells(Finalrow + 1, 1), Cells(Finalrow + 1, 2)).Font.Bold = True
            Range(Cells(Finalrow + 1, 1), Cells(Finalrow + 1, 2)).Merge
            'save the links address.
            xlsSheet.Cells(Finalrow + i, 1).Value = wordapp.ActiveDocument.Hyperlinks(i).Address
            'save the links display text
            xlsSheet.Cells(Finalrow + i, 2).Value = wordapp.ActiveDocument.Hyperlinks(i).TextToDisplay
        Next
        wordapp.ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges
        wordapp.Quit SaveChanges:=wdDoNotSaveChanges
    End If
End Sub

我的问题是,当我在一个简单的示例文件上运行此代码时,它在单个页面中包含 3 个左右的超链接,它会返回我想要的所有内容,文件路径/名称在顶部,所有链接在正下方的页面(一列中的地址,另一列中显示的文本)。但是,当我在我正在为其编写此代码的文件之一上运行它时(一个包含约 30 个链接的 95+ 页 .docx 文件),它会在格式化部分打印出路径/文件,然后删除 90(每个 90 time) 在第二次打印出路径/文件之前的空白行,然后是文档中的所有链接。它完美地完成了它,除了莫名其妙的第二个路径/文件(即使我注释掉我输入的位)和 90 个空白条目。

任何人都可以解释发生了什么,或者我应该尝试找出一种方法来通过删除我自己的链接代码来绕过这个问题,并包括一个删除所有空行的位?

4

0 回答 0