in bảng tính

  • Thread starter quanghn
  • Ngày gửi
Q

quanghn

Sơ cấp
chào các bác. bác nào có thể cho em một chương trình viết bằng VBA dùng để in các Sheet trong bảng tính được không ạ và có cả ô để chọn số lượng copy của các trang nữa. Em cám ơn các bác nhiều
 
Khóa học Quản trị dòng tiền
Q

quanghn

Sơ cấp
Sao không thấy bác nào giúp em với ạ. Em đang tập học lập trình VBA và đang làm thử một chương trình nhưng đang bí đoạn này mong các bác giúp đỡ. Mong sớm nhận trả lời của các bác
 
HongViet

HongViet

Cao cấp
10/11/05
286
10
18
Đà nẵng
Sub InAn()
' InAn Macro, Macro recorded 20/03/2006 by Hong Viet
Dim i2 As Byte
i2 = 2
ActiveWindow.SelectedSheets.PrintPreview
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=i2, Collate _
:=True
End Sub
'Theo Mình Nghỉ: Bạn có thể gán biến số trang cần in & số bản in = ComboBox; Nhưng nói trước rằng, mình chưa làm thử bao giờ!
 
Sửa lần cuối:
Đào Việt Cường

Đào Việt Cường

Moderator
22/11/05
400
4
18
Khánh Hòa
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!
 
Sửa lần cuối:

Xem nhiều

Webketoan Zalo OA