کوین به این فکر می کند که آیا راهی برای کپی کردن طیف وسیعی از صفحات در VBA وجود دارد. او می داند که چگونه پاراگراف ها و یک محدوده متنی به هم پیوسته را کپی کند، اما نمی داند چگونه کل صفحات را کپی کند.
هیچ شی VBA وجود ندارد که به کل صفحه ارجاع دهد، مانند یک پاراگراف، و همچنین یک عبارت VBA وجود ندارد که به شما اجازه دهد یک صفحه را انتخاب کنید. با این حال، می توانید محاسبه کنید که یک صفحه شامل چه چیزی می شود و سپس آن محدوده را انتخاب کنید. مفهوم کلی در این ماکرو نشان داده شده است:
Sub CopyPages1()
Dim rCopy As Range
Set rCopy = ActiveDocument.GoTo(What:=wdGoToPage, _
Which:=wdGoToAbsolute, Count:=7)
Selection.GoTo What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=9
rCopy.End = Selection.Bookmarks("Page").Range.End
rCopy.Select
End Sub
این ماکرو محدوده rCopy را برابر با نقطه شروع صفحه 7 تعیین می کند. سپس متن را در همان ابتدای صفحه 9 انتخاب می کند و از یکی از نشانک های داخلی Word برای انتخاب از بالای صفحه 7 تا انتهای صفحه 9 استفاده می کند. (این کاری است که این ماکرو برای انجام آن طراحی شده است - انتخاب کنید. صفحات 7 تا 9.)
البته باید توجه داشته باشید که صفحات در Word بسیار روان هستند. اگر دقیقاً از یک سند در دو سیستم مختلف استفاده میکنید، ماکرو بالا ممکن است انتخابهای مختلف را کاملاً بازگرداند. چرا؟ زیرا صفحات می توانند در هر یک از سیستم ها به طور متفاوتی جریان داشته باشند.
اگر می خواهید واقعاً صفحات انتخاب شده (7 تا 9) را کپی کنید، می توانید ماکرو را فقط کمی تغییر دهید تا به نتیجه دلخواه برسید.
Sub CopyPages2()
Dim rCopy As Range
Dim rCurrent As Range
Set rCurrent = Selection.Range
Set rCopy = ActiveDocument.GoTo(What:=wdGoToPage, _
Which:=wdGoToAbsolute, Count:=7)
Selection.GoTo What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=9
rCopy.End = Selection.Bookmarks("Page").Range.End
rCopy.Copy
Documents.Add
ActiveDocument.Range.PasteSpecial
rCurrent.Select
End Sub
توجه داشته باشید که ماکرو آنچه را که کاربر قبل از اجرا انتخاب کرده بود "به خاطر می آورد"، محدوده را در متغیر rCurrent ذخیره می کند و از آن برای انتخاب مجدد آن ناحیه در انتهای ماکرو استفاده می کند. صفحات انتخاب شده (دوباره، 7 تا 9) در یک سند کاملاً جدید کپی می شوند.
باید توجه داشته باشید که ماکروهای فوق فقط در صورتی به درستی کار می کنند که واقعاً حداقل 9 صفحه در سند فعلی وجود داشته باشد. اگر ماکرو انعطافپذیرتر و قویتری میخواهید، میتوانید تغییرات زیر را در نظر بگیرید.
Sub CopyPages3()
Dim rCopy As Range
Dim rCurrent As Range
Dim sTemp As String
Dim i As Integer
Dim iStart As Integer
Dim iEnd As Integer
Set rCurrent = Selection.Range
" Get page numbers to be copied
sTemp = InputBox("Page range to copy (use format 6-7)", "")
i = InStr(sTemp, "-")
If i > 0 Then
iStart = Val(Left(sTemp, i - 1))
iEnd = Val(Mid(sTemp, i + 1))
If iStart < 1 Then iStart = 1
If iEnd .Information(wdNumberOfPagesInDocument) Then
iStart = .Information(wdNumberOfPagesInDocument)
End If
If iEnd > .Information(wdNumberOfPagesInDocument) Then
iEnd = .Information(wdNumberOfPagesInDocument)
End If
End With
" Set the range
Set rCopy = ActiveDocument.GoTo(What:=wdGoToPage, _
Which:=wdGoToAbsolute, Count:=iStart)
Selection.GoTo What:=wdGoToPage, Which:=wdGoToAbsolute, _
Count:=iEnd
rCopy.End = Selection.Bookmarks("Page").Range.End
" Copy range to a new document
rCopy.Copy
Documents.Add
ActiveDocument.Range.PasteSpecial
rCurrent.Select
Else
If sTemp > "" Then
MsgBox "There is no dash character"
End If
End If
End Sub
این نسخه از کاربر می خواهد که محدوده صفحه ای را برای کپی کردن مشخص کند. شمارههای صفحه طوری تنظیم میشوند که اطمینان حاصل شود که شماره شروع کمتر یا مساوی با شماره پایانی است و هر دو شماره شروع و پایان کمتر از تعداد کل صفحات سند هستند.