ایان اسناد بسیار بسیار زیادی دارد که شامل پیوندهایی به اسناد دیگر است. (اینها لینکها نیستند، بلکه پیوندهای سند واقعی در Word هستند.) او باید آن پیوندها را بشکند، و میداند که میتواند اسناد را بارگذاری کند و پیوندها را یکی یکی بشکند. با این حال، او متعجب است که آیا ماکرویی وجود دارد که بتواند تمام اسناد موجود در یک پوشه را مرور کند و به طور خودکار همه پیوندهای درون آن اسناد را بشکند.
به صورت دستی، می توانید با دنبال کردن این مراحل، پیوندها را قطع کنید:
شکل 1. کادر محاوره ای پیوندها.
- روی تب File روبان کلیک کنید.
- مطمئن شوید که Info در سمت چپ صفحه انتخاب شده است.
- در سمت راست پایین صفحه، در بخش اسناد مرتبط، روی Edit Links to Files کلیک کنید. (اگر این گزینه در دسترس نباشد، به این معنی است که Word فکر نمی کند هیچ پیوندی در سند فعلی وجود داشته باشد.) Word کادر محاوره ای پیوندها را نمایش می دهد. (شکل 1 را ببینید.)
- پیوندی را که می خواهید شکسته شود انتخاب کنید.
- بر روی Break Link کلیک کنید. از شما خواسته می شود که اقدام خود را تأیید کنید.
- روی OK کلیک کنید.
اگر از Word 2007 استفاده می کنید، مراحل کمی متفاوت است:
- روی دکمه Office کلیک کنید و سپس روی Prepare کلیک کنید.
- روی Edit Links to Files کلیک کنید. (اگر این گزینه در دسترس نباشد، به این معنی است که Word فکر نمی کند هیچ پیوندی در سند فعلی وجود داشته باشد.) Word کادر محاوره ای پیوندها را نمایش می دهد.
- پیوندی را که می خواهید شکسته شود انتخاب کنید.
- بر روی Break Link کلیک کنید. از شما خواسته می شود که اقدام خود را تأیید کنید.
- روی OK کلیک کنید.
همانطور که می توانید بگویید، این فرآیند نسبتاً کار فشرده است، به خصوص اگر اسناد زیادی داشته باشید و هر سند دارای چندین پیوند باشد. ماهیت کار فشرده این فرآیند به همین دلیل است که ایان به دنبال راهی برای شکستن پیوندهای تحت کنترل یک ماکرو بود.
برای انجام این کار در یک ماکرو، ماکرو باید هر سند را در پوشه باز کند، پیوندهایی را که پیدا کرده است را بشکند و سپس سند را ذخیره کند. تشخیص تعداد اسناد در یک پوشه، باز کردن و بستن آنها بسیار ساده است. اگر میخواهید پیوندها را بشکنید، ماکرو باید هر قسمت را در سند بررسی کند و فقط آنهایی را که از فیلد LINK استفاده میکنند، بشکند. ماکرو زیر نحوه انجام این کار را نشان می دهد.
Sub RemoveLinks() Dim fleArray() As String Dim flCount As Long Dim k As Long Dim fle As String Dim fld As Field Dim currentFileName As String Dim docPath As String Dim bDirty As Boolean docPath = ActiveDocument.Path & "" currentFileName = ActiveDocument.Name fle = Dir(docPath & "*.doc*") flCount = -1 ReDim fleArray(0) Do While fle <> "" flCount = flCount + 1 ReDim Preserve fleArray(flCount) fleArray(flCount) = fle fle = Dir() Loop If MsgBox("There are " & flCount + 1 & " files to be processed." _ & vbCrLf & "Do you want to continue?", vbYesNo, "Break links") _ = vbNo Then Exit Sub For k = 0 To UBound(fleArray) fle = fleArray(k) Options.UpdateLinksAtOpen = False Documents.Open FileName:=docPath & fle Options.UpdateLinksAtOpen = True bDirty = False For Each fld In ActiveDocument.Fields If fld.Type = wdFieldLink ThenUncomment the following if link needs to be updatedbefore the link is brokenfld.LinkFormat.Update fld.LinkFormat.BreakLink bDirty = True End If Next fld If bDirty Then ActiveDocument.SaveOnly save if links broken If ActiveDocument.Name <> currentFileName Then ActiveDocument.Close Next k End Sub
به حلقه For Every توجه کنید که به هر فیلد (fld) در مجموعه فیلدها نگاه می کند. بررسی می کند تا مطمئن شود که ویژگی Type فیلد برابر با wdFieldLink است، به این معنی که یک فیلد LINK است. اگر چنین است، کد از متد BreakLink با خاصیت LinkFormat برای فیلد استفاده می کند و پیوند را به طور موثر حذف می کند.