1

VBA は言うまでもなく、コーディングに関しては特に初心者です。VBA の学習を本格的に取り締まる 1 週間を経て、コツをつかみ始めました。現時点では、ハイパーリンク (アドレスと名前の両方) を 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

私の問題は、1 つのページに 3 つほどのハイパーリンクが含まれる単純なサンプル ファイルでこのコードを実行すると、ファイルのパス/名前が上部にあり、すべてのリンクがそのすぐ下のページ (1 つの列にアドレス、もう 1 つの列に表示されるテキスト)。ただし、このコードを書いているファイルの 1 つ (約 30 個のリンクを含む 95 ページ以上の .docx ファイル) で実行すると、フォーマットされたセクションにパス/ファイルが出力され、90 (90 ごとにパス/ファイルをもう一度印刷する前に空白行を表示し、次にドキュメント内のすべてのリンクを印刷します。不可解な2番目のパス/ファイル(入力したビットをコメントアウトしてもそこにあります)と90個の空白のエントリを除いて、それは完全に機能します。

誰かが何が起こっているのか説明できますか、それとも自分のリンクコードを削除し、すべての空白行を削除するビットを含めて、問題を回避する方法を見つけようとする必要がありますか?

4

0 に答える 0