Dựa vào dữ liệu của sheet list bien ban để in các biên bản tự động

Liên hệ QC

hhhhgggg

Thành viên mới
Tham gia
19/10/12
Bài viết
37
Được thích
0
Em có đoạn Code VBA in tự động như sau: ( dùng để in các biên bản của sheet "NB" "PYC" [ " XD" hoặc "PKT" ])
Private Sub CommandButton1_Click()
Dim i, A, B As Integer
Sheets("NB").Select
A = InputBox("In bien ban tu so:")
B = InputBox("den so:")
For i = A To B
Range("o2").Value = i
'ActiveSheet.PrintOut preview:=False 'in
Sheets("NB").Select
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate _
:=True
Sheets("PYC").Select
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=2, Copies:=1, Collate _
:=True
Sheets("XD").Select
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=2, Copies:=1, Collate _
:=True
Next
Sheets("NB").Select
End Sub


Hiện tại em muốn sửa code này để có thêm tùy biến như sau:
Trong file Excel có 1 sheet là "ListBB"
Nếu ô M(i) - i là biến chạy ở trên thuộc sheet ListBB có chữ "XD" thì in sheet "XD"
Nếu ô M(i) - i là biến chạy ở trên thuộc sheet ListBB có chữ "PKT" thì in sheet "PKT"
Các cao thủ sửa giúp em đoạn code này với ạ !
Em xin chân thành cảm ơn ạ !
đây là link file Excel: http://www.mediafire.com/file/1pf8z1o5yamdbd7/Bien ban NT -giang.xls
Đoạn code nằm ở sheet "NB" command button tên là "IN GIANG"
 
Lần chỉnh sửa cuối:
Em có đoạn Code VBA in tự động như sau: ( dùng để in các biên bản của sheet "NB" "PYC" [ " XD" hoặc "PKT" ])
Private Sub CommandButton1_Click()
Dim i, A, B As Integer
Sheets("NB").Select
A = InputBox("In bien ban tu so:")
B = InputBox("den so:")
For i = A To B
Range("o2").Value = i
'ActiveSheet.PrintOut preview:=False 'in
Sheets("NB").Select
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate _
:=True
Sheets("PYC").Select
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=2, Copies:=1, Collate _
:=True
Sheets("XD").Select
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=2, Copies:=1, Collate _
:=True
Next
Sheets("NB").Select
End Sub


Hiện tại em muốn sửa code này để có thêm tùy biến như sau:
Trong file Excel có 1 sheet là "ListBB"
Nếu ô M(i) - i là biến chạy ở trên thuộc sheet ListBB có chữ "XD" thì in sheet "XD"
Nếu ô M(i) - i là biến chạy ở trên thuộc sheet ListBB có chữ "PKT" thì in sheet "PKT"
Các cao thủ sửa giúp em đoạn code này với ạ !
Em xin chân thành cảm ơn ạ !
Bạn sẽ được giúp đỡ nếu sửa lại tiêu đề bài viết (Lý do các anh em trong đây không biết đọc từ này các cao thủ). Thứ hai muốn giúp đỡ có file mới biết dữ liệu bạn ra sao mà giúp chứ.
 
Em có đoạn Code VBA in tự động như sau: ( dùng để in các biên bản của sheet "NB" "PYC" [ " XD" hoặc "PKT" ])
Private Sub CommandButton1_Click()
......................................................................................................
Các cao thủ sửa giúp em đoạn code này với ạ !
Em xin chân thành cảm ơn ạ !
1/ Bạn chờ thành viên nào tự nhận là tài năng và thuộc loại cao thủ (như bạn nêu tại bài 1) thì sẽ trợ giúp.
2/ Hỏi bài và đính kèm cái File có nhiều khi còn hiểu không nổi nói chi đến hỏi code.
3/ Nếu có 1 loại mẫu biên bản thì nên dùng 1 sheet làm mẫu rồi sử dụng mẫu này để in.
 
1/ Bạn chờ thành viên nào tự nhận là tài năng và thuộc loại cao thủ (như bạn nêu tại bài 1) thì sẽ trợ giúp.
2/ Hỏi bài và đính kèm cái File có nhiều khi còn hiểu không nổi nói chi đến hỏi code.
3/ Nếu có 1 loại mẫu biên bản thì nên dùng 1 sheet làm mẫu rồi sử dụng mẫu này để in.
Vâng em xin rút kinh nghiệm lần sau và xin tiếp thu ạ !
Đây là link file Excel: http://www.mediafire.com/file/1pf8z1o5yamdbd7/Bien ban NT -giang.xls
Đoạn code nằm ở sheet "NB" command button tên là "IN GIANG"
 
Vâng em xin rút kinh nghiệm lần sau và xin tiếp thu ạ !
Đây là link file Excel: http://www.mediafire.com/file/1pf8z1o5yamdbd7/Bien ban NT -giang.xls
Đoạn code nằm ở sheet "NB" command button tên là "IN GIANG"
Góp ý cho bạn:
1/ Tiêu đề bài viết bạn nên sửa là: Dựa vào dữ liệu của sheet list bien ban để in các biên bản (cho phù hợp với nội quy của diễn đàn). Cách sửa lại tiêu đề bài viết:
Khi đăng nhập xong, vào Công cụ chủ đề (trên cùng bên phải bài viết), chọn Edit Title , nó hiện ra hộp thoại để sửa tiêu đề, khi sửa xong nhấn nút Lưu thay đổi.

2/ Theo tôi thì chỉ dùng 1 code là in được các biên bản (nhưng chưa rảnh thiết kế lại tiêu đề sheet list bien ban. Chờ các thành viên khác giúp vậy.
 
Vâng em xin rút kinh nghiệm lần sau và xin tiếp thu ạ !
Đây là link file Excel: http://www.mediafire.com/file/1pf8z1o5yamdbd7/Bien ban NT -giang.xls
Đoạn code nằm ở sheet "NB" command button tên là "IN GIANG"
Trong file của bạn đúng như @be09 nói, chỉ cần một đoạn code là sử dụng được cho tất cả các sheet. Tôi xem file bạn chưa thấy cột M có dữ liệu, trong khi bạn nói ô M(i) có chữ XD. Tôi xem file bạn thấy cột M không có dữ liệu. Bạn mô tả kỷ lại tôi sẽ viết code giúp phần in.
 
Trong file của bạn đúng như @be09 nói, chỉ cần một đoạn code là sử dụng được cho tất cả các sheet. Tôi xem file bạn chưa thấy cột M có dữ liệu, trong khi bạn nói ô M(i) có chữ XD. Tôi xem file bạn thấy cột M không có dữ liệu. Bạn mô tả kỷ lại tôi sẽ viết code giúp phần in.
Em xin lỗi vì hôm trước cột M đó e chưa ghi nội dung vào, em update lại file excel đây ạ : http://www.mediafire.com/file/gw7fa6x4l9inm7v/Bien ban NT -giang.xls
Sheet "NB" và "PYC" thì mỗi lần chạy i luôn in, còn sheet "XD" và "PKT" thì chỉ in khi cột M của sheet "list bien ban" có chữ đó. Tức là nếu ở cột M của dòng tương ứng ,có chữ "XD" thì in sheet "XD" và nó có chữ "PKT" thì in sheet PKT. Anh sửa giúp em với ạ, em cũng biết là chỉ 1 dòng code là xong nhưng em ko viết nổi nên nhờ các anh chị giúp em ạ !
em xin chân thành cảm ơn !
 
Em xin lỗi vì hôm trước cột M đó e chưa ghi nội dung vào, em update lại file excel đây ạ : http://www.mediafire.com/file/gw7fa6x4l9inm7v/Bien ban NT -giang.xls
Sheet "NB" và "PYC" thì mỗi lần chạy i luôn in, còn sheet "XD" và "PKT" thì chỉ in khi cột M của sheet "list bien ban" có chữ đó. Tức là nếu ở cột M của dòng tương ứng ,có chữ "XD" thì in sheet "XD" và nó có chữ "PKT" thì in sheet PKT. Anh sửa giúp em với ạ, em cũng biết là chỉ 1 dòng code là xong nhưng em ko viết nổi nên nhờ các anh chị giúp em ạ !
em xin chân thành cảm ơn !
Bạn thử code này xem sao? (Tôi chưa test thử). Có gì chưa đúng thì tính tiếp.
Mã:
Function Check_Sheet(NameS As String) As Boolean
Dim Sh As Worksheet
On Error Resume Next
Set Sh = ThisWorkbook.Sheets(NameS)
On Error GoTo 0
Check_Sheet = Not Sh Is Nothing
End Function
Public Sub GPE()
Dim i, A, B As Integer
Dim s As String
A = Application.InputBox("In bien ban tu so:", Type:=1)
B = Application.InputBox("den so:", Type:=1)
    For i = A To B
        s = Sheet2.Range("M" & (3 + i)).Value
        If Check_Sheet(s) Then
            Sheets(s).Range("o2").Value = i
            Sheets("XD").PrintOut From:=1, To:=2, Copies:=1, Collate:=True
        End If
    Next
End Sub
 
Bạn thử code này xem sao? (Tôi chưa test thử). Có gì chưa đúng thì tính tiếp.
Mã:
Function Check_Sheet(NameS As String) As Boolean
Dim Sh As Worksheet
On Error Resume Next
Set Sh = ThisWorkbook.Sheets(NameS)
On Error GoTo 0
Check_Sheet = Not Sh Is Nothing
End Function
Public Sub GPE()
Dim i, A, B As Integer
Dim s As String
A = Application.InputBox("In bien ban tu so:", Type:=1)
B = Application.InputBox("den so:", Type:=1)
    For i = A To B
        s = Sheet2.Range("M" & (3 + i)).Value
        If Check_Sheet(s) Then
            Sheets(s).Range("o2").Value = i
            Sheets("XD").PrintOut From:=1, To:=2, Copies:=1, Collate:=True
        End If
    Next
End Sub
Code ban đầu của em là SUB ạ, và nó có command button click nên khi copy code này vào nó không chạy . với lại ở đây bị thiếu 2 dòng lệnh in 2 sheet "NB" và "PYC" cái này em thêm được.
Nhưng khi chạy bằng Function của anh viết bằng cách bấm F5 thì nó luôn in sheed "XD", không đúng theo yêu cầu là kiểm tra giá trị tương ứng ở cột "M" để in , nếu cột "M" có chữ "XD" thì in sheet "XD", và nó có chữ "PKT" thì in sheet "PKT".Anh chỉnh lại code giúp em với ạ !
 
Lần chỉnh sửa cuối:
Code ban đầu của em là SUB ạ, và nó có command button click nên khi copy code này vào nó không chạy . với lại ở đây bị thiếu 2 dòng lệnh in 2 sheet "NB" và "PYC" cái này em thêm được.
Nhưng khi chạy bằng Function của anh viết bằng cách bấm F5 thì nó luôn in sheed "XD", không đúng theo yêu cầu là kiểm tra giá trị tương ứng ở cột "M" để in , nếu cột "M" có chữ "XD" thì in sheet "XD", và nó có chữ "PKT" thì in sheet "PKT".Anh chỉnh lại code giúp em với ạ !
Nhằm, bạn sửa lại code một chút.
Mã:
Function Check_Sheet(NameS As String) As Boolean
Dim Sh As Worksheet
On Error Resume Next
Set Sh = ThisWorkbook.Sheets(NameS)
On Error GoTo 0
Check_Sheet = Not Sh Is Nothing
End Function
Public Sub GPE()
Dim i, A, B As Integer
Dim s As String
A = Application.InputBox("In bien ban tu so:", Type:=1)
B = Application.InputBox("den so:", Type:=1)
    For i = A To B
        s = Sheet2.Range("M" & (3 + i)).Value
        If Check_Sheet(s) Then
            Sheets(s).Range("o2").Value = i
            Sheets(s).PrintOut From:=1, To:=2, Copies:=1, Collate:=True
        End If
    Next
End Sub
 
Nhằm, bạn sửa lại code một chút.
Mã:
Function Check_Sheet(NameS As String) As Boolean
Dim Sh As Worksheet
On Error Resume Next
Set Sh = ThisWorkbook.Sheets(NameS)
On Error GoTo 0
Check_Sheet = Not Sh Is Nothing
End Function
Public Sub GPE()
Dim i, A, B As Integer
Dim s As String
A = Application.InputBox("In bien ban tu so:", Type:=1)
B = Application.InputBox("den so:", Type:=1)
    For i = A To B
        s = Sheet2.Range("M" & (3 + i)).Value
        If Check_Sheet(s) Then
            Sheets(s).Range("o2").Value = i
            Sheets(s).PrintOut From:=1, To:=2, Copies:=1, Collate:=True
        End If
    Next
End Sub
code chạy đúng rồi nhưng mà nó là Sub của Private Sub CommandButton1_Click() chứ không phải Function,
Anh chỉnh lại cái đoạn đầu để e paste code vào
Private Sub CommandButton1_Click() giúp em với ạ !
 
code chạy đúng rồi nhưng mà nó là Sub của Private Sub CommandButton1_Click() chứ không phải Function,
Anh chỉnh lại cái đoạn đầu để e paste code vào
Private Sub CommandButton1_Click() giúp em với ạ !
Bạn đặt lệnh này sau Private Sub CommandButton1_Click()
Mã:
Call GPE
 
Bạn đặt lệnh này sau Private Sub CommandButton1_Click()
Mã:
Call GPE
Anh kiểm tra lại giúp em với, cái đoạn code : s = Sheet2.Range("M" & (3 + i)).Value
nó không khớp với dòng có số thứ tự biên bản ạ. Tức là mình phải tham chiếu từ cái số thứ tự biên bản để ra cái "XD" hoặc "PYC" thì nó mới thẳng hàng được ạ. Vì cái STT biên bản và STT của dòng excel không khớp nhau cho nên nó chạy sai ạ ! Anh ngâm cứu xử lý giúp em với ạ !
Đây là code:
Private Sub CommandButton1_Click()
Call GPE
End Sub
Function Check_Sheet(NameS As String) As Boolean
Dim Sh As Worksheet
On Error Resume Next
Set Sh = ThisWorkbook.Sheets(NameS)
On Error GoTo 0
Check_Sheet = Not Sh Is Nothing
End Function
Public Sub GPE()
Dim i, A, B As Integer
Dim s As String
A = Application.InputBox("In bien ban tu so:", Type:=1)
B = Application.InputBox("den so:", Type:=1)
For i = A To B
Sheets("NB").Select
Range("o2").Value = i
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate _
:=True
Sheets("PYC").Select
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=2, Copies:=1, Collate _
:=True
s = Sheet2.Range("M" & (3 + i)).Value
If Check_Sheet(s) Then
Sheets(s).Range("o2").Value = i
Sheets(s).PrintOut From:=1, To:=2, Copies:=1, Collate:=True
End If
Sheets("NB").Select
Next
End Sub


Lỗi như sau: Ví dụ in biên bản từ số 3 đến 4 thì chạy đúng
Nhưng in biên bản từ 45 đến 46 thì chạy sai ( biên bản số 45 nó lại in sheet "PKT" chứ ko phải sheet "XD"
đây là file excel ạ : http://www.mediafire.com/file/9xc4vu9wrwp4952/Bien ban NT mau moi 3ok.xls
 
Lần chỉnh sửa cuối:
Vì cái STT biên bản và STT của dòng excel không khớp nhau cho nên nó chạy sai ạ ! Anh ngâm cứu xử lý giúp em với ạ !
Lỗi như sau: Ví dụ in biên bản từ số 3 đến 4 thì chạy đúng
Nhưng in biên bản từ 45 đến 46 thì chạy sai ( biên bản số 45 nó lại in sheet "PKT" chứ ko phải sheet "XD"
Cái này bạn phải ráng chịu chứ sao lại bảo tôi nghiên cứu. Tôi ví dụ nhé nếu tôi yêu cầu bạn in SBB thứ 13 thì bạn sẽ in cái nào (Có 2 số 13 ở dòng 16 và 26), máy tính rất thông minh nhưng chỉ làm việc theo điều khiển của con người thôi, muốn vậy bạn phải chỉ chính xác thì nó mới thực hiện chính xác cho bạn chứ.
Theo tôi thì bạn phải có cột nào đó mà các giá trị trong cột này phải khác nhau (như CMND vậy), vậy khi ra lệnh in nó sẽ lấy cột này làm tiêu chuẩn để in.
 
Cái này bạn phải ráng chịu chứ sao lại bảo tôi nghiên cứu. Tôi ví dụ nhé nếu tôi yêu cầu bạn in SBB thứ 13 thì bạn sẽ in cái nào (Có 2 số 13 ở dòng 16 và 26), máy tính rất thông minh nhưng chỉ làm việc theo điều khiển của con người thôi, muốn vậy bạn phải chỉ chính xác thì nó mới thực hiện chính xác cho bạn chứ.
Theo tôi thì bạn phải có cột nào đó mà các giá trị trong cột này phải khác nhau (như CMND vậy), vậy khi ra lệnh in nó sẽ lấy cột này làm tiêu chuẩn để in.
vâng. cảm ơn anh đã góp ý. Nhưng mình không dùng hàm tham chiếu trong excel để tham chiếu giá trị đưa vào VBA được ạ ? Xong đưa thêm if vào để in ý.
 
vâng. cảm ơn anh đã góp ý. Nhưng mình không dùng hàm tham chiếu trong excel để tham chiếu giá trị đưa vào VBA được ạ ? Xong đưa thêm if vào để in ý.
Làm thì được nhưng bạn sẽ rối thêm, thôi thì bạn cứ tạo thêm cột STT nửa và in dựa vào cột này là được.
 
Làm thì được nhưng bạn sẽ rối thêm, thôi thì bạn cứ tạo thêm cột STT nửa và in dựa vào cột này là được.
em không hiểu làm thêm cột STT nữa kiểu gì ạ ? vì trong CODE em hiểu là nó lấy stt theo stt dòng của Excel, mà mình phải phân từng hạng mục nên cái stt dòng excel đó sẽ ko trùng với stt của từng biên bản được.
 
Làm thì được nhưng bạn sẽ rối thêm, thôi thì bạn cứ tạo thêm cột STT nửa và in dựa vào cột này là được.
Code chỉnh sửa chạy rồi ạ, nhưng mà hiện giờ phải điều chỉnh một chút như sau : nếu cột M của sheet "listBB" là "PYC" thì chỉ in sheet "PYC" thôi ạ, còn nếu cột M là "XD" thì in cả 3 sheet "NB" + "PYC" + "XD " ạ
Anh chị nào chỉnh giúp em đoạn CODE này với ạ !

Private Sub CommandButton1_Click()
Call GPE
End Sub
Function Check_Sheet(NameS As String) As Boolean
Dim Sh As Worksheet
On Error Resume Next
Set Sh = ThisWorkbook.Sheets(NameS)
On Error GoTo 0
Check_Sheet = Not Sh Is Nothing
End Function
Public Sub GPE()
Dim i, A, B As Integer
Dim s As String
A = Application.InputBox("In bien ban tu so:", Type:=1)
B = Application.InputBox("den so:", Type:=1)
For i = A To B
Sheets("NB").Select
Range("o2").Value = i
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate _
:=True
Sheets("PYC").Select
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=2, Copies:=1, Collate _
:=True
s = Sheet2.Range("M" & (3 + i)).Value
If Check_Sheet(s) Then
Sheets(s).Range("o2").Value = i
Sheets(s).PrintOut From:=1, To:=2, Copies:=1, Collate:=True
End If
Sheets("NB").Select
Next
End Sub
 
Web KT
Back
Top Bottom