Dear all,
--------
Tôi có một báo giá trong đó có rất nhiều sheet (tương ứng với mỗi thương hiệu). Đôi khi tôi muốn in toàn bộ các báo giá này. Excel cho phép ta in
Entire Workbook. Tuy vậy mỗi báo giá được đánh số trang
Page/Pages nên không thể chọn tất cả các
sheet để in đồng loạt được vì vậy, theo tôi hiểu trong trường hợp này, chúng ta buộc phải sử dụng phương thức
PrintOut/PrintPreview của từng
sheet. Tôi đã viết thủ tục
Click cho command box
cmbPrintAll như sau, muốn chia sẻ cùng các bạn:
Private Sub cmbPrintAll_Click()
With Application
If Evaluate(.Names("MessageBox").Value) = 1Then
If MsgBox("Are you sure print all sheet in this workbook?", vbQuestion + vbYesNo, "Confirm to print") = vbNo Then Exit Sub
End If
Dim i As Long
Dim strSoBG As String
strSoBG = " Sè: " & Evaluate(.Names("SoBG").Value)
.ScreenUpdating = False
For i = Evaluate(.Names("Begin").Value) To Evaluate(.Names("End").Value)
Sheets(i).Select
ActiveSheet.Shapes("txbSoBG").Select
If Selection.Text <> strSoBG & i Then Selection.Text = strSoBG & i
If Evaluate(.Names("PrintPreview").Value) = 0 Then
Sheets(i).PrintOut , , Evaluate(.Names("CopyCount").Value)
ElseIf Evaluate(.Names("PrintPreview").Value) = 1 Then
Sheets(i).PrintPreview
End If
If Evaluate(.Names("MessageBox").Value) = 1 Then
If MsgBox("Do you want to continue print next sheet?", vbQuestion + vbYesNo, "Confirm to print") = vbNo Then Exit Sub
End If
Next
Sheets(1).Select
Cells(1, 1).Select
.ScreenUpdating = True
End With
End Sub
Để sử dụng được thủ tục này, các bạn cần định nghĩa một số
Name như sau:
-
MessgaseBox=0/1: bật/tắt thông điệp hỏi đáp tương tác với người dùng trong những trường hợp cần thiết (Default= 0: Không bật cảnh báo)
-
SoBG= String bất kỳ: đây là thành phần cố định của số báo giá, ví dụ "BG0306/", chuỗi này được kết hợp với chỉ số của từng báo giá tạo lên số báo giá hoàn chỉnh ("BG0306/001","BG0306/002","BG0306/..."
-
Begin (number<= số lượng báo giá, không vượt quá số sheet trong workbook): số thứ tự của báo giá bắt đầu in
-
End (number<= số lượng báo giá, không vượt quá số sheet trong workbook): số thứ tự của báo giá cuối cùng
-
PrintPreview=0/1: In ra giấy hay xem trước khi in (Default = 1: xem trước khi in).
-
CopyCount (number): Số bản in ra giấy
Nhược điểm của thủ tục này là chỉ in các
sheet theo dãy liên tục. Các bạn có thể cải tiến để có thêm lựa chọn in các
sheet mà mình muốn.
Chúc các bạn thành công!