从文档中提取超链接时,代码返回90个空值

时间:2012-08-26 02:56:06

标签: vba excel-vba word-vba excel

我对编码特别陌生,更不用说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时间)空行之前第二次打印出路径/文件,然后是文档中的所有链接。除了无法解释的第二个路径/文件(即使我注释掉我放入的位)和90个空白条目外,它完美地完成了它。

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

0 个答案:

没有答案