جیمز یک برنامه خارجی برای Word دارد که به طور خودکار یک فایل متنی کوچک را به طور منظم ایجاد می کند. (فایل متنی همیشه یک نام دارد.) جیمز فکر میکند که داشتن یک ماکرو خوب است که بتواند فایل متنی را در یک سند Word وارد کند و آن را بلافاصله بعد از نشانکی که در سند تعریف کرده است وارد کند.
چند راه برای حل این مشکل وجود دارد. اگر هدف این است که محتویات فعلی فایل متنی را به سادگی درج کنید، دیگر نیازی به ماکرو ندارید—فقط از فیلد INCLUDETEXT برای ارجاع به فایلی که میخواهید اضافه کنید استفاده کنید. هر بار که فیلدهای سند خود را به روز می کنید، Word خارج می شود و محتوای فعلی فایل متنی را می گیرد و آن را در سند شما قرار می دهد.
با این حال، اگر می خواهید به طور مداوم محتوای فعلی فایل متنی را به سند خود اضافه کنید، باید از یک ماکرو استفاده کنید. یک روش ساده این است که از فیلد INCLUDETEXT در خود ماکرو به این صورت استفاده کنید:
Sub InsertTextFileAfterBookmark1() With Selection .GoTo what:=wdGoToBookmark, Name:="mybmk" .Fields.Add Range:=Selection.Range, _ Type:=wdFieldIncludeText, Text:="c:\myfile.txt c" _ & Chr(32) & "plaintext" & Chr(32) & "" .MoveLeft , 1 .Fields.Unlink .MoveEnd End With End Sub
ماکرو به محل نشانک میپرد، یک فیلد INCLUDETEXT را وارد میکند، فیلد را انتخاب میکند و سپس پیوند آن را قطع میکند. نتیجه این است که محتویات فایل متنی در سند درج می شود. هدف از قطع پیوند فیلد، اساساً خلاص شدن از شر فیلد INCLUDETEXT و جایگزینی آن با نتایج آن فیلد (محتوای فایل) است.
برای استفاده از ماکرو، به سادگی کد را تغییر دهید تا نام نشانک و مسیر کامل فایل متنی را که می خواهید درج کنید، منعکس کند. همچنین، مطمئن شوید که از بک اسلش های دوگانه در مشخصات مسیر استفاده می کنید. این برای اینکه کد فیلد به درستی کار کند لازم است.
روش دیگر این است که از فیلد INCLUDETEXT به طور کلی صرف نظر کنید و به سادگی محتویات فایل را وارد کنید. نسخه زیر از ماکرو این کار را انجام می دهد:
Sub InsertTextFileAfterBookmark2() If ActiveDocument.Bookmarks.Exists("mybmk") = True Then ActiveDocument.Bookmarks("mybmk").Select Selection.InsertFile FileName:="c:myfile.txt" Else MsgBox "Bookmark ""mybmk"" does not exist!" End If End Sub
ماکرو وجود نشانکی به نام mybmk را بررسی می کند (شما می توانید و باید این را تغییر دهید) و سپس از روش InsertFile برای درج محتوای فایل استفاده می کند. باید بدانید که همانطور که نوشته شده است، ماکرو نشانک را بازنویسی می کند. اگر میخواهید مطمئن شوید که نشانک دستنخورده باقی میماند، باید یک خط کد اضافه کنید تا نشانک به نقطه پایانی آن جمع شود، درست قبل از درج فایل:
Selection.Collapse Direction:=wdCollapseEnd
البته ماکرو شما می تواند هر چقدر که می خواهید شیک باشد. مثال زیر یک ماکرو با امکانات کامل را نشان میدهد که به شما این امکان را میدهد که تعیین کنید بین نشانک و محتوای فایلی که میخواهید درج کنید چقدر فاصله بگذارید. تنها کاری که باید انجام دهید این است که مطمئن شوید ماکرو را در نقاط (1)، (2) و (3) تنظیم کرده اید تا نحوه عملکرد آن را منعکس کنید. (نظرات در کلان توضیح می دهند که انتظارات و گزینه ها چیست.)
Sub InsertTextFileAfterBookmark3()This macro reads the contents of a specified text fileand inserts the text after a particular bookmark inthe active document. Dim InsertSpacer As Integer Dim FileContent As String(1) Pick a number to insert something between thebookmark and the inserted text as spacing:0 = No space. Text is inserted immediatelyafter the bookmark1 = Insert one space between bookmark and text2 = Insert paragraph mark between bookmark and text3 = Insert 2 paragraph marks between bookmarkand text InsertSpacer = 1(2) Set a constant for the name of the file to import.Change the file name inside the quotes below tothe full path and file name of the text file toimport: Const TextFile As String = "c:myfile.txt"(3) Change the file name in the quotes below to thename of the bookmark after which you want toinsert the text: Const BookmarkName As String = "mybmk"Handle errors On Error GoTo OopsOpen and grab contents of the file Open TextFile For Input As #1 FileContent = Input(LOF(1), #1) Close #1Find the bookmark in the active document Selection.GoTo What:=wdGoToBookmark, Name:="MyBookmark"Move the cursor to the end of the bookmark Selection.MoveRight Unit:=wdCharacter, Count:=1 Select Case InsertSpacer Case 0Do nothing. Text inserted immediately Case 1Insert a space Selection.TypeText Text:=" " Case 2 Insert a paragraph mark Selection.TypeText Text:=vbCrLf Case 3 Insert two paragraph marks Selection.TypeText Text:=vbCrLf & vbCrLf End SelectInsert the text file: Selection.TypeText Text:=FileContent Exit Sub Oops: Select Case Err.Number Case 55File already openClose the file Close #1Try again Resume Case 53File not found NotFound = "Could not find the file named: " _ & Chr(34) & TextFile & Chr(34) & vbCrLf _ & vbCrLf & "Verify the file name and path " _ & "in the macro code after " _ & Chr(34) & "Const TextFile As String =" & Chr(34) MsgBox NotFound, vbOKOnly Case Else MsgBox "Error number: " & Err.Number & ", " _ & Err.Description, vbOKOnly End Select End Sub