Tạo nút Print trong VBA làm sao đây?? (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

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.
 
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.

Bạn dùng Macro record lại thao tác in ngoài excel. Sau đó copy đoạn code đó và nút lệnh xử lý lúc commandbutton_Click là xong! Hãy thử nhé bạn! Cách này đơn giản mà hiệu quả nhất đấy!
 
Lần chỉnh sửa cuối:
Upvote 0
ố ồ, làm bằng cách này àh, chứ không có cách nào khác hả bác ca_dafi.
Để mình làm thử xem code nó thế nèo nha.
Thank bác nhìu
 
Upvote 0
ố ồ, làm bằng cách này àh, chứ không có cách nào khác hả bác ca_dafi.
Để mình làm thử xem code nó thế nèo nha.
Thank bác nhìu

Bạn hãy thử hình dung khi chúng ta học tiếng Anh:
- Nếu thầy giáo dạy ta Banana là trái chuối, ta cứ học thuộc lòng là Banana là trái chuối, Banana là trái chuối, Banana là trái chuối........
- Nếu thầy giáo đưa ra trái chuối trước mặt bạn và nói this is a Banana.

Vậy theo bạn cách nào học nhanh hơn!
 
Upvote 0
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.
đây là code in một trang hiện hành
PHP:
Sub intrangbangdiemchuan_Click()
On Error GoTo baoloi:
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate _
        :=True
baoloi:
End
End Sub
cồn bên dưới là file in các trang tự lựa chọn nhé! chỉ là file tham khảo thôi
 

File đính kèm

Upvote 0
bác Ca_dafi nói đúng, mình nên chọn cách 2 (vì thầy đưa ra banana lúc đó mình sẽ được học thực tế hơn, đồng thời cũng dc en banana --=0).
Thank các bác.
Mình đã hiểu, mình còn nhìu théc méc lém, nhưng mình nghĩ chắc post từng tiêu đề để các bác đỡ ngán ngẫm mình )(&&@@.
 
Upvote 0
đây là code in một trang hiện hành
PHP:
Sub intrangbangdiemchuan_Click()
On Error GoTo baoloi:
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate _
        :=True
baoloi:
End
End Sub
cồn bên dưới là file in các trang tự lựa chọn nhé! chỉ là file tham khảo thôi

Cho gọn lại xíu bạn ạ:

PHP:
Sub intrangbangdiemchuan_Click()
    On Error Resume Next
    ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate:=True
End Sub

Hoặc :

PHP:
Sub intrangbangdiemchuan_Click()
    On Error Resume Next
    ActiveWindow.SelectedSheets.PrintOut
End Sub

Thân!
 
Upvote 0
Hi các bạn!

Cho hỏi chút nhen.
Nếu chưa định dạng trang in nằm gọn trong khổ giấy A4 mà ActiveWindow.SelectedSheets.PrintOut hay ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate:=True thì lở đáng lý ra 1 trang giấy lại ra 2 trang thì sao đây?.
Nhờ cho thêm vài đọan code bắt định dạng kéo các line ra hết trang A4 trước khi in nhen.

Thân.
 
Upvote 0
Bạn xem nhé :

PHP:
    With ActiveSheet.PageSetup
        .FitToPagesWide = 1
        .FitToPagesTall = 1
    End With


Thân!
 
Upvote 0
Hì bạn!

Hình như bạn hiều lầm ý mình rùi.
Bạn phải định dạng trang in A4 + kéo các line trong margins thành:Top&Bottom=0.28, left&right=0.24, Header&footer=0.18 trước khi thực hiện in trang hiện hành hoặc từ trang 1 đến trang 1 chứ.

Thân.
 
Upvote 0
Hì bạn!

Hình như bạn hiều lầm ý mình rùi.
Bạn phải định dạng trang in A4 + kéo các line trong margins thành:Top&Bottom=0.28, left&right=0.24, Header&footer=0.18 trước khi thực hiện in trang hiện hành hoặc từ trang 1 đến trang 1 chứ.

Thân.

Đề bài chỉ là lệnh in thôi, đâu có nói đến vụ trước khi in phải Format ??-\\/.

Lười quá, ghi macro đi.:=\+

Thân!
 
Upvote 0
Bác Okebab cho hỏi thêm nhé: Tôi đã tạo nút macro để in, nhưng hiện tại tôi phải làm 3 nút để in 3 trang khác nhau. Làm thế nào để chỉ một nút in mà có thể in 1,2, hoặc nhiều trang tùy theo điều kiện (tôi đã có ô điều kiện số trang, ví dụ muốn in 1 trang thì ô hiện số 1...)??? Cảm ơn bác
 
Upvote 0
Bác Okebab cho hỏi thêm nhé: Tôi đã tạo nút macro để in, nhưng hiện tại tôi phải làm 3 nút để in 3 trang khác nhau. Làm thế nào để chỉ một nút in mà có thể in 1,2, hoặc nhiều trang tùy theo điều kiện (tôi đã có ô điều kiện số trang, ví dụ muốn in 1 trang thì ô hiện số 1...)??? Cảm ơn bác

Xin hỏi rõ thêm là : 3 trang khác nhau hay 3 Sheet khác nhau ??

Thân!
 
Upvote 0
Hiện tại tôi đang cần in 3 trang trên cùng 1 sheet, bác làm giúp luôn với trường hợp 3 trang trên 3 sheet nhé???
 
Upvote 0
Bác xem file gửi kèm nhé. Có thể cho tôi số điện thoại được không? Bác có thể gửi thẳng file vào địa chỉ ltnam@toyoink-vn.com

Tks

Bạn xem nhé :

PHP:
Private Sub H_CMIn_Click()
    On Error Resume Next
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Dim Sh As Worksheet, iT As Long, iD As Long
    ' Kiem tra loi
    If Me.H_CBSh.Value = "" Then GoTo EndSub
    iT = Val(Me.H_TBTu.Value)
    iD = Val(Me.H_TBDen.Value)
    If iD = 0 Then iD = 1000
    If iT > iD Then GoTo EndSub
    
    Set Sh = Worksheets(Me.H_CBSh.Value)
    Sh.Visible = xlSheetVisible
    Sh.PrintOut From:=iT, To:=iD, Copies:=1
   
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    Exit Sub
EndSub:
    MsgBox "Ban chon chua dung, ban hay chon lai !!", vbInformation, "MrOkebab"
    Set Sh = Nothing
End Sub
Thân!
 

File đính kèm

Upvote 0
Đề bài chỉ là lệnh in thôi, đâu có nói đến vụ trước khi in phải Format ??-\\/.
Lười quá, ghi macro đi.:=\+
Thân!

He he đừng nói vậy buồn lắm bạn. Việc ghi macro định dạng trước khi in thì đã có bài tranh luận cùng Anh Tuấn rùi, đương nhiên là Tôi biết làm rùi. Chỉ nêu ra đây để hoàn thiện thêm thui, mặc dù đề bài thông yêu cầu nhưng thử hỏi có bao giờ bạn in mà không định dạng trước khi in không, người ta không hỏi có thể người ta chưa quan tâm đến thui hoặc người ta quên.
Mà bạn thêm vài dòng định dạng trang in vào code in của bạn để các bạn khác chưa biết khi biết đến dùng luôn khỏi phải hỏi có tiện không?. Sao lại nói Tôi lười nhỉ ?. Chắc tại các bài viết của Tôi hay bị nói lười thấy không nói nên nói hoài sao?.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,


Thân.
 
Upvote 0
He he đừng nói vậy buồn lắm bạn. Việc ghi macro định dạng trước khi in thì đã có bài tranh luận cùng Anh Tuấn rùi, đương nhiên là Tôi biết làm rùi. Chỉ nêu ra đây để hoàn thiện thêm thui, mặc dù đề bài thông yêu cầu nhưng thử hỏi có bao giờ bạn in mà không định dạng trước khi in không, người ta không hỏi có thể người ta chưa quan tâm đến thui hoặc người ta quên.
Mà bạn thêm vài dòng định dạng trang in vào code in của bạn để các bạn khác chưa biết khi biết đến dùng luôn khỏi phải hỏi có tiện không?. Sao lại nói Tôi lười nhỉ ?. Chắc tại các bài viết của Tôi hay bị nói lười thấy không nói nên nói hoài sao?.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,


Thân.
Hì bạn!

Hình như bạn hiều lầm ý mình rùi.
Bạn phải định dạng trang in A4 + kéo các line trong margins thành:Top&Bottom=0.28, left&right=0.24, Header&footer=0.18 trước khi thực hiện in trang hiện hành hoặc từ trang 1 đến trang 1 chứ.

Thân.


Lười quá, ghi macro đi.:=\+


Có vẻ hay khóc quá nhỉ ?? Ý em nói bác lười là lười ghi macro thôi.@!## Việc này thì với bác dễ như trở bàn tay mà.

Ghi nhận từ Macro :

PHP:
Sub Macro1()

' Macro1 Macro
' Macro recorded 12-09-2008 by MrOkebab
    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
End Sub


Thân!
 
Upvote 0
In liên tục

Xin chào anh chị!
Em cũng có trường hợp tương tự nhưng phức tạp hơn 1 chút.
Em muốn in 1 lúc hết các số hóa đơn tại cột B thay vì in từng cái.

Em đã làm được in từng cái rồi, nhưng ngồi chọn số hóa đơn và Click in từng cái lâu quá.

Em muốn Click là in hết toàn bộ Hóa Đơn luôn.
Em ko biết phải viết vòng lặp như thế nào. Mong anh chị giúp đở
Chân thành cám ơn

Hu hu em làm sao kỳ quá
Mã:
Sub Print2()
Dim n As Integer
Dim i As Integer
Application.ScreenUpdating = False
 
Sheets("Du Lieu").Select
    n = Application.WorksheetFunction.CountA(Range("B5:B65000"))
    If n > 0 Then
 
    Sheets("Du Lieu").Select
        For i = 5 To n
            Range("B" & i).Select
            Selection.Copy
            Range("C2").Select
            ActiveSheet.Paste
            Application.CutCopyMode = False
 
            Sheets("Hoa Don").Select
            ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
            Sheets("Du Lieu").Select
        Next i
    End If
End Sub

ANh chị sửa lại giúp em với
 
Lần chỉnh sửa cuối:
Upvote 0
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

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

Back
Top Bottom