Nhờ giúp đỡ về in tự động Danh sách lớp! (1 người xem)

  • Thread starter Thread starter be nam
  • Ngày gửi Ngày gửi
Liên hệ QC

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

be nam

Thành viên chính thức
Tham gia
3/4/10
Bài viết
90
Được thích
3
Mình có một danh sách học sinh các lớp. Mỗi lần mình muốn in danh sách từng lớp thì lọc và bấm in rất lâu. Nhờ các Anh chị và các bạn giúp mình đoạn code để in tự động. Yêu cầu mình có gởi trong file đính kèm.
Trân trọng cảm ơn.
 

File đính kèm

Mình có một danh sách học sinh các lớp. Mỗi lần mình muốn in danh sách từng lớp thì lọc và bấm in rất lâu. Nhờ các Anh chị và các bạn giúp mình đoạn code để in tự động. Yêu cầu mình có gởi trong file đính kèm.
Trân trọng cảm ơn.
Đợi tôi khoảng 5 phút nhé! Sắp xong cho bạn rồi? Mà dưc liệu thật bạn có nhiều lớp không?
 
Upvote 0
Mình có một danh sách học sinh các lớp. Mỗi lần mình muốn in danh sách từng lớp thì lọc và bấm in rất lâu. Nhờ các Anh chị và các bạn giúp mình đoạn code để in tự động. Yêu cầu mình có gởi trong file đính kèm.
Trân trọng cảm ơn.
Nếu có máy in thì in thử luôn xem sao, chọn ít lớp thôi cho đỡ tốn giấy, ví dụ từ 11B đến 11D chẳng hạn! Thử luôn nếu trục trặc chỗ nào tôi sửa luôn nhé! Hồi âm lại ngay cho tôi. Tôi không có máy in nên không Test được.
P/S: Bài này của bạn khá hóc búa đó.
 
Lần chỉnh sửa cuối:
Upvote 0
Yêu cầu của bạn chứa nhiều rũi ro lắm đó!

- Nhờ các Anh chị và các bạn giúp mình viết đoạn code in Danh sách lớp.
Ví dụ: Mình chọn in từ lớp 11A đến 11C thì ô A5 sẽ tự động thay đổi
các giá trị từ 11A đến 11C và in luôn.

Đã là CSDL, tuy không lớn, nhưng ta thao tác trên nó thì nguy cơ hư hòng là rất cao;
Ví dụ macro đang vận hành giữa chừng thì mất điện; Lúc đó thì CSDL của bạn chả còn là chuột, cũng chưa là mèo.

Thông thường CSDL liệu cần/được lọc trích ra 1 nơi (1 trang tính mới). Ta toàn quyền xào hay nấu trên trang mới này mà không sợ CSDL ban đầu bị tổn thương.

Hơn nữa, tại trang 'BCao' này ta có thể diêm dúa, màu mè cho B/C của mình; Còn ở CSDL thì số liệu cần đúng, đủ & chính xác là iêu cầu tối thượng.

Vài lời những mong bạn để í tới & chúc cuối tuần vui vẻ!
 
Upvote 0
Đã là CSDL, tuy không lớn, nhưng ta thao tác trên nó thì nguy cơ hư hòng là rất cao;
Ví dụ macro đang vận hành giữa chừng thì mất điện; Lúc đó thì CSDL của bạn chả còn là chuột, cũng chưa là mèo.

Thông thường CSDL liệu cần/được lọc trích ra 1 nơi (1 trang tính mới). Ta toàn quyền xào hay nấu trên trang mới này mà không sợ CSDL ban đầu bị tổn thương.

Hơn nữa, tại trang 'BCao' này ta có thể diêm dúa, màu mè cho B/C của mình; Còn ở CSDL thì số liệu cần đúng, đủ & chính xác là iêu cầu tối thượng.

Vài lời những mong bạn để í tới & chúc cuối tuần vui vẻ!
Tôi thì lại nghĩ chẳng anh hưởng gì cả! Còn nếu như thực sự nếu tác giả sợ ảnh hưởng thì copy File gốc ra thêm mấy bản nữa cất đi đề phòng.
Xem đã đúng ý chưa, phải in thử mới biết được! Báo lại kết quả cho tôi! Tôi không có máy in để test thử!
 

File đính kèm

Upvote 0
???

[thongbao]Tôi thì lại nghĩ chẳng anh hưởng gì cả! Còn nếu như thực sự nếu tác giả sợ ảnh hưởng thì . . . [/thongbao]

Không bổng dưng mà trong MS ACCESS người ta có [Table], [Quey], [Form] & [Report]

Tất nhiên bạn có thể tự động BACKUP file lúc nào bạn muốn! Tùy cách hành xử của mỗi người.

Chúc cả nhà vui vẻ!
 
Upvote 0
Cảm ơn các Anh chị đã giúp đỡ. Mình đã làm được rồi.
Mình tạo thêm thêm 2 ô dò tìm vị trí của Lớp bắt đầu đến Lớp kết thúc.
PHP:
Sub PrintLst()
Dim arr(8)
Dim i As Integer
StartRow = Range("StartRow")
EndRow = Range("EndRow")
For i = StartRow To EndRow
arr(i) = Range("H" & i).Value
Range("A5").Value = arr(i)
ActiveSheet.PrintOut Copies:=1
Next i
End Sub
Một lần nữa cảm ơn các Anh chị đã giúp đỡ.
 
Upvote 0
Tôi thì lại nghĩ chẳng anh hưởng gì cả! Còn nếu như thực sự nếu tác giả sợ ảnh hưởng thì copy File gốc ra thêm mấy bản nữa cất đi đề phòng.
Xem đã đúng ý chưa, phải in thử mới biết được! Báo lại kết quả cho tôi! Tôi không có máy in để test thử!
Cám ơn bạn rất nhiều. File của bạn in tốt nhưng mình không hiểu sao code chạy hơi lâu.
 
Upvote 0
Sao lại lâu nhỉ? Hôm nay tôi test thử ở cơ quan tôi thấy nhanh mà? Hay tại dữ liệu thật của bạn nhiều quá? Hay tại máy in?...
Dữ liệu của mình vẫn như file gởi ở trên, nhưng không biết tại sau lại chạy hơi lâu.
Góp ý một chút: Nếu bạn muốn test in thì bạn chọn mặc định máy in là Foxit Reader PDF Printer (nếu bạn có xài Foxit để đọc file PDF), khi đó nó sẽ tự động in ra file PDF cho bạn kiểm tra khi không có máy in.
Thân.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Dữ liệu của mình vẫn như file gởi ở trên, nhưng không biết tại sau lại chạy hơi lâu.
Góp ý một chút: Nếu bạn muốn test in thì bạn chọn mặc định máy in là Foxit Reader PDF Printer (nếu bạn có xài Foxit để đọc file PDF), khi đó nó sẽ tự động in ra file PDF cho bạn kiểm tra khi không có máy in.
Thân.
Thử in ở máy in khác xem sao?
Thế cách của bạn in có nhanh hơn không? Bạn gửi File của bạn tôi in thử xem sao?
 
Upvote 0
Thử in ở máy in khác xem sao?
Thế cách của bạn in có nhanh hơn không?
Mình thử cả 2 cách, cách của bạn khi bấm lệnh in thì đợi khoảng 6-7s. Không biết do máy mình hay code có nhiều vòng lặp quá nữa. VBA mình không rành.
Mình gởi file bạn test thử.
 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Cách của mình thì bấm 1s là in liền. Không biết là do code hay do vấn đề gì nữa.
Đúng là của bạn nhanh hơn nhưng chỉ 1 chút thôi, tại bạn kết hợp cả mảng nên nhanh hơn nhưng không đáng kể vì dữ liệu ở đây rất ít. Của bạn nhanh hơn của tôi khoảng 2s.
 
Upvote 0
Đúng là của bạn nhanh hơn nhưng chỉ 1 chút thôi, tại bạn kết hợp cả mảng nên nhanh hơn nhưng không đáng kể vì dữ liệu ở đây rất ít. Của bạn nhanh hơn của tôi khoảng 2s.
Mình thấy 2 code này cũng như nhau. Nhưng của bạn chuot0106 có nhầm chỗ màu đỏ
Set rng = .Range("H1:H" & .Range("H65500").End(xlToRight).Row)
Nên vòng lặp
For i = 1 To rng.Rows.Count
............
Next i
Chạy 65500 vòng.
 
Upvote 0
Mình có một danh sách học sinh các lớp. Mỗi lần mình muốn in danh sách từng lớp thì lọc và bấm in rất lâu. Nhờ các Anh chị và các bạn giúp mình đoạn code để in tự động. Yêu cầu mình có gởi trong file đính kèm.
Trân trọng cảm ơn.

Bạn thử code này. Bạn chỉ cần nhập từ lớp đến lớp và bấm lệnh In. Nhanh hay chậm chủ yếu là do máy in.
Mã:
Sub InDanhSach()
    Application.ScreenUpdating = False
    On Error Resume Next
    [h1:h1000].Clear
    [e7:e1000].AdvancedFilter 2, [h1], Unique:=True
    [h2:h1000].Sort [h2], 1
    tmp1 = [h2:h1000].Find([j1]).Address
    tmp1 = [h2:h1000].Find([j2]).Address
    For Each cls In Range(tmp1, tmp2)
        [a5] = cls
        [e7:e1000].AutoFilter 1, cls
        ActiveSheet.PrintOut Copies:=1
    Next
    Selection.AutoFilter
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Mình thấy 2 code này cũng như nhau. Nhưng của bạn chuot0106 có nhầm chỗ màu đỏ
Set rng = .Range("H1:H" & .Range("H65500").End(xlToRight).Row)
Nên vòng lặp
For i = 1 To rng.Rows.Count
............
Next i
Chạy 65500 vòng.
Cảm ơn Susu16, làm lúc 2h đêm lên không biết nhầm. Vừa xem bóng đá, vừa viết code. He
Vừa xem lại code đúng là nhầm thật.
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn thử code này. Bạn chỉ cần nhập từ lớp đến lớp và bấm lệnh In. Nhanh hay chậm chủ yếu là do máy in.
Mã:
Sub InDanhSach()
    Application.ScreenUpdating = False
    On Error Resume Next
    [h1:h1000].Clear
    [e7:e1000].AdvancedFilter 2, [h1], Unique:=True
    [h2:h1000].Sort [h2], 1
    For Each cls In Range([COLOR=#ff0000][h2][/COLOR], [h2:h1000].Find([j2]).Address)
        [a5] = cls
        [e7:e1000].AutoFilter 1, cls
        ActiveSheet.PrintOut Copies:=1
    Next
    Selection.AutoFilter
End Sub
Có lẽ chỗ màu đỏ phải sửa lại thành [h2:h1000].Find([j1]).Address
 
Upvote 0
Mình có một danh sách học sinh các lớp. Mỗi lần mình muốn in danh sách từng lớp thì lọc và bấm in rất lâu. Nhờ các Anh chị và các bạn giúp mình đoạn code để in tự động. Yêu cầu mình có gởi trong file đính kèm.
Trân trọng cảm ơn.
Tham khảo thêm cách này
Khi chọn vào sheet In sẽ tự động có 1 Listbox chứa DS tên lớp. Nếu Double Click vào 1 lớp nào đó thì trên màn hình thay đổi. Bạn có thể chọn 1 hoặc nhiều lớp để in ra bắng cách ấn giữ Ctrl và Click chọn lớp.
 

File đính kèm

Upvote 0

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

Back
Top Bottom