ジェイソンは、学術ロージャーナルの学生編集者です。出版プロセスの一環として、彼はすべての文の盗用と正確さ、およびすべての引用をチェックして、適切なフォーマットとサポートを確保する必要があります。

これは基本的に、すべての文が脚注に配置された引用によってサポートされなければならないことを意味します。現在、スタッフは、著者の原稿(Word文書)からすべてのテキスト文、脚注、および脚注番号を手動でコピーして、スタッフ編集者のWord文書に貼り付け、チェックに使用しています。ジェイソンは、「脚注番号」、「記事ドキュメントからの文」、「元の脚注コンテンツ」を原稿ソースドキュメントからワークシートドキュメントにコピーするこのプロセスを自動化する方法があるかどうか疑問に思います。

ジェイソンが言及した各タスクは、いくつかの苛立たしい例外を除いて、プログラムで実行できます。 VBAで脚注と文末脚注のコレクションをステップスルーし、それらから情報を抽出することはそれほど難しくありません。次に、この情報を、エディターのワークシートとして使用できる新しいドキュメントに移動できます。苛立たしい部分は、脚注と文末脚注の番号が動的であるため、アクセスがそれほど簡単ではないことです。

この刺激物の完全な議論はこのサイトで見つけることができます:

http://www.vbaexpress.com/forum/showthread.php?31231

あるドキュメントから別のドキュメントに情報を転送するためにマクロを作成する方法は、主に、作成者のドキュメント内の情報の特性に大きく依存します。たとえば、著者のドキュメントには、文の後に1つまたは2つのスペースが含まれていますか?文ごとに複数の脚注を許可しますか?脚注に加えて文末脚注も使用できますか?テーブルは含まれていますか?

重要なのは、マクロの開発に影響を与える可能性のある考慮事項がいくつもあるということです。つまり、マクロは、使用しているソースドキュメントに合わせて微調整する必要があります。つまり、多くのテストが必要になります。ただし、出発点として、次のマクロを検討してください。文、脚注、および文末脚注(ある場合)をソースドキュメントから新しいドキュメントにコピーします。

Sub FootnotesEndnotes()

Dim fNote As Footnote     Dim eNote As Endnote     Dim aRange As Range     Dim sText As String     Dim rText As String     Dim eRef As String     Dim newDoc As Document     Dim oldDoc As Document

Set oldDoc = ActiveDocument     Set newDoc = Documents.Add

sText = "---------------FOOTNOTES---------------" & vbCr     newDoc.Content.InsertAfter sText

oldDoc.Activate     For Each fNote In ActiveDocument.Footnotes         Set aRange = fNote.Reference         aRange.MoveStart unit:=wdSentence, Count:=-1         aRange.MoveEnd unit:=wdSentence         sText = aRange.Text         rText = fNote.Range.Text         With fNote.Reference.Characters.First             .Collapse             .InsertCrossReference wdRefTypeFootnote, _               wdFootnoteNumberFormatted, fNote.Index             eRef = .Characters.First.Fields(1).Result             Selection.Start = fNote.Reference.Start - Len(eRef)

Selection.End = fNote.Reference.Start             Selection.Delete         End With         Call WriteNewdoc(newDoc, sText, rText, eRef, "Footnote Text")

Next fNote

sText = "---------------ENDNOTES----------------" & vbCr     newDoc.Content.InsertAfter vbCr & vbCr & sText

For Each eNote In ActiveDocument.Endnotes         Set aRange = eNote.Reference         aRange.MoveStart unit:=wdSentence, Count:=-1         aRange.MoveEnd unit:=wdSentence         sText = aRange.Text         rText = eNote.Range.Text         With eNote.Reference.Characters.First             .Collapse             .InsertCrossReference wdRefTypeEndnote, _               wdEndnoteNumberFormatted, eNote.Index             eRef = .Characters.First.Fields(1).Result             Selection.Start = eNote.Reference.Start - Len(eRef)

Selection.End = eNote.Reference.Start             Selection.Delete         End With         Call WriteNewdoc(newDoc, sText, rText, eRef, "Endnote Text")

Next eNote

newDoc.Activate End Sub

Sub WriteNewdoc(newDoc As Document, sText As String, rText As String, _        eRef As String, aStyle As String)

Dim sText1 As String     Dim sText2 As String     Dim dRange As Range     Dim k As Long     Dim curDoc As Document

Set curDoc = ActiveDocument     newDoc.Activate     k = InStr(sText, Chr(2))

If k = 1 Then sText = Mid(sText, 2) 'in case previous sentence has note     sText = Trim(sText)

k = InStr(sText, Chr(2))

If k = 0 Then         sText = sText & Chr(2)

k = Len(sText)

End If     If k > 1 Then         sText1 = Left(sText, k - 1)

Else         sText1 = ""

End If     If k = Len(sText) Then         sText2 = ""

Else         sText2 = Mid(sText, k + 1)

End If     If Len(sText2) > 0 Then         If Mid(sText2, Len(sText2), 1) = Chr(13) Then             sText2 = Left(sText2, Len(sText2) - 1)

End If     End If     Set dRange = newDoc.Content     dRange.Collapse Direction:=wdCollapseEnd     dRange.Select     With Selection         .InsertAfter vbCr & sText1         .Font.Superscript = False         .Collapse Direction:=wdCollapseEnd         .InsertAfter eRef         .Font.Superscript = True         .Collapse Direction:=wdCollapseEnd         .InsertAfter " " & sText2 & vbCr         .Font.Superscript = False         .Collapse Direction:=wdCollapseEnd         .InsertAfter eRef         .Font.Superscript = True         .Collapse Direction:=wdCollapseEnd         .InsertAfter " " & rText & vbCr & vbCr         .Font.Superscript = False         .Style = aStyle     End With     curDoc.Activate End Sub

これは(再び)単なる出発点です。マクロをテストしてドキュメントで微調整し、期待どおりに動作することを確認する必要があります。

このようなマクロの開発に役立つ追加のリソースを探している場合は、この本を試してみてください。これは景品であり、特定の目的に適応できるいくつかのマクロ(または例)が含まれている場合があります:

http://www.archivepub.co.uk/book.html

マクロが時間の経過とともに非常に複雑になっても驚かないでください。これは、人間が比較的少ない思考で実行できるタスクを実行するマクロを作成するときはいつでも予想されます。

注:

このページ(または_WordTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

link:/ wordribbon-WordTipsMacros [ここをクリックして、新しいブラウザタブでその特別なページを開きます]

_WordTips_は、費用効果の高いMicrosoftWordトレーニングのソースです。

(Microsoft Wordは、世界で最も人気のあるワードプロセッシングソフトウェアです。)このヒント(12724)は、Microsoft Word 2007、2010、2013、2016、2019、およびOffice365のWordに適用されます。