In không lặp tiêu đề một vài trang cuối (4 người xem)

  • Thread starter Thread starter vanle33
  • Ngày gửi Ngày gửi

Người dùng đang xem chủ đề này

vanle33

Thành viên gạo cội
Tham gia
30/10/08
Bài viết
6,001
Được thích
4,019
Giới tính
Nam
Trong file đính kèm tôi xin nhờ các thành viên dùng code để khi in từ trang 1 đến 90 thì có lặp lại tiêu đề từ dòng 13, 14, 15 và không lặp tiêu đề ở trang cuối (trang 91).
Ý tôi muốn là hiện ra 1 box có chọn vùng để in có lặp lại tiêu đề và vùng để in không lặp lại tiêu đề rồi IN.
Có thể copy code trong file này để áp dụng cho 1 vài file khác khi cần sử dụng.
Xin cảm ơn các thành viên.
 

File đính kèm

Anh có thể tham khảo VBA sau:

Mã:
Sub Print_Two_Areas_With_InputBox()

    Dim ws As Worksheet
    Dim page1 As Range, page2 As Range, Title As Range

    Set ws = ActiveSheet

    Set page1 = Application.InputBox( _
        Prompt:="Chon trang co tieu de", _
        Title:="chon trang", Type:=8)

    If page1 Is Nothing Then Exit Sub

    Set page2 = Application.InputBox( _
        Prompt:="Chon trang khong co tieu de", _
        Title:="Chon trang cuoi", Type:=8)

    If page2 Is Nothing Then Exit Sub
    
    On Error Resume Next
    Set rngTitle = Application.InputBox( _
        Prompt:="Chon dong tieu de:", _
        Title:="Chon tieu de", _
        Type:=8)
    On Error GoTo 0
    
    If rngTitle Is Nothing Then
        MsgBox "Ban chua chon tieu de."
        Exit Sub
    End If

    With ws.PageSetup
        .PrintArea = page1.Address
        .PrintTitleRows = rngTitle.Address
    End With
    page1.PrintOut

    With ws.PageSetup
        .PrintArea = page2.Address
        .PrintTitleRows = ""
    End With
    page2.PrintOut

End Sub
Hy vọng giúp được anh!
 
Upvote 0
@LOGANWover : Bạn hướng dẫn chi tiết giúp tôi cách sử dụng nha.
Tôi chạy code. Hiện cửa sổ 'chon trang' / 1-90 / OK / hiện cửa sổ thông báo lỗi / OK là không tiếp tục được nữa.

-tôi mù tịt về code-
 
Upvote 0
@vanle33 khi cửa sổ chọn hiện lên thì anh dùng chuột bôt đen vùng trang muốn in lặp tiêu đề, tiêu đề, vùng không có tiêu đề. Không phải nhập số trang là 1-90.
vì khi set Print Titles thì số lượng trang sẽ thay đổi không phải là 90 nữa nên nguyên lý của code sẽ khác.
1780020655312.png
 
Upvote 0
Tôi đã chọn được vùng in, in thử ra giấy A4.
Thế thì chỉ lặp được và không lặp được tiêu đề trong vùng bảng biểu (từ dòng 13 đến hết dòng có dữ liệu) mà không in được dữ liệu từ dòng 1 đến dòng 12 và số thứ tự trang không liên tiếp từ phần có tiêu đề sang vùng không có tiêu đề.
Ý tôi là in như bình thường có lặp tiêu đề (dòng 13 đến dòng 15) từ trang 1 đến 90 như mặc định trong Excel còn riêng trang 91 thì không có tiêu đề.
 
Upvote 0
Chọn vùng in cần lặp tiêu đề thì anh cần chọn từ dòng đầu tiên mà anh muốn in. Ở file này là từ A1. => có thể anh đang chọn từ A13 nên trang đầu tiên không hiển thị A1:O12.
Nếu anh muốn phần số Page nối tiếp thì có thể thêm phần đếm lượt in đầu ở đây là page1.

Code dưới đã thêm phần page chạy liên tục và được kết quả như file đính kèm. Hy vọng giúp được anh!
Mã:
Sub Print_Two_Areas_With_Title()

    Dim ws As Worksheet
    Dim page1 As Range, page2 As Range, Title As Range
    Dim pageCount1 As Long

    Set ws = ActiveSheet

    Set page1 = Application.InputBox( _
        Prompt:="Chon trang co tieu de", _
        Title:="chon trang", Type:=8)
    If page1 Is Nothing Then Exit Sub

    On Error Resume Next
    Set page2 = Application.InputBox( _
        Prompt:="Chon trang khong co tieu de", _
        Title:="Chon trang cuoi", Type:=8)
    On Error GoTo 0

    Set Title = Application.InputBox( _
        Prompt:="Chon dong tieu de:", _
        Title:="Chon tieu de", _
        Type:=8)
    If Title Is Nothing Then Exit Sub

    With ws.PageSetup
        .PrintArea = page1.Address
        .PrintTitleRows = Title.Address
        .FirstPageNumber = xlAutomatic
    End With
    ActiveWindow.View = xlPageBreakPreview
    pageCount1 = ws.HPageBreaks.Count + 1
    page1.PrintOut

    If Not page2 Is Nothing Then
        With ws.PageSetup
            .PrintArea = page2.Address
            .PrintTitleRows = ""
            .FirstPageNumber = pageCount1 + 1
        End With
        page2.PrintOut
    End If

End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Tôi đã chọn được vùng in, in thử ra giấy A4.
Thế thì chỉ lặp được và không lặp được tiêu đề trong vùng bảng biểu (từ dòng 13 đến hết dòng có dữ liệu) mà không in được dữ liệu từ dòng 1 đến dòng 12 và số thứ tự trang không liên tiếp từ phần có tiêu đề sang vùng không có tiêu đề.
Ý tôi là in như bình thường có lặp tiêu đề (dòng 13 đến dòng 15) từ trang 1 đến 90 như mặc định trong Excel còn riêng trang 91 thì không có tiêu đề.
Với trường hợp của file này thì anh đang muốn trang cuối là từ dòng A1825:O1832 là không có tiêu đề thì nguyên lý chọn của code trên:
- Vùng in có tiêu đề: A1:O1824
- Vùng in không có tiêu đề: A1825:O1832
- Dòng tiêu đề: $13:$15
 
Upvote 0
Chọn vùng in cần lặp tiêu đề thì anh cần chọn từ dòng đầu tiên mà anh muốn in. Ở file này là từ A1. => có thể anh đang chọn từ A13 nên trang đầu tiên không hiển thị A1:O12.
Nếu anh muốn phần số Page nối tiếp thì có thể thêm phần đếm lượt in đầu ở đây là page1.

Code dưới đã thêm phần page chạy liên tục và được kết quả như file đính kèm. Hy vọng giúp được anh!
Mã:
Sub Print_Two_Areas_With_Title()

    Dim ws As Worksheet
    Dim page1 As Range, page2 As Range, Title As Range
    Dim pageCount1 As Long

    Set ws = ActiveSheet

    Set page1 = Application.InputBox( _
        Prompt:="Chon trang co tieu de", _
        Title:="chon trang", Type:=8)
    If page1 Is Nothing Then Exit Sub

    On Error Resume Next
    Set page2 = Application.InputBox( _
        Prompt:="Chon trang khong co tieu de", _
        Title:="Chon trang cuoi", Type:=8)
    On Error GoTo 0

    Set Title = Application.InputBox( _
        Prompt:="Chon dong tieu de:", _
        Title:="Chon tieu de", _
        Type:=8)
    If Title Is Nothing Then Exit Sub

    With ws.PageSetup
        .PrintArea = page1.Address
        .PrintTitleRows = Title.Address
        .FirstPageNumber = xlAutomatic
    End With
    ActiveWindow.View = xlPageBreakPreview
    pageCount1 = ws.HPageBreaks.Count + 1
    page1.PrintOut

    If Not page2 Is Nothing Then
        With ws.PageSetup
            .PrintArea = page2.Address
            .PrintTitleRows = ""
            .FirstPageNumber = pageCount1 + 1
        End With
        page2.PrintOut
    End If

End Sub
ok cám ơn bạn. Code này đã chạy đúng như yêu cầu ở #5.
Có hiện ra 1 bảng để view trước khi in được không bạn?
Chứ hiện tại nhấn OK là chạy in ra 1 loạt luôn (cả có lặp lại tiêu đề lẫn không lặp lại tiêu đề). Chưa kịp xem trang nào in ra trông như thế nào, lề có rộng hẹp không.
 
Upvote 0
Như mục tiêu của #1 thì trước khi in anh đã phải xác định vùng nào là trang cuối không có tiêu đề rồi. Cho nên cách đơn giản nhất là a thực hiện set Area Print + Fix margins cho phù hợp với loại giấy trước khi chạy code. Như vậy sẽ được kết quả ưng ý nhất.
 
Upvote 0
Như mục tiêu của #1 thì trước khi in anh đã phải xác định vùng nào là trang cuối không có tiêu đề rồi. Cho nên cách đơn giản nhất là a thực hiện set Area Print + Fix margins cho phù hợp với loại giấy trước khi chạy code. Như vậy sẽ được kết quả ưng ý nhất.
OK bạn. Phải căn chỉnh, chuẩn chỉ, đẹp đẽ. Chỉ còn in ra là xong. Rồi dùng code ở #6 là OK.
 
Upvote 0
Trong file đính kèm tôi xin nhờ các thành viên dùng code để khi in từ trang 1 đến 90 thì có lặp lại tiêu đề từ dòng 13, 14, 15 và không lặp tiêu đề ở trang cuối (trang 91).
Ý tôi muốn là hiện ra 1 box có chọn vùng để in có lặp lại tiêu đề và vùng để in không lặp lại tiêu đề rồi IN.
Có thể copy code trong file này để áp dụng cho 1 vài file khác khi cần sử dụng.
Xin cảm ơn các thành viên.
Thôi thì cứ liều: "múa rìu qua mắt thợ".
Thêm 1 cách nữa cho bạn rộng đường lựa chọn.
Đoạn Code trong file có sự giúp đỡ rất nhiệt tình của bạn ChatGPT.
Khi chọn nút in: bạn nhập vào đó các thành phần sau:
+TD(1-xx=Chỉ số dòng tiêu đề 1,z-aaa=chỉ số dòng tiêu đề 2,yyyy=Chỉ số dòng tiêu đề 3);KTD(bbb-cccc,eee,...);BO(nnn-mmm,tt-kk,ffff)
Khi chạy máy sẽ in từ trang 1-trang xx với tiêu đề đầu trang là chỉ số dòng tiêu đề 1, tương tự với tiêu đề 2, tiêu đề 3, Tiếp theo máy sẽ các trang từ bbb=cccc, và eee. và KHÔNG in các trang được liệt kê trong phần BO(...). Và có cả kiểm tra trang trùng, nhập số trang không hợp lệ.
Sẽ rất thuân tiện khi trong 1 sheet có nhiều trang, và có nhiều mẫu biểu cần in và không cần in tiêu đề, và bỏ không in 1 số trang nào đó.
Hy vọng nhận được gạch đá để củng cố thêm kiến thức!
 

File đính kèm

Upvote 0
@HUONGHCKT
ok, ra đúng kết quả yêu cầu luôn
Tốc độ chạy code và in chóng mặt luôn đó bạn. Giấy chưa ra hết mà báo Đã in xong.
Mục này 'Và có cả kiểm tra trang trùng, nhập số trang không hợp lệ.' nằm ở chỗ nào khi sử dụng code vậy bạn?
 
Upvote 0
@HUONGHCKT
ok, ra đúng kết quả yêu cầu luôn
Tốc độ chạy code và in chóng mặt luôn đó bạn. Giấy chưa ra hết mà báo Đã in xong.
Mục này 'Và có cả kiểm tra trang trùng, nhập số trang không hợp lệ.' nằm ở chỗ nào khi sử dụng code vậy bạn?
1/ Tôi không có máy in nên không kiểm tra được.
2/Tôi nghĩ là bạn thừa trình để đọc và hiểu code. So với bạn tôi vẫn còn "xanh và non lắm". Tuy nhiên tôi vẫn trả lời bạn mặc dù có thể hơi "bị quê". Function KiemTraTrang và Function DanhDauTrang đã thay ta làm được việc này.
3/ có thể vẫn còn có vấn đề ==>> hay xem lại điều 1 và 1 phần điều 2.
Thân.
 
Upvote 0
1/ Tôi không có máy in nên không kiểm tra được.
2/Tôi nghĩ là bạn thừa trình để đọc và hiểu code. So với bạn tôi vẫn còn "xanh và non lắm". Tuy nhiên tôi vẫn trả lời bạn mặc dù có thể hơi "bị quê". Function KiemTraTrang và Function DanhDauTrang đã thay ta làm được việc này.
3/ có thể vẫn còn có vấn đề ==>> hay xem lại điều 1 và 1 phần điều 2.
Thân.
Từ năm 2008 đến nay tôi mù tịt code nên không hiểu, không sửa được code. Tôi học cách sử dụng được code trong từng chủ đề, từng file là tôi thấy ok rồi.
Code chạy ok, tôi đã thử theo hướng dẫn của bạn về cách khai báo khi hiện "Câu hinh in"
Tôi muốn hỏi thêm như #12 để biết thôi.
 
Upvote 0
@HUONGHCKT : Muốn in bỏ qua chế độ BO (tức là chỉ tin chế độ có TD và chế độ KTD) thì khai báo như thế nào vậy bạn?
 
Upvote 0
@HUONGHCKT : Muốn in bỏ qua chế độ BO (tức là chỉ tin chế độ có TD và chế độ KTD) thì khai báo như thế nào vậy bạn?
1/Bạn mở cửa sổ VBE ra và Thay trong Sub In_Theo_CauHinh()
Dòng này

Mã:
CauHinh = InputBox( _
   "Ví d?:" & vbCrLf & _
   "TD(1-60=13-15,75-80=20-22);" & _
   "KTD(61-72);" & _
   "BO(73-74)", _
   "Câu hinh in")
Thành
Mã:
CauHinh = InputBox( _
    "Ví d?:" & vbCrLf & _
    "TD(1-60=13-15,75-80=20-22);" & _
    "KTD(61-72);" & _
    "Câu hinh in")
và bỏ dòng (hoặc đánh dấu nháy đơn vào đầu dòng code)
Mã:
Call XuLyBO(CauHinh, arrKhu, TongTrang)
2/ hoặc chạy thử với bỏ không nhập vào inputbox
Ví dụ Inputbox chỉ nhập TD(1-xxx+13-15);KTD(yyy-zzzz) và nhấn OK xem sao
 
Upvote 0
Theo mục 2 thì tôi thấy có lúc chạy ra được trang có tiêu đề, không tiêu đề có lúc thì chỉ chạy ra có tiêu đề.
 
Upvote 0
Bài ấy tôi không kiểm tra kỹ trước khi đăng lên Đúng của nó phải là:
2/ hoặc chạy thử với bỏ không nhập vào inputbox
Ví dụ Inputbox chỉ nhập TD(1-xxx=13-15);KTD(yyy-zzzz) và nhấn OK xem sao
Bạn thử lại xem sao.
Còn như (1) bạn đã thử chưa? Trên máy tôi thì chạy OK.
 
Upvote 0
Dấu = thì tôi nhập như hướng dẫn ở #11 của bạn rồi. @HUONGHCKT
Cám ơn bạn. Để tôi tự dò xem.
 
Upvote 0

Bài viết mới nhất

Back
Top Bottom