Giúp tăng tốc xử lý code in hàng loạt

Liên hệ QC

tueyennhi

Thành viên tích cực
Tham gia
18/10/10
Bài viết
1,191
Được thích
105
Chào anh chị
Hiện em đang dùng code này để in hàng loạt dựa trên một form 1 duy nhất
PHP:
Private Sub Button1015_Click()
Dim i%, Tu%, De%
Application.ScreenUpdating = False
Tu = Range("AD2").Value: De = Range("AE2").Value
For i = Tu To De Step 2
    [AE5] = i
    Sheets("Print").PrintOut from:=1, To:=1, copies:=1
Next i
Application.ScreenUpdating = True
End Sub

Nhưng mỗi lần bấm in nó hiện ra thông báo Print, in ít thì không sao, em in số lượng nhiều nên mỗi lần chạy cái này là phải đợi chạy để nó gửi lệnh in thành ra em không làm thêm được các việc trên file excel khác.
Có cách nào đẩy nhanh gửi lệnh in ra không? Bình thường nếu một file in của em có 500 tờ thì nó gửi in rất nhanh. Còn dùng phương pháp này em dùng duy nhất 1 form để in cho 500 người khác nhau thì nó gửi lệnh in từng lần một mất rất nhiều thời gian.
 
Chào anh chị
Hiện em đang dùng code này để in hàng loạt dựa trên một form 1 duy nhất
PHP:
Private Sub Button1015_Click()
Dim i%, Tu%, De%
Application.ScreenUpdating = False
Tu = Range("AD2").Value: De = Range("AE2").Value
For i = Tu To De Step 2
    [AE5] = i
    Sheets("Print").PrintOut from:=1, To:=1, copies:=1
Next i
Application.ScreenUpdating = True
End Sub

Nhưng mỗi lần bấm in nó hiện ra thông báo Print, in ít thì không sao, em in số lượng nhiều nên mỗi lần chạy cái này là phải đợi chạy để nó gửi lệnh in thành ra em không làm thêm được các việc trên file excel khác.
Có cách nào đẩy nhanh gửi lệnh in ra không? Bình thường nếu một file in của em có 500 tờ thì nó gửi in rất nhanh. Còn dùng phương pháp này em dùng duy nhất 1 form để in cho 500 người khác nhau thì nó gửi lệnh in từng lần một mất rất nhiều thời gian.
Thử bỏ câu lệnh [AE5]=i hoặc đem câu lệnh này ra ngoài vòng lặp xem coi có nhanh hơn không
 
Upvote 0
mỗi lần bấm in nó hiện ra thông báo Print
Nếu bạn in máy in thật thì nếu có cái thông báo thì nó chỉ nháy một cái ở màn hình thôi (hoặc không có). Hay là thiết lập máy in nó hiện ra cái thông báo mỗi khi in rồi??? (Nếu phải cái này thì do bạn thiết lập ở máy in thôi).
in số lượng nhiều nên mỗi lần chạy cái này là phải đợi chạy để nó gửi lệnh in
....
nếu một file in của em có 500 tờ thì nó gửi in rất nhanh
Nguyên lý là thế mà. Bạn ra lệnh in từ Excel, nó đóng gói lệnh in (lệnh điều khiển máy in + dữ liệu cần in) vào trình điều khiển máy in, máy in nhận đủ gói dữ liệu thì thực hiện in ra.
Phương thức bạn dùng macro như trên thì mỗi vòng lặp là một lệnh in. Còn in một sheet 500 trang thì bạn có gửi 1 lệnh in thôi.
(Chưa xét tới sức mạnh của máy tính, máy in, tốc độ đường truyền giữa máy tính và máy in) Nếu 500 trang mà tách thành 500 lệnh in thì sẽ chậm hơn 1 lệnh in. Lý do: 500 lệnh in sẽ kèm theo 500 lệnh điều khiển máy in (mặc dù tổng dung lượng gói dữ liệu cần in là như nhau).
Dễ hình dung: Bạn lấy đũa gắp 500 hạt lạc (mỗi lần 1 hạt) với việc lấy cái bát xúc 1 lần 500 hạt lạc. Trường hợp nào mỏi tay hơn, xử lý chậm hơn?

Vậy có 2 phương án:
- Nâng cấp phần cứng của thiết bị (máy tính, máy in, tốc độ đường truyền dữ liệu...)
- Viết code tạo thành 500 trang / 1 sheet rồi mới in.
 
Upvote 0
Nếu bạn in máy in thật thì nếu có cái thông báo thì nó chỉ nháy một cái ở màn hình thôi (hoặc không có). Hay là thiết lập máy in nó hiện ra cái thông báo mỗi khi in rồi??? (Nếu phải cái này thì do bạn thiết lập ở máy in thôi).

Nguyên lý là thế mà. Bạn ra lệnh in từ Excel, nó đóng gói lệnh in (lệnh điều khiển máy in + dữ liệu cần in) vào trình điều khiển máy in, máy in nhận đủ gói dữ liệu thì thực hiện in ra.
Phương thức bạn dùng macro như trên thì mỗi vòng lặp là một lệnh in. Còn in một sheet 500 trang thì bạn có gửi 1 lệnh in thôi.
(Chưa xét tới sức mạnh của máy tính, máy in, tốc độ đường truyền giữa máy tính và máy in) Nếu 500 trang mà tách thành 500 lệnh in thì sẽ chậm hơn 1 lệnh in. Lý do: 500 lệnh in sẽ kèm theo 500 lệnh điều khiển máy in (mặc dù tổng dung lượng gói dữ liệu cần in là như nhau).
Dễ hình dung: Bạn lấy đũa gắp 500 hạt lạc (mỗi lần 1 hạt) với việc lấy cái bát xúc 1 lần 500 hạt lạc. Trường hợp nào mỏi tay hơn, xử lý chậm hơn?

Vậy có 2 phương án:
- Nâng cấp phần cứng của thiết bị (máy tính, máy in, tốc độ đường truyền dữ liệu...)
- Viết code tạo thành 500 trang / 1 sheet rồi mới in.

Phương án hai có vẻ khả thi, đề mình thử. Cảm ơn Befaint nhé!
 
Upvote 0
Thử sửa lại 1 tí.
Mã:
Private Sub Button1015_Click()
Dim i, Tu, De, Dung As Long
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

    Tu = [AD2]
    De = [AE2] 
    Dung = 1
    
    For i = Tu To De Step Dung
        [AD2] = Dung
        ActiveSheet.PrintOut
    Next i

Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
 
Upvote 0
Upvote 0
Thử sửa lại 1 tí.
Mã:
Private Sub Button1015_Click()
Dim i, Tu, De, Dung As Long
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

    Tu = [AD2]
    De = [AE2]
    Dung = 1
 
    For i = Tu To De Step Dung
        [AD2] = Dung
        ActiveSheet.PrintOut
    Next i

Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub

Để mình thử xem.
 
Upvote 0
Hiện tại e đang nhập thủ công đơn hàng của KH vào mẫu rồi in ra, nhờ a/c hướng dẫn dùm e cách lấy dữ liệu theo tên KH điền vào file mẫu và in hàng loạt thành 2 bản được ko ạ
E cảm ơn a/c
 

File đính kèm

  • test cthuc.xlsx
    10.7 KB · Đọc: 10
Upvote 0
Hiện tại e đang nhập thủ công đơn hàng của KH vào mẫu rồi in ra, nhờ a/c hướng dẫn dùm e cách lấy dữ liệu theo tên KH điền vào file mẫu và in hàng loạt thành 2 bản được ko ạ
E cảm ơn a/c
Góp ý cho bạn:
File của bạn là in theo khách hàng (hay đơn hàng), mỗi khách hàng có nhiều chủng loại hải sản và đơn vị tính, nên bài viết trong Topic này không phù hợp với yêu cầu của bạn.
Vì vậy, bạn nên mở Topic mới với tiêu đề là "Cách lập, in và lưu phiếu bán hàng vào sheet theo dõi" (nội dung bên dưới nêu rõ những mong muốn).
Nên có 1 sheet chứa danh mục hải sản với tiêu đề cột: Loại HS, DVT (kg, con, chục), đơn giá. Mục đích: dùng danh mục này để tra cứu và nhập liệu nhanh.
 
Upvote 0
Góp ý cho bạn:
File của bạn là in theo khách hàng (hay đơn hàng), mỗi khách hàng có nhiều chủng loại hải sản và đơn vị tính, nên bài viết trong Topic này không phù hợp với yêu cầu của bạn.
Vì vậy, bạn nên mở Topic mới với tiêu đề là "Cách lập, in và lưu phiếu bán hàng vào sheet theo dõi" (nội dung bên dưới nêu rõ những mong muốn).
Nên có 1 sheet chứa danh mục hải sản với tiêu đề cột: Loại HS, DVT (kg, con, chục), đơn giá. Mục đích: dùng danh mục này để tra cứu và nhập liệu nhanh.
e cảm ơn a
 
Upvote 0
Nếu bạn in máy in thật thì nếu có cái thông báo thì nó chỉ nháy một cái ở màn hình thôi (hoặc không có). Hay là thiết lập máy in nó hiện ra cái thông báo mỗi khi in rồi??? (Nếu phải cái này thì do bạn thiết lập ở máy in thôi).

Nguyên lý là thế mà. Bạn ra lệnh in từ Excel, nó đóng gói lệnh in (lệnh điều khiển máy in + dữ liệu cần in) vào trình điều khiển máy in, máy in nhận đủ gói dữ liệu thì thực hiện in ra.
Phương thức bạn dùng macro như trên thì mỗi vòng lặp là một lệnh in. Còn in một sheet 500 trang thì bạn có gửi 1 lệnh in thôi.
(Chưa xét tới sức mạnh của máy tính, máy in, tốc độ đường truyền giữa máy tính và máy in) Nếu 500 trang mà tách thành 500 lệnh in thì sẽ chậm hơn 1 lệnh in. Lý do: 500 lệnh in sẽ kèm theo 500 lệnh điều khiển máy in (mặc dù tổng dung lượng gói dữ liệu cần in là như nhau).
Dễ hình dung: Bạn lấy đũa gắp 500 hạt lạc (mỗi lần 1 hạt) với việc lấy cái bát xúc 1 lần 500 hạt lạc. Trường hợp nào mỏi tay hơn, xử lý chậm hơn?

Vậy có 2 phương án:
- Nâng cấp phần cứng của thiết bị (máy tính, máy in, tốc độ đường truyền dữ liệu...)
- Viết code tạo thành 500 trang / 1 sheet rồi mới in.
2020 Mình chợt nghĩ liệu có thể nào gói dữ liệu in được ghi nhớ lại cho đến khi kết thúc câu lệnh thì gửi một phát được không nhỉ :p
 
Upvote 0
Web KT

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

Back
Top Bottom