VBA lưu file, in, và mở lại file gốc ban đầu

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

Emyeuexcel

Thành viên thường trực
Tham gia
9/6/16
Bài viết
284
Được thích
27
Chào các anh chị,

VBA mình mới mò mẫm đang học.
Mình có file đính kèm, có code VBA (mình cóp nhặt lồng ghép code trên mạng). Chân thành cảm ơn các tác giả những code này!
Giờ mình muốn in hàng loạt theo số thứ tự bên sheet Lot, nhưng code này không thực hiện được, chỉ in đúng 1 số nào nhập đầu tiên (vd: 2-5, thì chỉ in số 2)
Nếu mình chịu khó in từng số thì vẫn được. Hiện code này sau khi lưu ra file mới theo ý mình và in xong cho 1 số thứ tự thì ok.
Tuy nhiên nó không mở lại được file gốc ban đầu để in tiếp.
Mong các anh chị vui lòng giúp mình sửa code sao cho nó mở lại file gốc. Và nếu tuyệt vời hơn thì sửa code lưu file, in hàng loạt theo những số thự tự đã nhập vào.
Xin chân thành cảm ơn các anh chị!
 

File đính kèm

  • EPR Tempalte.xlsm
    106.6 KB · Đọc: 14
Cột J sheet In có công thức lấy dữ liệu từ 1 file data khác:
IFERROR(XLOOKUP($A7&"-"&$D$3,'[2023_TRACKTO FOOD IMPORT__UPDATE.xlsx]FRESH FRUITS'!$BJ:$BJ,'[2023_TRACKTO FOOD IMPORT__UPDATE.xlsx]FRESH FRUITS'!$AE:$AE),0)
View attachment 300719
Nó tham chiếu theo ô D3 và cột A.
mà D3 sheet In thì phụ thuộc vào H1 sheet In, H1 chính là số thứ tự bên sheet Lot.
Khi H1 thay đổi thì D3 thay đổi, mà D3 thay đổi thì các dòng khác 0 cột J bên dưới thay đổi theo (tức sản phẩm khác theo lô hàng tương ứng)
Cái data có chữ TRACKTO hơi lớn, không biết sao gởi cho bạn xem.
Bạn thử kiểm tra lại, để có thể chọn các dòng rời rạc thì nhớ giữ phím Ctrl khi chọn các dòng cần lấy tại cột A.
 

File đính kèm

  • EPR Tempalte_2.xlsm
    110.5 KB · Đọc: 7
Upvote 0
Bạn thử kiểm tra lại, để có thể chọn các dòng rời rạc thì nhớ giữ phím Ctrl khi chọn các dòng cần lấy tại cột A.
Bạn Tuấn ơi, cho mình hỏi, vì sao mình so sánh với File Template 2 bạn gởi lần đầu thì thấy code không khác gì mà sao lúc đầu chạy chưa đúng, còn lần sau thì chạy OK nhỉ?
 
Upvote 0
Bạn Tuấn ơi, cho mình hỏi, vì sao mình so sánh với File Template 2 bạn gởi lần đầu thì thấy code không khác gì mà sao lúc đầu chạy chưa đúng, còn lần sau thì chạy OK nhỉ?
Vì file đầu không biết vì lý do gì mà cột J lại mất hết công thức, sau đó mình tải lại file có công thức ở cột J rồi đưa code vào là xong.
 
Upvote 0
À thì ra do cột J chứ không phải do code.
Như vậy là khi tải file về bạn không kiểm tra lại gì cả mà cứ thế chạy luôn, khi thấy sai kết quả mong muốn cũng không kiểm tra lại mà cứ hô lên là sai thôi. Lần sau thì đầu tiên bạn nên kiểm tra file gốc xem có bị thay đổi gì không đã, sau đó mới đến các thứ khác. Làm công việc phải dùng Excel và vào diễn đàn từ 2016 rồi mà vẫn vậy thì hơi bị chán.
 
Upvote 0
Như vậy là khi tải file về bạn không kiểm tra lại gì cả mà cứ thế chạy luôn, khi thấy sai kết quả mong muốn cũng không kiểm tra lại mà cứ hô lên là sai thôi. Lần sau thì đầu tiên bạn nên kiểm tra file gốc xem có bị thay đổi gì không đã, sau đó mới đến các thứ khác. Làm công việc phải dùng Excel và vào diễn đàn từ 2016 rồi mà vẫn vậy thì hơi bị chán.
Cảm ơn bạn góp ý! Mình cứ đinh ninh là file gốc không bị đổi. Mình sẽ chú ý!

Cho mình hỏi thêm chút, nếu muốn các file save as ra value giá trị (không còn công thức) thì mình thêm câu lệnh như thế nào nhỉ?
 
Upvote 0
Cảm ơn bạn góp ý! Mình cứ đinh ninh là file gốc không bị đổi. Mình sẽ chú ý!

Cho mình hỏi thêm chút, nếu muốn các file save as ra value giá trị (không còn công thức) thì mình thêm câu lệnh như thế nào nhỉ?
Cái này trên diễn đàn có nhiều mà, hoặc tìm kiếm trên Google thì bạt ngàn, tự tìm kiếm và thử đi thử lại sẽ nhớ lâu hơn là người khác viết hộ từ A đến Z.
 
Upvote 0
Cái này trên diễn đàn có nhiều mà, hoặc tìm kiếm trên Google thì bạt ngàn, tự tìm kiếm và thử đi thử lại sẽ nhớ lâu hơn là người khác viết hộ từ A đến Z.
Mình làm được rồi.
Trước close, mình thêm sn.UsedRange.Value=sn.UsedRange.Value
Cảm ơn bạn giúp mình nhiều lắm!
 
Upvote 0
Cái này trên diễn đàn có nhiều mà, hoặc tìm kiếm trên Google thì bạt ngàn, tự tìm kiếm và thử đi thử lại sẽ nhớ lâu hơn là người khác viết hộ từ A đến Z.
Bạn ơi, cho mình hỏi thêm về Code hôm trước, nếu Vùng Range này cập nhật thêm, không dừng lại ở dòng 105 thì mình sửa code sao cho nó tự động lấy đến cuối cùng, mỗi khi mình có thêm dòng nhỉ?
With sn.Range("A7:K105")
.AutoFilter Field:=10, Criteria1:="0"
.SpecialCells(xlCellTypeVisible, 12).EntireRow.Delete
End With
 
Upvote 0
Bạn ơi, cho mình hỏi thêm về Code hôm trước, nếu Vùng Range này cập nhật thêm, không dừng lại ở dòng 105 thì mình sửa code sao cho nó tự động lấy đến cuối cùng, mỗi khi mình có thêm dòng nhỉ?
With sn.Range("A7:K105")
.AutoFilter Field:=10, Criteria1:="0"
.SpecialCells(xlCellTypeVisible, 12).EntireRow.Delete
End With
Bạn tìm hiểu code tìm dòng cuối trong vba Excel. Món này còn đơn giản hơn cả món trước bạn đã tìm.
 
Upvote 0
Bạn ơi, cho mình hỏi thêm về Code hôm trước, nếu Vùng Range này cập nhật thêm, không dừng lại ở dòng 105 thì mình sửa code sao cho nó tự động lấy đến cuối cùng, mỗi khi mình có thêm dòng nhỉ?
With sn.Range("A7:K105")
.AutoFilter Field:=10, Criteria1:="0"
.SpecialCells(xlCellTypeVisible, 12).EntireRow.Delete
End With
Code lấy dòng cuối có dữ liệu sẽ có thể như sau:
Mã:
Dim iRow As Long
iRow = Sheet1.Cells(Rows.Count, "A").End(xlUp).Row
Trong code của bạn có thể bổ sung như sau:
Mã:
Dim iRow as Long
iRow = sn.Cells(Rows.Count, "A").End(xlUp).Row

With sn.Range("A7:A" & iRow)
    .AutoFilter Field:=10, Criteria1:="0"
    .SpecialCells(xlCellTypeVisible, 12).EntireRow.Delete
End With
 
Upvote 0
Code lấy dòng cuối có dữ liệu sẽ có thể như sau:
Mã:
Dim iRow As Long
iRow = Sheet1.Cells(Rows.Count, "A").End(xlUp).Row
Trong code của bạn có thể bổ sung như sau:
Mã:
Dim iRow as Long
iRow = sn.Cells(Rows.Count, "A").End(xlUp).Row

With sn.Range("A7:A" & iRow)
    .AutoFilter Field:=10, Criteria1:="0"
    .SpecialCells(xlCellTypeVisible, 12).EntireRow.Delete
End With
Mình cảm ơn bạn rất nhiều!
 
Upvote 0
Code lấy dòng cuối có dữ liệu sẽ có thể như sau:
Mã:
Dim iRow As Long
iRow = Sheet1.Cells(Rows.Count, "A").End(xlUp).Row
Trong code của bạn có thể bổ sung như sau:
Mã:
Dim iRow as Long
iRow = sn.Cells(Rows.Count, "A").End(xlUp).Row

With sn.Range("A7:A" & iRow)
    .AutoFilter Field:=10, Criteria1:="0"
    .SpecialCells(xlCellTypeVisible, 12).EntireRow.Delete
End With
Mà bạn ơi, sao mình thử nó chạy sai. Save ra được file, nhưng không đúng yêu cầu. Bạn xem giúp mình câu lệnh đó ở vị trí nào với.
 

File đính kèm

  • EPR Tempalte_Fresh_Nhập số.xlsm
    94.8 KB · Đọc: 0
  • EPR__APCF_3424_SA.xlsx
    14.9 KB · Đọc: 0
  • EPR__STFR_7124_CN.xlsx
    15.4 KB · Đọc: 0
Upvote 0
Ở đây là muốn để tự tìm hiểu, nắm được bản chất và nhớ lâu hơn, chứ cơm bón tận miệng thế này thì lần sau ai muốn tìm gạo để tự nấu.
Bạn ơi, mình cảm ơn những lời khuyên của bạn!
Nhưng mình cũng mới tìm hiểu VBA nên còn mù mờ lắm
Mong bạn thông cảm!
Ngay cả khi dùng như cũ, mình có thêm 1 số dòng sheet In từ 106 tới 119, và sửa code thành
With sn.Range("A7:L119")
.AutoFilter Field:=11, Criteria1:="0"
.SpecialCells(xlCellTypeVisible, 12).EntireRow.Delete
End With
nó vẫn chạy không đúng.
Bạn xem giúp mình lý do với!
 

File đính kèm

  • EPR Tempalte_Fresh_Nhập số.xlsm
    94.5 KB · Đọc: 0
Upvote 0
Cảm ơn các bạn! Mình tìm hiểu và biết vì sao rồi.
Mình sửa công thức, chạy OK.
 
Upvote 0
Nghe câu này thấy có vẻ không ổn, trong code này có công thức nào đâu mà sửa nhỉ.
Mình sửa công thức Subtotal cột L sheet In bên ngoài file, do mình ghi chưa rõ.
Mà bạn ơi, có công thức nào tổng quát chỗ công thức subtotal này khi mình chèn dòng, nó vẫn sum đến dòng cuối không, nãy quên sửa nó sai á.
 
Upvote 0
Mình sửa công thức Subtotal cột L sheet In bên ngoài file, do mình ghi chưa rõ.
Mà bạn ơi, có công thức nào tổng quát chỗ công thức subtotal này khi mình chèn dòng, nó vẫn sum đến dòng cuối không, nãy quên sửa nó sai á.
Cụ thể là file nào, sheet nào, cột nào, trường hợp nào và muốn như thế nào vậy.
 
Upvote 0
Web KT
Back
Top Bottom