[Giúp đỡ] Sửa giúp Code VBA để in nhiều Sheet (1 người xem)

Liên hệ QC

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

haukidien

Thành viên mới
Tham gia
4/8/10
Bài viết
19
Được thích
0
Em có file dữ liệu cọc với code In tự động nhưng chỉ được 1 sheet Bìa (Sheet 3), vậy xin các Anh/chị giúp em chèn thêm code để có thể in 4 sheet : Bìa, Nhật ký cọc, Đổ Bê tông, BBLM (sheet 3,4,5,6,7) trong 1 lần in với ạ.
Code trong file excel như sau: (sheet 3 là Bìa, sheet4 là nhật ký cọc, sheet5 là ...)
Mã:
Sub print_td()
Dim p1 As Long, p2 As Long, n As Long, i As Long, j As Long
p1 = Sheet3.Range("N1").Value
p2 = Sheet3.Range("N2").Value
n = Sheet3.Range("N4").Value 'so bo can in
For j = 1 To n
  For i = p1 To p2
    Sheet3.Range("N3").Value = i
    'Sheet3.PrintOut
    Sheet3.PrintOut
  Next i
Next j
 
End Sub
 

File đính kèm

PHP:
Sub inNhieuSheets()
call inTheoSheet (Sheet3)
call inTheoSheet (Sheet4)
call inTheoSheet (Sheet5)
call inTheoSheet (Sheet6)
call inTheoSheet (Sheet7)
End Sub

'*************'
private Sub inTheoSheet(byval ws as worksheet)
Dim p1 As Long, p2 As Long, n As Long, i As Long, j As Long
p1 = ws.Range("N1").Value
p2 = ws.Range("N2").Value
n = ws.Range("N4").Value 'so bo can in'
For j = 1 To n
  For i = p1 To p2
    ws.Range("N3").Value = i
    'ws.PrintOut'
    ws.PrintOut
  Next i
Next j
End Sub
 
Upvote 0
PHP:
Sub inNhieuSheets()
call inTheoSheet (Sheet3)
call inTheoSheet (Sheet4)
call inTheoSheet (Sheet5)
call inTheoSheet (Sheet6)
call inTheoSheet (Sheet7)
End Sub

'*************'
private Sub inTheoSheet(byval ws as worksheet)
Dim p1 As Long, p2 As Long, n As Long, i As Long, j As Long
p1 = ws.Range("N1").Value
p2 = ws.Range("N2").Value
n = ws.Range("N4").Value 'so bo can in'
For j = 1 To n
  For i = p1 To p2
    ws.Range("N3").Value = i
    'ws.PrintOut'
    ws.PrintOut
  Next i
Next j
End Sub
Cảm ơn anh. Tuy nhiên em chép code này vào file thì chạy bị lỗi : Compile error: Syntax error ạ! xin giúp đỡ thêm với
 
Upvote 0
Bạn kiểm tra lại nội dung bạn chép có giống với cái này không?

View attachment 263253
xin lỗi anh, em chép chắc bị lỗi 1 chỗ nào
Em đã thêm dòng N1, N2, N3, N4 vào các sheet kia thì chạy được rồi
Anh hổ trợ thêm xíu ạ, muốn in cả mấy sheet đó vào 1 file PDF thì thêm code gì ạ?
Và em muốn in từ sheet 3 đến sheet 7, rồi quay lại in tiếp sheet 3 đến 7 cho số tiếp theo, ở đây nó in hết 1 loạt sheet 3 rồi mới in sheet 4 ạ, anh chỉnh giúp em với!
cảm ơn anh rất nhiều!
 
Lần chỉnh sửa cuối:
Upvote 0
qua tới đây rồi à! Code nãy mình hỗ trợ copy paste vô là chạy dc luôn rồi! đi đâu hỏi hoài thế!
Bài đã được tự động gộp:

Sub print_td()
Dim p1 As Long, p2 As Long, n As Long, i As Long, j As Long
p1 = Sheet3.Range("N1").Value
p2 = Sheet3.Range("N2").Value
n = Sheet3.Range("N4").Value 'so bo can in
For j = 1 To n
For i = p1 To p2
Sheet3.Range("N3").Value = i
'Sheet3.PrintOut
Sheet3.PrintOut
Next i
Next j

End Sub


thay the nguyen đoạn trên bằng

Sub print_td()

Dim i As Integer

For i = 3 To 7 ' lap tu 3 den 7 de lay sheet3 den sheet7

Sheet(i).PrintOut From:=Sheet3.Range("N1").Value, To:=Sheet3.Range("N2").Value, Copies:=Sheet3.Range("N4").Value

Next i

End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
qua tới đây rồi à! Code nãy mình hỗ trợ copy paste vô là chạy dc luôn rồi! đi đâu hỏi hoài thế!
Bài đã được tự động gộp:

Sub print_td()
Dim p1 As Long, p2 As Long, n As Long, i As Long, j As Long
p1 = Sheet3.Range("N1").Value
p2 = Sheet3.Range("N2").Value
n = Sheet3.Range("N4").Value 'so bo can in
For j = 1 To n
For i = p1 To p2
Sheet3.Range("N3").Value = i
'Sheet3.PrintOut
Sheet3.PrintOut
Next i
Next j

End Sub


thay the nguyen đoạn trên bằng

Sub print_td()

Dim i As Integer

For i = 3 To 7 ' lap tu 3 den 7 de lay sheet3 den sheet7

Sheet(i).PrintOut From:=Sheet3.Range("N1").Value, To:=Sheet3.Range("N2").Value, Copies:=Sheet3.Range("N4").Value

Next i

End Sub
dạ vâng, cái này em coppy vào nhưng ko chạy được, em nhờ anh hổ trợ thêm nhưng Admin bên kia nói vậy nên em ko hỏi nữa, sợ phiền! cảm ơn anh!
Bài đã được tự động gộp:

Đờ cờ ca ô là cái gì?
Đờ cờ nhá?


Khô
Đờ cờ ca ô là cái gì?
Đờ cờ nhá?


Không hiểu gì. Mô tả bao giờ hiểu mới làm được.
dạ như này ạ:
- ví dụ 1 cọc của em bao gồm 5 tờ là sheet3, sheet 4, sheet 5, sheet 6, sheet 7
em muốn in cọc thứ 1 gồm sheet3, sheet4, sheet5, sheet6 , sheet 7. xong 1 cọc, rồi in tiếp cọc thứ 2 , cọc thứ 3
Hiện tại theo code trên thì sẽ in Sheet3 cọc 1, cọc 2, rồi sheet4 cọc 1, cọc 2,.....
Anh chỉnh code giúp em là in sẽ chạy Sheet 3, sheet 4, sheet5, sheet 6, sheet 7 cho cọc 1 xong, rồi lại chạy cọc thứ 2 , cọc thứ 3 ạ!
Thanks anh!
 
Upvote 0
- ví dụ 1 cọc của em bao gồm 5 tờ là sheet3, sheet 4, sheet 5, sheet 6, sheet 7
em muốn in cọc thứ 1 gồm sheet3, sheet4, sheet5, sheet6 , sheet 7. xong 1 cọc, rồi in tiếp cọc thứ 2 , cọc thứ 3
Hiện tại theo code trên thì sẽ in Sheet3 cọc 1, cọc 2, rồi sheet4 cọc 1, cọc 2,.....
Anh chỉnh code giúp em là in sẽ chạy Sheet 3, sheet 4, sheet5, sheet 6, sheet 7 cho cọc 1 xong, rồi lại chạy cọc thứ 2 , cọc thứ 3 ạ!

PHP:
'Lập công thức trên bảng tính cho các Sheet4-5-6-7'
'=Sheet3!N1 - N2 - N4'
Sub inBienBan()
Dim p1 As Long, p2 As Long, n As Long, i As Long, j As Long
p1 = Sheet3.Range("N1").Value
p2 = Sheet3.Range("N2").Value
n = Sheet3.Range("N4").Value 'so bo can in'
For j = 1 To n
  For i = p1 To p2
    Sheet3.Range("N3").Value = i
    Sheet3.PrintOut
    Sheet4.PrintOut
    Sheet5.PrintOut
    Sheet6.PrintOut
    Sheet7.PrintOut
  Next i
Next j
End Sub
 
Upvote 0
PHP:
'Lập công thức trên bảng tính cho các Sheet4-5-6-7'
'=Sheet3!N1 - N2 - N4'
Sub inBienBan()
Dim p1 As Long, p2 As Long, n As Long, i As Long, j As Long
p1 = Sheet3.Range("N1").Value
p2 = Sheet3.Range("N2").Value
n = Sheet3.Range("N4").Value 'so bo can in'
For j = 1 To n
  For i = p1 To p2
    Sheet3.Range("N3").Value = i
    Sheet3.PrintOut
    Sheet4.PrintOut
    Sheet5.PrintOut
    Sheet6.PrintOut
    Sheet7.PrintOut
  Next i
Next j
End Sub
lập công thức trên bảng tính sheet 4-5-6-7 có nghĩa là ở sheet 4-5-6-7 tại vị trí N1, N2, N4 dữ liệu giống như sheet 3 phải ko ạ?
 
Upvote 0
Có đúng đâu.
Viết sai Sheet(i)
Nếu có viết đúng Sheets(i) cũng không được. Đấy là gọi theo sheet index, cái của người ta gọi theo code name.
bạn nói thiếu chữ s là đúng! Nhưng lý do gì code sai?

?Sheets(3).name
BÌA
?Sheets(4).name
bc T?NG H?P
?Sheets(5).name
Nh?t ký c?c
?Sheets(6).name
Ð? bê tông
?Sheets(7).name
BBLM
 
Upvote 0
Cần tìm hiểu kỹ về sheet name, sheet index, code name. Vẫn lơ mơ thế kia thì chưa áp dụng được.
 
Upvote 0
Upvote 0
dạ file người khác làm ạ
Bài đã được tự động gộp:

có file này in từng sheet hay mà em gà VBA nên ko mò đc! gởi các anh. pass code: 123
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Vậy bạn còn chưa nắm được cách thức hoạt động và liên hệ của các biểu mẫu đó với nhau á.

Bạn bình tĩnh tìm hiểu thêm đi, bạn làm như thế kia là hỏng biểu mẫu của người ta rồi.
dạ ko sao đâu ạ, biểu mẫu em coppy ra ạ! Với biểu mẫu này vào làm người ta đưa in từng tờ 1 nên em muốn VBA để in được nhiều và nhanh hơn ạ
 
Upvote 0
Bạn còn chưa hiểu biểu mẫu người ta thiết kế, hoạt động ra sao mà. Làm sai rồi còn đâu.

View attachment 263311
Dữ liệu các sheet lấy và liên kết thì em biết ạ, còn về code thì em gần như ko biết.
Ý anh nói trong code này để các sheet 4,5,6,7 chạy được theo VBA anh đã viết thì dữ liệu các sheet 4,5,6,7 phải lấy từ giá trị Cột N giống như Sheet 3 , phải như vậy không anh?
 
Upvote 0
Bạn dùng code này thử
Mã:
Sub inbienban()
 
On Error GoTo ex

Dim pr As Variant

Dim ichg As Integer, i1 As Integer, i2 As Integer, i3 As Integer

i1 = Sheet3.Range("N1").Value

i2 = Sheet3.Range("N2").Value

i3 = Sheet3.Range("N4").Value
 
pr = Application.Dialogs(xlDialogPrinterSetup).Show

If pr = False Then Exit Sub

   For ichg = i1 To i2
 
    Sheet3.Range("N3").Formula = ichg
 
    Calculate
    Sheet3.PrintOut ActivePrinter:=pr, Copies:=i3
    Sheet5.PrintOut ActivePrinter:=pr, Copies:=i3
    Sheet6.PrintOut ActivePrinter:=pr, Copies:=i3
    Sheet7.PrintOut ActivePrinter:=pr, Copies:=i3
   Next


Exit Sub

ex:

MsgBox "Kiem tra lai so lieu nhap vao"

End Sub
Mình chỉnh thêm là khi nhảy trang in thì nó sẽ xuất số liệu theo đúng STT ở bảng tổng hợp

PS: Đối với sheet 4 bạn đang ẩn sheet. Và sheet này chưa liên kết với số liệu ở bảng tổng hợp và tọa độ
 

File đính kèm

Upvote 0
Dữ liệu các sheet lấy và liên kết thì em biết ạ, còn về code thì em gần như ko biết.
Ý anh nói trong code này để các sheet 4,5,6,7 chạy được theo VBA anh đã viết thì dữ liệu các sheet 4,5,6,7 phải lấy từ giá trị Cột N giống như Sheet 3 , phải như vậy không anh?

Không phải code. Code ngon lành lắm rồi.

Hai dòng ghi chú này bạn chưa làm được. Lý do là bạn không hiểu cái biểu mẫu của người như thế nào cả.
1627615354037.png

Ở Sheet3 là N1. Còn ở sheet khác là ở ô khác.
Ví dụ như hình là ô Y1. Vậy thao tác như thế này: Gõ dấu = 1 phát, dùng chuột chỏ tới ô N1 của Sheet3 kia, rồi enter một phát. Vậy là xong.
Có mỗi thế thôi.
Đằng này bạn lại viết vào N1 (tô vàng) là sai bét tè lè nhè rồi. Vì đó là vùng trong biểu mẫu, in ra tờ giấy mà dính cái đó thì làm ăn gì nữa.

1627615375373.png
 
Upvote 0
Bạn dùng code này thử
Mã:
Sub inbienban()
 
On Error GoTo ex

Dim pr As Variant

Dim ichg As Integer, i1 As Integer, i2 As Integer, i3 As Integer

i1 = Sheet3.Range("N1").Value

i2 = Sheet3.Range("N2").Value

i3 = Sheet3.Range("N4").Value
 
pr = Application.Dialogs(xlDialogPrinterSetup).Show

If pr = False Then Exit Sub

   For ichg = i1 To i2
 
    Sheet3.Range("N3").Formula = ichg
 
    Calculate
    Sheet3.PrintOut ActivePrinter:=pr, Copies:=i3
    Sheet5.PrintOut ActivePrinter:=pr, Copies:=i3
    Sheet6.PrintOut ActivePrinter:=pr, Copies:=i3
    Sheet7.PrintOut ActivePrinter:=pr, Copies:=i3
   Next


Exit Sub

ex:

MsgBox "Kiem tra lai so lieu nhap vao"

End Sub
Mình chỉnh thêm là khi nhảy trang in thì nó sẽ xuất số liệu theo đúng STT ở bảng tổng hợp

PS: Đối với sheet 4 bạn đang ẩn sheet. Và sheet này chưa liên kết với số liệu ở bảng tổng hợp và tọa độ
cảm ơn anh với Code này, nó in từ 2 bộ trở lên sẽ in 2 tờ đầu của cung 1 cọc, rồi tiếp 2 tờ sau của cùng 1 cọc
Tuy nhiên nếu chỉ in 1 bộ thì nó chạy chuẩn hết cọc 1 rồi đến cọc 2!
Rất cảm ơn anh!
Bài đã được tự động gộp:

Không phải code. Code ngon lành lắm rồi.

Hai dòng ghi chú này bạn chưa làm được. Lý do là bạn không hiểu cái biểu mẫu của người như thế nào cả.
View attachment 263313

Ở Sheet3 là N1. Còn ở sheet khác là ở ô khác.
Ví dụ như hình là ô Y1. Vậy thao tác như thế này: Gõ dấu = 1 phát, dùng chuột chỏ tới ô N1 của Sheet3 kia, rồi enter một phát. Vậy là xong.
Có mỗi thế thôi.
Đằng này bạn lại viết vào N1 (tô vàng) là sai bét tè lè nhè rồi. Vì đó là vùng trong biểu mẫu, in ra tờ giấy mà dính cái đó thì làm ăn gì nữa.

View attachment 263314
Tô vàng là em cho vào thử đúng chỗ của Sheet 3 thì VBA nó chạy được các sheet ko ạ.
Ví dụ giờ ở sheet 4, lập ô Y1, Y2, Y3, Y4 lấy dữ liệu của ô N1, N2, N3, N4 của sheet 3, dữ liệu bảng biểu sheet 4 phải lấy từ ô Y1, Y2, Y3, Y4 thì mới chạy được hả anh?
Cảm ơn anh!
 
Lần chỉnh sửa cuối:
Upvote 0
cảm ơn anh với Code này, nó in từ 2 bộ trở lên sẽ in 2 tờ đầu của cung 1 cọc, rồi tiếp 2 tờ sau của cùng 1 cọc
Tuy nhiên nếu chỉ in 1 bộ thì nó chạy chuẩn hết cọc 1 rồi đến cọc 2!
Rất cảm ơn anh!
Mã:
Sub inbienban()
On Error GoTo ex
Dim pr As Variant
Dim ichg As Integer, i1 As Integer, i2 As Integer, i3 As Integer, banin As Integer
i1 = Sheet3.Range("N1").Value
i2 = Sheet3.Range("N2").Value
i3 = Sheet3.Range("N4").Value
pr = Application.Dialogs(xlDialogPrinterSetup).Show
If pr = False Then Exit Sub
 For banin = 1 To i3
   For ichg = i1 To i2
    Sheet3.Range("N3").Formula = ichg
    Calculate
    Sheet3.PrintOut ActivePrinter:=pr
    Sheet5.PrintOut ActivePrinter:=pr
    Sheet6.PrintOut ActivePrinter:=pr
    Sheet7.PrintOut ActivePrinter:=pr
   Next
Next
Exit Sub
ex:
MsgBox "Kiem tra lai so lieu nhap vao"
End Sub
Tô vàng là em cho vào thử đúng chỗ của Sheet 3 thì VBA nó chạy được các sheet ko ạ.
Ví dụ giờ ở sheet 4, lập ô Y1, Y2, Y3, Y4 lấy dữ liệu của ô N1, N2, N3, N4 của sheet 3, dữ liệu bảng biểu sheet 4 phải lấy từ ô Y1, Y2, Y3, Y4 thì mới chạy được hả anh?
Cảm ơn anh!
Do bạn không lập file này nên bạn không hiểu liên kết giữa các bảng tính. File mình sửa lại thì nó sẽ liên kết về 1 bảng tính là Sheet3 (bìa)
 
Upvote 0
Private Sub c_Click()Dim t As IntegerFor t = a.Text To b.TextRange("H1").Value = tsheetArray = Array("PYC", "NT", "KT", "KL")'Select specific sheets from workbook, the save all as PDFSheets(sheetArray).SelectSheets(sheetArray).SelectActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _ Filename:=Sheets("PYC").Range("H1"), OpenAfterPublish:=TrueNextEnd Sub
mọi người sửa giúp mình code này với
 
Upvote 0

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

Back
Top Bottom