Tạo nút Print trong VBA làm sao đây??

Liên hệ QC

rockydatalone

Thành viên mới
Tham gia
3/4/07
Bài viết
48
Được thích
9
Mình đang thiết kế 1 form nhập liệu , đồng thời sẽ có thêm nút in , nếu mình muốn In ra, các bác cho mình hỏi về Code hoặc phương thức để mình có thể In ra chỉ bằng nút lệnh , chứ không phải nhấn Ctr + P có sẵn trong Exccel. Mong các bác chỉ giúp. Thank nhìu nhìu.
 
Vòng lặp đây:
PHP:
Sub Print2()
Dim n As Integer
Application.ScreenUpdating = False
 
Sheets("Du Lieu").Select
    n = Application.WorksheetFunction.CountA(Range("B5:B65000"))
    If n > 0 Then
        Sheets("Hoa Don").Select
    For i = 1 To n
        Sheets("Du Lieu").Range("C2") = Sheets("Du Lieu").Cells(i + 4, 2)
        ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
     Next
    End If
Application.ScreenUpdating = True
End Sub
 
Upvote 0
Hi OB!

Ý mình muốn bạn hướng dẫn bạn rockydatalone như vậy nè:

Mã:
Sub intrangbangdiemchuan_Click()
    On Error Resume Next
    With ActiveSheet.PageSetup
        .LeftMargin = Application.InchesToPoints(0.24)
        .RightMargin = Application.InchesToPoints(0.24)
        .TopMargin = Application.InchesToPoints(0.28)
        .BottomMargin = Application.InchesToPoints(0.28)
        .HeaderMargin = Application.InchesToPoints(0.18)
        .FooterMargin = Application.InchesToPoints(0.18)
        .PaperSize = xlPaperA4
    End With
    ActiveWindow.SelectedSheets.PrintOut
End Sub

He he không biết có lỗi gì không nữa, thông cảm bỏ qua nhen.

Thân.
 
Upvote 0
Vòng lặp đây:

PHP Code:
Sub Print2()
Dim n As Integer
Application
.ScreenUpdating = False

Sheets
("Du Lieu").Select
n
= Application.WorksheetFunction.CountA(Range("B5:B65000"))
If
n > 0 Then
Sheets
("Hoa Don").Select
For i = 1 To n
Sheets
("Du Lieu").Range("C2") = Sheets("Du Lieu").Cells(i + 4, 2)
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Next
End
If
Application.ScreenUpdating = True
End Sub

Anh ptm0412 ơi!
Tại cột Type Sheet Du Lieu. Nếu em chọn S và muốn chỉ In loại S thì lam như thế nào? Tương tự khi em chọn các loại khác.
Có cách nào không anh?

Cám ơn anh!
Thân!
 
Upvote 0
Thêm 1 điều kiện trước khi in. Thí dụ như dùng ô A1 với 1 validation để chọn loại HĐ (R hoặc S, hoặc khác nữa). Rồi sửa code lại với điều kiện chỉ khi Type (cột F) = A1 thì mới in, không thì bỏ qua.

PHP:
Sub Print3()
Dim n As Integer
Application.ScreenUpdating = False
 
Sheets("Du Lieu").Select
    n = Application.WorksheetFunction.CountA(Range("B5:B65000"))
    If n > 0 Then
        Sheets("Hoa Don").Select
    For i = 1 To n
        If Sheets("Du Lieu").Cells(i + 4, 6) = Sheets("Du Lieu").Cells(1, 1) Then
        Sheets("Du Lieu").Range("C2") = Sheets("Du Lieu").Cells(i + 4, 2)
        ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
        End If
    Next
End If
Application.ScreenUpdating = True
End Sub

Nếu muốn dùng cả 2 code để muốn in hết thì in, muốn in có điều kiện thì in, thì làm như sau:
viết thêm 1 sub khác gán cho button:

PHP:
Sub PrintCondition()
If Sheets("Du Lieu").Cells(1, 1) ="" then
Print2
Else
Print3
End If
End Sub

Vậy khi muốn in hêt thì xoá ô A1 rồi nhấn nút, nếu muốn in 1 loại thì chọn loại trong A1 rồi nhấn nút.
Nếu thích thì thêm 1 loại trong validattion là "All", sửa code 1 xíu: ="" sửa thành ="All"
 
Upvote 0
Thêm 1 điều kiện trước khi in. Thí dụ như dùng ô A1 với 1 validation để chọn loại HĐ (R hoặc S, hoặc khác nữa). Rồi sửa code lại với điều kiện chỉ khi Type (cột F) = A1 thì mới in, không thì bỏ qua.

PHP:
Sub Print3()
Dim n As Integer
Application.ScreenUpdating = False
 
Sheets("Du Lieu").Select
    n = Application.WorksheetFunction.CountA(Range("B5:B65000"))
    If n > 0 Then
        Sheets("Hoa Don").Select
    For i = 1 To n
        If Sheets("Du Lieu").Cells(i + 4, 6) = Sheets("Du Lieu").Cells(1, 1) Then
        Sheets("Du Lieu").Range("C2") = Sheets("Du Lieu").Cells(i + 4, 2)
        ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
        End If
    Next
End If
Application.ScreenUpdating = True
End Sub


Cho gọn lại xíu bác ạ

PHP:
Sub Print3()
    Dim n As Integer
    Application.ScreenUpdating = False
    n = Application.WorksheetFunction.CountA(Sheets("Du Lieu").Range("B5:B65000"))
    If n > 0 Then
        With Sheets("Du Lieu")
            For i = 1 To n
                If .Cells(i + 4, 6) = .Cells(1, 1) Then
                    .Range("C2") = .Cells(i + 4, 2)
                    Sheets("Hoa Don").PrintOut Copies:=1, Collate:=True
                End If
            Next
        End With
    End If
    Application.ScreenUpdating = True
End Sub
Thân!
 
Upvote 0
Mình cũng đang mắc ở chỗ này
Không biết trong VBA có làm được việc chọn khổ in, định vị lề in top, bottom, left, ringht không nhỉ
Đang cần dùng mà không biết là thế nào.
Có ai giúp mình với!
 
Upvote 0
Các bạn giúp mình với. Cho mình hỏi code print từng trang tuỳ chọn nhé
Bài đã được tự động gộp:

Ý mình là in sheet tuỳ chọn.
 
Upvote 0
đây là code in một trang hiện hành
Sub In_GNT()
On Error GoTo baoloi:
Sheets("GNT").Select
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate _
:=True
baoloi:
End
End Sub
bạn ơi! mình đang cần code như thế này nhưng khi copy về thực hành thì có một lỗi như sau:
ví dụ mình có 2 sheet: sheet1 & sheet2
mình tạo nút in tại sheet 1 để thực hiện in sheet 2, khi bấm in thì lệnh in thực hiện thành công nhưng khi in xong thì nó lại nhảy đến sheet 2! như vậy mình phải viết thêm để mà khắc phục như thế nào khi in xong nó không còn nhảy qua sheet 2 nữa ạ.
 
Upvote 0
bạn ơi! mình đang cần code như thế này nhưng khi copy về thực hành thì có một lỗi như sau:
ví dụ mình có 2 sheet: sheet1 & sheet2
mình tạo nút in tại sheet 1 để thực hiện in sheet 2, khi bấm in thì lệnh in thực hiện thành công nhưng khi in xong thì nó lại nhảy đến sheet 2! như vậy mình phải viết thêm để mà khắc phục như thế nào khi in xong nó không còn nhảy qua sheet 2 nữa ạ.
Thêm dòng Sheets("Sheet1").Range("A1").Select vào sau ...True và trước baoloi;
 
Upvote 0
Thêm dòng Sheets("Sheet1").Range("A1").Select vào sau ...True và trước baoloi;
Mình hay làm là sẽ chỉ định sheet in tại lệnh in luôn chứ dùng select nhảy qua nhảy lại nhức con mắt.
sheets("Sheet1").PrintOut From:=1, To:=1, Copies:=1, Collate:=True
 
Upvote 0
Thêm dòng Sheets("Sheet1").Range("A1").Select vào sau ...True và trước baoloi;
Hi bạn, mình đã làm như bạn hướng dẫn mà vẫn không đc, nó vẫn nhảy tới sheet2 cần in. về VBA mình mới tập tò nên chưa hiểu nhiều. Bạn có thể viết giúp mình câu code đc không ạ, mình cảm ơn.
 
Upvote 0
bạn ơi! mình đang cần code như thế này nhưng khi copy về thực hành thì có một lỗi như sau:
ví dụ mình có 2 sheet: sheet1 & sheet2
mình tạo nút in tại sheet 1 để thực hiện in sheet 2, khi bấm in thì lệnh in thực hiện thành công nhưng khi in xong thì nó lại nhảy đến sheet 2! như vậy mình phải viết thêm để mà khắc phục như thế nào khi in xong nó không còn nhảy qua sheet 2 nữa ạ.
Bạn thử với code sau:
Mã:
Sub In_GNT()
    On Error GoTo baoloi:
    Sheets("Sheet2").Select
    ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate:=True
baoloi:
    Sheets("Sheet1").Select
End Sub
 
Upvote 0
Hi bạn, mình đã làm như bạn hướng dẫn mà vẫn không đc, nó vẫn nhảy tới sheet2 cần in. về VBA mình mới tập tò nên chưa hiểu nhiều. Bạn có thể viết giúp mình câu code đc không ạ, mình cảm ơn.
Yêu cầu của bạn là vẫn ở sh1: do vậy đoạn code của bạn thức hiện lệnh in thì nó phải Activate Sh2, sau khi in xong nó sẽ quay về sh1 bằng dòng lệnh Sh1.select. Nhìn chung là đặt Sh().select chỗ nào thì nó sẽ activate ở sh đó.
hãy làm như anh Nghĩa Đẹp trai đã hướng dẫn.
Bài đã được tự động gộp:

Mình hay làm là sẽ chỉ định sheet in tại lệnh in luôn chứ dùng select nhảy qua nhảy lại nhức con mắt.
sheets("Sheet1").PrintOut From:=1, To:=1, Copies:=1, Collate:=True
yêu cầu của bạn ấy là Ở Sh1, in sh2 mà sh1 vẫn activate.
 
Upvote 0
yêu cầu của bạn ấy là Ở Sh1, in sh2 mà sh1 vẫn activate.
ý mình là đừng để ActiveWindow.SelectedSheets mà chỉ định luôn sheet nào cần in, thì khi đang ở sheet nào tạo nút in thì lệnh thực hiện cũng sẽ in cái sheet mà mình chỉ định. không phải select nữa để nhảy qua sheet khác. Còn muốn in sheet2 thì để sheets("Sheet2").PrintOut From:=1, To:=1, Copies:=1, Collate:=True. Nút in để ở sheet1
 
Upvote 0
ý mình là đừng để ActiveWindow.SelectedSheets mà chỉ định luôn sheet nào cần in, thì khi đang ở sheet nào tạo nút in thì lệnh thực hiện cũng sẽ in cái sheet mà mình chỉ định. không phải select nữa để nhảy qua sheet khác. Còn muốn in sheet2 thì để sheets("Sheet2").PrintOut From:=1, To:=1, Copies:=1, Collate:=True. Nút in để ở sheet1
cảm ơn bạn rất nhiều
Bài đã được tự động gộp:

Bạn thử với code sau:
Mã:
Sub In_GNT()
    On Error GoTo baoloi:
    Sheets("Sheet2").Select
    ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate:=True
baoloi:
    Sheets("Sheet1").Select
End Sub
cảm ơn bạn rất nhiều ^^
 
Upvote 0
Web KT

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

Back
Top Bottom