Cần điều chỉnh code VBA in hàng loạt

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

goodwin999

Thành viên mới
Tham gia
16/12/12
Bài viết
23
Được thích
1
Hi các bác,
Mình có file excel đính kèm. Trong đó có code in hàng loạt như sau:

Sub InNgay()
InPhieu True
End Sub

Sub XemTruoc()
InPhieu False
End Sub

Sub InPhieu(Optional ByVal bchk As Boolean = True)
Dim p1, p2, i As Long
With Sheet1 'Sheets("NGHIEM THU")
p1 = .Range("S1").Value '[S1] = Tu sô
p2 = .Range("S2").Value '[S2] = Dên sô
If IsNumeric(p1) = False Or IsNumeric(p2) = False Then
MsgBox "Không phai la sô.", , "Thông báo"
Exit Sub
End If
p1 = Val(p1): p2 = Val(p2)
If p1 > p2 Then
MsgBox "So sau phai >= so truoc.", , "Thông báo"
Exit Sub
End If
For i = p1 To p2
.Range("P1").Value = i '[P1] diên sô cân tham chiêu
If bchk = True Then .PrintOut Else .PrintPreview
Next
End With

End Sub

Trong đó, khi mình nhập số thứ tự cần in vào ô S1, S2 thì bấm button Print sẽ tự động in hàng loạt.
Mình cần điều chỉnh lại code trên với nhu cầu in với số thứ tự cách quãng, không liên tục. Ví dụ như, mình cần in các STT 1, 5, 8, 11 thì nhập số 1, 5, 8, 11 vào ô S3 chẳng hạn thì code sẽ tự động in các STT 1, 5, 8, 11.

Kính nhờ các bác quan tâm và giúp đỡ. Trân trọng!
 

File đính kèm

  • nghiem thu.xlsm
    386.3 KB · Đọc: 14
Hi các bác,
Mình có file excel đính kèm. Trong đó có code in hàng loạt như sau:



Trong đó, khi mình nhập số thứ tự cần in vào ô S1, S2 thì bấm button Print sẽ tự động in hàng loạt.
Mình cần điều chỉnh lại code trên với nhu cầu in với số thứ tự cách quãng, không liên tục. Ví dụ như, mình cần in các STT 1, 5, 8, 11 thì nhập số 1, 5, 8, 11 vào ô S3 chẳng hạn thì code sẽ tự động in các STT 1, 5, 8, 11.

Kính nhờ các bác quan tâm và giúp đỡ. Trân trọng!
Sửa code sẽ rất phức tạp. Tốt nhất bạn sửa thế này:
Tại S2 sẽ nhập công thức bằng S1. Sau đó muốn in stt nào thì cứ nhập stt vào S1 rồi nhấn nút in là xong. in bao nhiêu stt thì gõ bấy nhiêu lần.
 
Hi các bác,
Mình có file excel đính kèm. Trong đó có code in hàng loạt như sau:



Trong đó, khi mình nhập số thứ tự cần in vào ô S1, S2 thì bấm button Print sẽ tự động in hàng loạt.
Mình cần điều chỉnh lại code trên với nhu cầu in với số thứ tự cách quãng, không liên tục. Ví dụ như, mình cần in các STT 1, 5, 8, 11 thì nhập số 1, 5, 8, 11 vào ô S3 chẳng hạn thì code sẽ tự động in các STT 1, 5, 8, 11.

Kính nhờ các bác quan tâm và giúp đỡ. Trân trọng!

Tạm sửa code thế này
tại S1 nhập thứ tự phân cách dấu ",", còn tại S2 để trắng, thì sẽ như ý --> còn nhập đủ S1 ,S2 là số thì như cũ
Mã:
Sub InPhieu(Optional ByVal bchk As Boolean = True)
    Dim p1, p2, i As Long
    With Sheet1 'Sheets("NGHIEM THU")
        p1 = .Range("S1").Value '[S1] = Tu sô
        p2 = .Range("S2").Value '[S2] = Dên sô
        
        If p2 = "" Then
            If p1 = "" Then
                Exit Sub
            Else
                Dim arrP, t
                arrP = Split(p1, ",")
                For Each t In arrP
                    i = t
                    .Range("P1").Value = i '[P1] diên sô cân tham chiêu
                    If bchk = True Then .PrintOut Else .PrintPreview
                Next t
            End If
        Else
            If IsNumeric(p1) = False Or IsNumeric(p2) = False Then
                MsgBox "Không phai la sô.", , "Thông báo"
                Exit Sub
            End If
            
            p1 = Val(p1): p2 = Val(p2)
            
            If p1 > p2 Then
                MsgBox "So sau phai >= so truoc.", , "Thông báo"
                Exit Sub
            End If
            
            For i = p1 To p2
                .Range("P1").Value = i '[P1] diên sô cân tham chiêu
                If bchk = True Then .PrintOut Else .PrintPreview
            Next
        End If
    End With

End Sub
 
Sửa code sẽ rất phức tạp. Tốt nhất bạn sửa thế này:
Tại S2 sẽ nhập công thức bằng S1. Sau đó muốn in stt nào thì cứ nhập stt vào S1 rồi nhấn nút in là xong. in bao nhiêu stt thì gõ bấy nhiêu lần.
Không khả thi bạn ơi. Mình cần in cả trăm STT không liên tục. Làm cả trăm lần thì mất thời gian lắm. Với lại, cần in nhiều lần như thế, do có thể sửa dữ liệu, và in lại.
 
Code cho S3 nên theo kiểu mà Microsoft hay dùng.
Ví dụ nhập 1-3,6,8 thì phải hiểu là 1 đến 3, 6, 8.
 
Tạm sửa code thế này
tại S1 nhập thứ tự phân cách dấu ",", còn tại S2 để trắng, thì sẽ như ý --> còn nhập đủ S1 ,S2 là số thì như cũ
Mã:
Sub InPhieu(Optional ByVal bchk As Boolean = True)
    Dim p1, p2, i As Long
    With Sheet1 'Sheets("NGHIEM THU")
        p1 = .Range("S1").Value '[S1] = Tu sô
        p2 = .Range("S2").Value '[S2] = Dên sô
    
        If p2 = "" Then
            If p1 = "" Then
                Exit Sub
            Else
                Dim arrP, t
                arrP = Split(p1, ",")
                For Each t In arrP
                    i = t
                    .Range("P1").Value = i '[P1] diên sô cân tham chiêu
                    If bchk = True Then .PrintOut Else .PrintPreview
                Next t
            End If
        Else
            If IsNumeric(p1) = False Or IsNumeric(p2) = False Then
                MsgBox "Không phai la sô.", , "Thông báo"
                Exit Sub
            End If
        
            p1 = Val(p1): p2 = Val(p2)
        
            If p1 > p2 Then
                MsgBox "So sau phai >= so truoc.", , "Thông báo"
                Exit Sub
            End If
        
            For i = p1 To p2
                .Range("P1").Value = i '[P1] diên sô cân tham chiêu
                If bchk = True Then .PrintOut Else .PrintPreview
            Next
        End If
    End With

End Sub

Mình sửa lại được rồi nhé. Thanks bác nhiều lắm lắm!
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom