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個の空白のエントリを除いて、それは完全に機能します。
誰かが何が起こっているのか説明できますか、それとも自分のリンクコードを削除し、すべての空白行を削除するビットを含めて、問題を回避する方法を見つけようとする必要がありますか?