Code in tùy chọn

Liên hệ QC

nguyenvietviet

Thành viên hoạt động
Tham gia
4/3/08
Bài viết
110
Được thích
11
Nghề nghiệp
Nhân viên văn phòng
Chào các pác.Em nhờ các pác chỉnh hộ e cái code in tùy chọn.
Hình như vòng lặp nó chưa đúng lém: Khi chọn in tùy chọn từ combox1 đến combox2 thì nó không in phiếu đầu tiên.
Ví dụ in từ PC01 đến PC03 thì nó chỉ in PC02 và PC03. E muốn nó in cả PC01. Nếu có dòng trắng ở giữa PC02 và PC03 thì bỏ qua không in dòng đó.
Mong các pác giúp đỡ.
 

File đính kèm

  • SQ5.rar
    33.2 KB · Đọc: 30
Nếu in hết thì có phải cái gì có trên màn hình là in luôn không?

Đọc tới đọc lui giờ hiểu sơ sơ vấn đề rồi, nhưng mỗi lần in là in cùng lúc 2 phiếu trên và dưới luôn phải không?
 
Lần chỉnh sửa cuối:
Upvote 0
Mình bận 1 chút giờ mới gửi bài được.
Đối với bài này chỉ cần 1 Form thôi, tuỳ biến khéo vận dụng linh hoạt thì code cũng hết sức nhẹ nhàng.
Toàn bộ code của bạn giờ chỉ còn như sau:
Mã:
Private Sub CommandButton1_Click()
Dim i, Cl As Range, Sh As Worksheet
Dim Tu, Den
Set Sh = ActiveSheet
With Sheet2
'IN TAT CA CAC PHIEU -----------------------------------------------------------------------
If Me.OptionButton1 = -1 Then
For i = 0 To Me.ComboBox1.ListCount - 1
Sh.[H5] = Me.ComboBox1.List(i)
MsgBox "In phieu : " & Sh.[H5]
'Sh.PrintOut , , Me.TextBox3 * 1
Next
Unload Me
End If
'TUY CHON IN-------------------------------------------------------------------------------------
If Me.OptionButton2 = -1 Then
   If ComboBox1.Value = "" Then Exit Sub
Tu = Me.ComboBox1.ListIndex
Den = Me.ComboBox2.ListIndex
If Den < Tu Then
MsgBox "Tu phai nho hon hay bang den!!!"
Exit Sub
End If
For i = Tu To Den
Sh.[H5] = Me.ComboBox1.List(i)
'Sh.PrintOut , , Me.TextBox3 * 1
MsgBox "In phieu : " & Sh.[H5]
Next
Unload Me
End If
End With
End Sub
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Private Sub CommandButton2_Click()
Unload Me
End Sub
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Private Sub UserForm_Initialize()
Dim Sh As Worksheet, Cl As Range
With Sheet2
For Each Cl In .Range(.[C14], .[C65536].End(3)).Cells
If Cl.Value = "" Then Exit For
If UCase(Left(Cl, 2)) = IIf(ActiveSheet.CodeName = "Sheet3", "PT", "PC") Then
If WorksheetFunction.CountIf(.Range(.[C14], Cl), Cl.Value) = 1 Then
Me.ComboBox1.AddItem Cl.Value
Me.ComboBox2.AddItem Cl.Value
End If: End If
Next
End With
TextBox3.Value = 1
Me.OptionButton1 = -1
Me.Caption = IIf(ActiveSheet.CodeName = "Sheet3", "IN PHIEU THU", "IN PHIEU CHI")
End Sub

Xin lỗi, ở lệnh nhấn nút in bạn bỏ With sheet2 và end with giùm, dọn chưa hết thôi.
 

File đính kèm

  • SQ5.rar
    29.7 KB · Đọc: 48
Lần chỉnh sửa cuối:
Upvote 0
Pác Minhthien ak. Khi bấm nút in thì tùy chọn in tất cả thì máy in cứ thế chạy thôi.
Vâng in cả 1 trang 2 phiếu.
 
Lần chỉnh sửa cuối:
Upvote 0
Pác selan ơi. Có phải thiếu cả lệnh gọi máy in sao ý. Em nhấn in mà nó chẳng nhúc nhích j>hjx
Cái gọi form đấy tại sao lại phải dùng đến module hả pác?
Nếu dòng bị trống thì listindex không thê hiện hết. Ví dụ có các phiếu PC1,PC2, trống 1 dòng, PC3 thì list chỉ có PC1,PC2 thui. Pác xử lý giúp em hiển thị hết và in hết
Pác chỉ giúp e listcount, listindex dùng thế nào với nha
 
Lần chỉnh sửa cuối:
Upvote 0
Pác Minhthien ak. Khi bấm nút in thì tùy chọn in tất cả thì máy in cứ thế chạy thôi.
Vâng in cả 1 trang 2 phiếu.

Cho hỏi một vấn đề nữa! Các số chứng từ có xếp trật tự từ nhỏ đến lớn không hay là xếp lộn xộn, và nguyên tắc của PCxx với xx luôn là dạng số phải không?

Tôi sẽ làm một cách tổng quát, ngắn gọn và rất nhanh cho bạn.
 
Upvote 0
Mình để bạn Test thử đã, hãy kiểm tra số chứng từ nhảy ra sao. Khi nào xong chỉ bỏ dấu nháy ở dòng


'Sh.PrintOut , , Me.TextBox3 * 1

Bạn cũng nên sửa như sau:

'Sh.PrintOut 1, 1, Me.TextBox3 * 1
 
Upvote 0
Cho hỏi một vấn đề nữa! Các số chứng từ có xếp trật tự từ nhỏ đến lớn không hay là xếp lộn xộn, và nguyên tắc của PCxx với xx luôn là dạng số phải không?

Tôi sẽ làm một cách tổng quát, ngắn gọn và rất nhanh cho bạn.

Các số chứng từ sắp xếp có trật tự từ nhỏ đến lớn và xx là dạng số
 
Upvote 0
Các số chứng từ sắp xếp có trật tự từ nhỏ đến lớn và xx là dạng số

Quên, điều này quan trọng! Tôi thấy PCxx có trùng số? Làm sao giải quyết được? Sao nó hiểu trùng và không trùng? Nếu lọc lấy số duy nhất thì tính toán làm sao?
 
Upvote 0
Hì, Minh Thien để ý 1 chút là: Các công đoạn tính toán lập phiếu thì bạn ấy đã làm rồi. Việc bạn ấy nhờ là ráp số phiếu vào ô số phiếu rồi in. Có vậy thôi.
 
Upvote 0
Hì, Minh Thien để ý 1 chút là: Các công đoạn tính toán lập phiếu thì bạn ấy đã làm rồi. Việc bạn ấy nhờ là ráp số phiếu vào ô số phiếu rồi in. Có vậy thôi.

Tại em nghĩ là nếu in thì đúng ý đồ của mình chứ Thầy! Chứ trùng số thì in đâu có đúng phải không ạ! Có lẽ bạn ấy chỉ đưa thử vậy chứ làm gì có chuyện trùng phiếu phải không ạ!
 
Upvote 0
Trong 1 nghiệp vụ Kế toán cũng có khi có nhiều chi tiết, việc lập phiếu phải nhặt được hết các chi tiết của chứng từ đó. Việc đó bạn ấy đã làm.
Ví dụ: Phiếu chi 03 có 2 khoản là 2.828.610 và 282.861 Tổng là 3.111.471
Bạn xem trên phiếu chi 03 hoàn toàn đúng.
Giờ thì ta phải làm cái việc là nạp số phiếu vào rồi in. Mỗi số phiếu chỉ 1 lần. Còn số liên trên Form dã có.
 
Upvote 0
Đây, File của bạn đây! Tôi nghĩ vận dụng Hàm Lọc và Lọc duy nhất mảng 2 chiều của Thầy Ndu là số 1:

1) Hàm tự tạo Filter2DArray & Unique2DArray được đặt vào một Module

2) Tại Form in Phiếu Chi bạn làm các thủ tục sau:

Mã:
Private Sub UserForm_Initialize()
    Dim MyRange As Range, MyRange2 As Range, iRow As Long
    Application.ScreenUpdating = False
    With Sheet2
[COLOR=#006400]        'Tao cot so de giu tinh trang ban dau:[/COLOR]
        .[J:J].ClearContents: iRow = .[C65536].End(xlUp).Row - 13
        .[J14].Value = 1
        .[J14].AutoFill Destination:=Range(.[J14], .[J14].Resize(iRow)), Type:=xlFillSeries

[COLOR=#006400]        'Sap xep lai cot C cho trat tu tu nho toi lon:[/COLOR]
        Set MyRange = Range(.[C14], .[C65536].End(xlUp)).Offset(, -2).Resize(, 10)
        MyRange.Sort .[C14], 1, , , 1, , , xlNo
        
[COLOR=#006400]        'Dung ham mang 2 chieu de loc va tach du lieu:[/COLOR]
        MyArray = Filter2DArray(Range(.[C14], .[C65536].End(xlUp)), 1, "pc*", False)
        MyArray = Unique2DArray(MyArray, 1, False)

[COLOR=#006400]        'Nap du lieu:[/COLOR]
        ComboBox1.List() = MyArray
        ComboBox2.List() = MyArray
        TextBox3.Value = 1

[COLOR=#006400]        'Sap xep lai theo trat tu ban dau:[/COLOR]
        MyRange.Sort .[J14], 1, , , 1, , , xlNo
        .[J:J].ClearContents
    End With
    Set MyRange = Nothing
End Sub

'================================================================================================================

Private Sub UserForm_Terminate()
    Application.ScreenUpdating = True
End Sub

3) Đặt thuộc tính cho nút Option (làm thêm cho màu mè):

Mã:
Private Sub OptionButton2_Change()
    ComboBox1.Enabled = OptionButton2
    ComboBox2.Enabled = OptionButton2
End Sub

4) Thủ tục chính của bạn đây! Rất ngắn gọn:

Mã:
Private Sub CommandButton1_Click()
    If Val(TextBox3) = 0 Then MsgBox "Ban phai nhap so ban in": Exit Sub
    On Error Resume Next
    Dim i As Long
[COLOR=#006400]    'IN TAT CA CAC PHIEU -----------------------------------------------------------------------[/COLOR]
    If OptionButton1 Then
        For i = 1 To UBound(MyArray)
            Sheet4.Range("H5").Value = MyArray(i, 1)
            Sheet4.PrintOut from:=1, To:=1, copies:=Val(TextBox3), collate:=True
        Next
    End If
    
[COLOR=#006400]    'TUY CHON IN--------------------------------------------------------------------------------[/COLOR]
    If OptionButton2 Then
        If ComboBox1 = "" Then MsgBox "Ban phai nhap TU so phieu bat dau": ComboBox1.SetFocus: Exit Sub
        If ComboBox2 = "" Then MsgBox "Ban phai nhap DEN so phieu ket thuc": ComboBox2.SetFocus: Exit Sub
        Dim BD As Integer, KT As Integer
            BD = Val(Replace(UCase(ComboBox1), "PC", ""))
            KT = Val(Replace(UCase(ComboBox2), "PC", ""))
        For i = 1 To UBound(MyArray)
            If Val(Replace(UCase(MyArray(i, 1)), "PC", "")) >= BD Then
                Sheet4.Range("H5").Value = MyArray(i, 1)
                Sheet4.PrintOut from:=1, To:=1, copies:=Val(TextBox3), collate:=True
            End If
            If Val(Replace(UCase(MyArray(i, 1)), "PC", "")) = KT Then Exit For
        Next
    End If
    
    Unload Me
End Sub
 

File đính kèm

  • SQ5.rar
    87.3 KB · Đọc: 33
Upvote 0
Đây, File của bạn đây! Tôi nghĩ vận dụng Hàm Lọc và Lọc duy nhất mảng 2 chiều của Thầy Ndu là số 1:

1) Hàm tự tạo Filter2DArray & Unique2DArray được đặt vào một Module
Má ơi! Hình như viết lâu lắm rồi, đến nỗi giờ cũng không nhớ là mình đã từng viết cái hàm Unique2DArray
Đang định bắt tay viết lại, nhở Nghĩa nhắc (cảm ơn chú nhé), đi lục lại trong máy tính mới biết thì ra mình đã... viết rồi ---> Khùng ghê!
---------------
Ủa! Mà trong code thấy có sort xiết gì đó... thế không dùng Sort2DArray được à?
 
Upvote 0
Mình bận 1 chút giờ mới gửi bài được.
Đối với bài này chỉ cần 1 Form thôi, tuỳ biến khéo vận dụng linh hoạt thì code cũng hết sức nhẹ nhàng.
Toàn bộ code của bạn giờ chỉ còn như sau:
Mã:
.....
Tu = Me.ComboBox1.ListIndex
Den = Me.ComboBox2.ListIndex
.....

Xin lỗi, ở lệnh nhấn nút in bạn bỏ With sheet2 và end with giùm, dọn chưa hết thôi.

Wow, Thầy làm theo ListIndex thật linh hoạt! Cám ơn đã học hỏi thêm chiêu này!
 
Upvote 0
Má ơi! Hình như viết lâu lắm rồi, đến nỗi giờ cũng không nhớ là mình đã từng viết cái hàm Unique2DArray
Đang định bắt tay viết lại, nhở Nghĩa nhắc (cảm ơn chú nhé), đi lục lại trong máy tính mới biết thì ra mình đã... viết rồi ---> Khùng ghê!
---------------
Ủa! Mà trong code thấy có sort xiết gì đó... thế không dùng Sort2DArray được à?

Hàm đó nhờ Thầy viết lại luôn đi ạ, em không biết nó nằm ở đâu! để em thêm vào thư viện Học Tập của em luôn ạ.

Cám ơn Thầy!
 
Upvote 0
Cái này dùng hàm lọc 2D của Ndu thì qua hiện đại. Thực chất đây chỉ là lọc mảng 1 chiều thôi nên theo mình dùng cái Dic. hay Colection cũng đã ngon lắm rồi.
 
Upvote 0
Hàm đó nhờ Thầy viết lại luôn đi ạ, em không biết nó nằm ở đâu! để em thêm vào thư viện Học Tập của em luôn ạ.

Cám ơn Thầy!
Sort mảng 2 chiều viết rồi mà (cái này thì tôi nhớ chắc vì xài hoài)
Nó ở đây:
http://www.giaiphapexcel.com/forum/showthread.php?47929-Sort-mảng-2-chiều
Tìm mấy bài cuối ấy!
Tuy nhiên, theo nhận xét của tôi thì vụ sort xiết này rất khó nhai ---> Phải cải tiến thêm nữa mới xong!
(phải có người rảnh rỗi thí nghiệm để tìm cái sai rồi mới biết phải cần cải tiến thứ gì)
 
Upvote 0
Upvote 0
Web KT
Back
Top Bottom