جیسون ویراستار دانشجوی یک مجله حقوق دانشگاهی است. به عنوان بخشی از فرآیند انتشار، او باید هر جمله را از نظر سرقت ادبی و صحت و هر نقل قولی برای اطمینان از قالب بندی و پشتیبانی مناسب بررسی کند. این اساساً به این معنی است که هر جمله باید توسط یک استناد در پاورقی پشتیبانی شود. در حال حاضر کارکنان به صورت دستی هر جمله متنی، پاورقی، و شماره پاورقی را از دستنوشته نویسنده (یک سند Word) در سند ورد یک ویرایشگر کارکنان کپی و جایگذاری می کنند که سپس برای بررسی استفاده می شود. جیسون تعجب میکند که آیا راهی برای خودکار کردن این فرآیند کپی کردن روی «شماره پانوشت»، «جمله از سند مقاله» و «محتوای پاورقی اصلی» از سند منبع دستنوشته در سند کاربرگ وجود دارد.
هر یک از وظایف ذکر شده توسط جیسون را می توان به صورت برنامه نویسی انجام داد، با برخی استثناهای تحریک کننده. قدم گذاشتن در مجموعههای پاورقی و یادداشتهای پایانی در VBA و استخراج اطلاعات از آنها چندان دشوار نیست. سپس این اطلاعات را می توان به یک سند جدید منتقل کرد که می تواند به عنوان کاربرگ ویرایشگر استفاده شود. بخش آزاردهنده این است که اعداد پانوشت و یادداشت پایانی پویا هستند و بنابراین دسترسی به آن آسان نیست. بحث کامل درباره این محرک می تواند باشد. در این سایت یافت شد:
http://www.vbaexpress.com/forum/showthread.php?31231
اینکه دقیقاً چگونه میتوانید یک کلان برای انجام انتقال اطلاعات از یک سند به سند دیگر بسازید، تا حد زیادی به ویژگیهای اطلاعات موجود در سند نویسنده بستگی دارد. برای مثال، آیا سند نویسنده شامل یک سند است یا دو فاصله بعد از جمله؟ آیا اجازه چند پاورقی در هر جمله را می دهد؟ آیا علاوه بر پاورقی، یادداشت های پایانی را نیز مجاز می داند؟ آیا شامل جداول می شود؟
نکته این است که ملاحظاتی وجود دارد که می تواند بر توسعه یک کلان تأثیر بگذارد. این بدان معنی است که هر ماکرو باید به طور دقیق با سند منبعی که با آن کار می کنید تنظیم شود - که به معنای آزمایش زیاد است. با این حال، برای اینکه نقطه شروعی به شما بدهیم، ماکروهای زیر را در نظر بگیرید. آنها جملات، پاورقیها و یادداشتهای پایانی (در صورت وجود) را از یک سند منبع در یک سند جدید کپی میکنند.
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
تعجب نکنید اگر ماکرو شما در طول زمان کاملاً پیچیده شود. هر زمان که یک ماکرو برای انجام کارهایی ایجاد کنید که انسان ها می توانند با تفکر نسبتاً کمی انجام دهند، انتظار می رود.