Kevin tự hỏi liệu có cách nào, trong VBA, để sao chép một loạt các trang. Anh ta biết cách sao chép các đoạn văn và một phạm vi văn bản liền kề, nhưng anh ta không biết cách sao chép toàn bộ trang.

Không có đối tượng VBA nào tham chiếu đến toàn bộ trang, chẳng hạn như có với một đoạn văn, cũng như không có câu lệnh VBA nào cho phép bạn chọn một trang. Tuy nhiên, bạn có thể tính toán những gì sẽ bao gồm một trang và sau đó chọn phạm vi đó. Khái niệm chung được hiển thị trong macro này:

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

Macro này đặt phạm vi rCopy bằng với điểm bắt đầu trang 7.

Sau đó, nó chọn văn bản ở đầu trang 9 và sử dụng một trong các dấu trang cài sẵn của Word để chọn từ đầu trang 7 đến cuối trang 9. (Đó là những gì macro này được thiết kế để làm — chọn trang 7 qua 9.)

Tuy nhiên, bạn cần lưu ý rằng các trang rất linh hoạt trong Word. Nếu bạn sử dụng chính xác cùng một tài liệu trên hai hệ thống khác nhau, macro trên rất có thể trả về các lựa chọn hoàn toàn khác nhau. Tại sao? Bởi vì các trang có thể chảy khác nhau trên mỗi hệ thống.

Nếu bạn thực sự muốn sao chép các trang đã chọn (từ 7 đến 9), thì bạn có thể sửa đổi macro một chút để có được kết quả mong muốn.

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

Lưu ý rằng macro “ghi nhớ” những gì người dùng đã chọn trước khi nó được chạy, lưu trữ phạm vi trong biến rCurrent và sử dụng nó để chọn lại khu vực đó ở cuối macro. Các trang đã chọn (một lần nữa, từ 7 đến 9) được sao chép sang một tài liệu hoàn toàn mới.

Bạn cần lưu ý rằng các macro trên chỉ hoạt động bình thường nếu thực sự có ít nhất 9 trang trong tài liệu hiện tại. Nếu bạn muốn một macro linh hoạt và mạnh mẽ hơn, bạn có thể xem xét biến thể sau.

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 < iStart Then iEnd = iStart         With ActiveDocument.Range             If iStart > .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

Phiên bản này yêu cầu người dùng chỉ định phạm vi trang sẽ được sao chép. Số trang được điều chỉnh để đảm bảo rằng số bắt đầu nhỏ hơn hoặc bằng số kết thúc và cả số bắt đầu và số kết thúc đều được đảm bảo nhỏ hơn tổng số trang trong tài liệu.

_Lưu ý: _

Nếu bạn muốn biết cách sử dụng các macro được mô tả trên trang này (hoặc trên bất kỳ trang nào khác trên các trang WordTips), tôi đã chuẩn bị một trang đặc biệt bao gồm thông tin hữu ích.

WordTips là nguồn của bạn để đào tạo Microsoft Word hiệu quả về chi phí.

(Microsoft Word là phần mềm xử lý văn bản phổ biến nhất trên thế giới.) Mẹo này (5295) áp dụng cho Microsoft Word 2007, 2010, 2013, 2016, 2019 và Word trong Office 365.