Hàm truy vấn hàm choose và xuất kết quả truy vấn qua sheet mới (1 người xem)

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

tnfsmith

Thành viên hoạt động
Tham gia
26/3/07
Bài viết
151
Được thích
0
Giới tính
Nam
Chào các bạn, mình có hàm choose như sau mình muốn xuất kết quả truy vấn tất cả của nó qua form do mình định sẵn ở một sheet khác trên cùng một workbooks đó và sau đó xuất ra máy in và in hết tất cả các kết quả truy vấn này chỉ với một lần chọn máy in mặc định.

Mã:
sn = Sheets("sheet1").Cells(1).CurrentRegion
    sp = Sheets("sheet3").Range("A1:I14")
    For j = 2 To UBound(sn)
        For jj = 1 To 11
            sp(Choose(jj, 5, 7, 8, 9, 10, 11, 12, 13, 6, 9, 11), Choose(jj, 2, 3, 3, 3, 3, 8, 3, 3, 5, 5, 9)) = sn(j, Choose(jj, 37, 2, 3, 5, 17, 25, 16, 41, 1, 4, 27))
              
     Next
        With Sheets("sheet3")
            .Range("A1:E14") = sp
            .Range("c6") = Now()
            .PageSetup.PaperSize = xlPaperLetterSmall
            .PageSetup.PrintArea = "$A$1:$E$14"
            .Application.Dialogs(xlDialogPrinterSetup).show
            .PrintOut

Với code này mình gặp trục trặc ở chỗ sau khi truy vấn từng row data thõa điều kiện lên vùng dữ liệu $A$1:$E$14 thì nó hiện chọn máy in theo từng dòng, rất phiền hà.

Thêm nữa, mỗi row truy vấn lên $A$1:$E$14 thì nó lại xuất thành một lệnh in (ở đây mình in bằng máy Epson LQ-2180 - máy in kim). Dữ liệu mình có khoảng vài ngàn dòng như thế thì không hay lắm.

Mong được hỗ trợ!
Xin cám ơn!
 
hi, xin hỏi có bạn nào có giải pháp cho vấn đề này dùm thanks -0-/.
 
Upvote 0
hi, xin hỏi có bạn nào có giải pháp cho vấn đề này dùm thanks -0-/.

Tốt nhất là bạn Up File lên và nêu rõ vấn đề cần, khi đó các thành viên khác sẽ có giải pháp khác tốt hơn cái code bạn nêu ở trên. Chứ không ai rảnh ngồi đọc code và suy luận và đưa ra giải pháp cho bạn.
 
Upvote 0
Chào các bạn, mình có hàm choose như sau mình muốn xuất kết quả truy vấn tất cả của nó qua form do mình định sẵn ở một sheet khác trên cùng một workbooks đó và sau đó xuất ra máy in và in hết tất cả các kết quả truy vấn này chỉ với một lần chọn máy in mặc định.

Mong được hỗ trợ!
Xin cám ơn!

có vẻ sử dụng select case dể hơn
 
Upvote 0
Ok mình đính kèm theo file
 
Lần chỉnh sửa cuối:
Upvote 0
Ok mình đính kèm theo file

Trong file của bạn không có dòng code nào? vậy là sao?



------------
song nhìn code bài 1, thì bạn chỉ cần xóa dòng lệnh sau là được
Mã:
.Application.Dialogs(xlDialogPrinterSetup).show

và lưu ý khổ giấy đang là LEtterSmall vì dòng này (không phải khổ A4) cái này là tùy bạn chọn mà thôi)
Mã:
PageSetup.PaperSize = xlPaperLetterSmall


Và thêm, nếu thích bỏ Choose thì cách hay nhất là cho các hằng số dòng đó vào Array() thì khi đó ngắn gọn và không cần choose nữa
 
Upvote 0
Đấy chính là mình đang cần code chạy như yêu cầu bài #1 ấy. Code đó thì dùng cho file đính kèm. Sorry vì mình post bài và bỏ macro đi mà không hay.
Nếu bỏ dòng
Mã:
.Application.Dialogs(xlDialogPrinterSetup).show
thì nó in ra thẳng máy in mặc định do mình thiết lập ấy. Mình muốn khi ra lệnh bằng excel thì mình phải chọn máy in mặc định của nó.
Mình in bằng máy in kim giấy giống thế này http://lienson.vn/?p=ctsp&cid=164&id=176&key=326&lang=vn . Đây là giấy 2 liên 2 giao.
Nhưng hiện tại thì mình in một vùng dữ liệu chọn sẵn và in ra thì nó in một trang (một vùng dữ liệu) và bỏ 1 trang (1/2) trang A4 ấy. Nghĩa là nếu in bằng máy in liên tục thì nó in 1 trang bỏ 1 trang nhìn rất không hay.
Thanks
 
Upvote 0
Đấy chính là mình đang cần code chạy như yêu cầu bài #1 ấy. Code đó thì dùng cho file đính kèm. Sorry vì mình post bài và bỏ macro đi mà không hay.
Nếu bỏ dòng
Mã:
.Application.Dialogs(xlDialogPrinterSetup).show
thì nó in ra thẳng máy in mặc định do mình thiết lập ấy. Mình muốn khi ra lệnh bằng excel thì mình phải chọn máy in mặc định của nó.
Mình in bằng máy in kim giấy giống thế này http://lienson.vn/?p=ctsp&cid=164&id=176&key=326&lang=vn . Đây là giấy 2 liên 2 giao.
Nhưng hiện tại thì mình in một vùng dữ liệu chọn sẵn và in ra thì nó in một trang (một vùng dữ liệu) và bỏ 1 trang (1/2) trang A4 ấy. Nghĩa là nếu in bằng máy in liên tục thì nó in 1 trang bỏ 1 trang nhìn rất không hay.
Thanks

Thì bạn muốn in liên tục, thì liên tục khi in thẳng,

Bạn không
thì nó in ra thẳng máy in mặc định do mình thiết lập ấy
nhưng lại MUỐN
Mình muốn khi ra lệnh bằng excel thì mình phải chọn máy in mặc định của nó.
thế có mâu thuẫn không???
-----------

CODE ở bài #1 có 1 đoạn nên rất khó luận, nên phải có code đầy đủ trong file, và mô tả lại điều muốn chi tiết, thì là tốt hơn cả
 
Upvote 0
Chào các bạn, mình có hàm choose như sau mình muốn xuất kết quả truy vấn tất cả của nó qua form do mình định sẵn ở một sheet khác trên cùng một workbooks đó và sau đó xuất ra máy in và in hết tất cả các kết quả truy vấn này chỉ với một lần chọn máy in mặc định.

Mã:
sn = Sheets("sheet1").Cells(1).CurrentRegion
    sp = Sheets("sheet3").Range("A1:I14")
    For j = 2 To UBound(sn)
        For jj = 1 To 11
            sp(Choose(jj, 5, 7, 8, 9, 10, 11, 12, 13, 6, 9, 11), Choose(jj, 2, 3, 3, 3, 3, 8, 3, 3, 5, 5, 9)) = sn(j, Choose(jj, 37, 2, 3, 5, 17, 25, 16, 41, 1, 4, 27))
              
     Next
        With Sheets("sheet3")
            .Range("A1:E14") = sp
            .Range("c6") = Now()
            .PageSetup.PaperSize = xlPaperLetterSmall
            .PageSetup.PrintArea = "$A$1:$E$14"
            .Application.Dialogs(xlDialogPrinterSetup).show
            .PrintOut

Với code này mình gặp trục trặc ở chỗ sau khi truy vấn từng row data thõa điều kiện lên vùng dữ liệu $A$1:$E$14 thì nó hiện chọn máy in theo từng dòng, rất phiền hà.

Thêm nữa, mỗi row truy vấn lên $A$1:$E$14 thì nó lại xuất thành một lệnh in (ở đây mình in bằng máy Epson LQ-2180 - máy in kim). Dữ liệu mình có khoảng vài ngàn dòng như thế thì không hay lắm.

Mong được hỗ trợ!
Xin cám ơn!

Tôi nhìn qua thì thế này:
Đoạn
Mã:
            .PageSetup.PaperSize = ...
            .PageSetup.PrintArea = "$A$1:$E$14"
            .Application.Dialogs(xlDialogPrinterSetup).show

bạn chỉ làm 1 lần, tức cho nó ra ngoài 2 vòng FOR (trước hoặc sau)
Mã:
With Sheets("sheet3")
            .PageSetup.PaperSize = ...
            .PageSetup.PrintArea = "$A$1:$E$14"
            Application.Dialogs(xlDialogPrinterSetup).show
End With

Lệnh PrintOut cho ra sau 2 vòng FOR
 
Lần chỉnh sửa cuối:
Upvote 0
Thì bạn muốn in liên tục, thì liên tục khi in thẳng,

Bạn không

nhưng lại MUỐN

thế có mâu thuẫn không???
-----------

CODE ở bài #1 có 1 đoạn nên rất khó luận, nên phải có code đầy đủ trong file, và mô tả lại điều muốn chi tiết, thì là tốt hơn cả

Ok mình nói thế này và update file có kèm theo code để mọi người dễ hình dung nhé. Các bạn có thể sửa trực tiếp trong file cũng được.
Mã:
thì nó in ra thẳng máy in mặc định do mình thiết lập ấy
có nghĩa là mình nhấn nút thì nó in trực tiếp ra máy in đang set default trên máy tính mình ra lệnh in.
Mã:
Mình muốn khi ra lệnh bằng excel thì mình phải chọn máy in mặc định của nó.
đây là điều mình muốn trong đoạn code mình upload lên ngay bài viết này chỗ chọn máy in nó hiện ra một lần để in hàng loạt như mô tả của đoạn code đó. Việc chọn máy in default ngay tại lệnh in này chứ không phụ thuộc vào máy in đang set default là máy in khác (ví dụ máy laser chẳng hạn).
Thanks
 
Lần chỉnh sửa cuối:
Upvote 0
đây là điều mình muốn trong đoạn code mình upload lên ngay bài viết này chỗ chọn máy in nó hiện ra một lần để in hàng loạt như mô tả của đoạn code đó. Việc chọn máy in default ngay tại lệnh in này chứ không phụ thuộc vào máy in đang set default là máy in khác (ví dụ máy laser chẳng hạn).
Thanks

Vậy thì thử giải pháp chuyển lệnh này lên trước của 2 vòng FOR

tức là nằm trước FOR j thứ nhất,
Mã:
Application.Dialogs(xlDialogPrinterSetup).Show

thì là chọn được thôi, bạn thử nhé vì tôi không có máy in.
 
Upvote 0
Ok mình nói thế này và update file có kèm theo code để mọi người dễ hình dung nhé. Các bạn có thể sửa trực tiếp trong file cũng được.

Thế gợi ý của tôi ở bài #9 chưa giải quyết được vấn đề à? Hay có ý nào mà tôi chưa hiểu?
 
Upvote 0
Vậy thì thử giải pháp chuyển lệnh này lên trước của 2 vòng FOR

tức là nằm trước FOR j thứ nhất,
Mã:
Application.Dialogs(xlDialogPrinterSetup).Show

thì là chọn được thôi, bạn thử nhé vì tôi không có máy in.

Ok thanks bạn, mình đặt dòng lệnh đó lên trước 2 vòng for thì chạy được.
Chỉ còn vấn đề còn lại là chưa thể in loại giấy theo ý, nó cứ in 1 page (loại giấy 2 liên 2 giao - 1/2 giấy a4) bỏ 1 trang.
Theo đúng khổ giấy thì nó sẽ in 2 form (truy vấn 2 lần (2 lệnh in) in ra 1 trên cùng một trang A4 - được chia thành 2 form), hiện tại nó cứ hiểu 1 lần ra lệnh in thì nó in thành 1 trang A4 luôn nên máy in cứ load bỏ 1/2 page A4 còn lại,...cứ thế mà nó in...
Bạn có biết cách nào định dạng loại giấy đó không.
Xin cám ơn!
 
Lần chỉnh sửa cuối:
Upvote 0
Thế gợi ý của tôi ở bài #9 chưa giải quyết được vấn đề à? Hay có ý nào mà tôi chưa hiểu?
Ok mình đã giải quyết được vấn đề chọn máy in mỗi in ra lệnh in rồi bạn.
Chỉ còn lại là chọn loại giấy cho máy in kim như post #13 thôi.
Cám ơn bạn đã hỗ trợ.
 
Upvote 0
Ok thanks bạn, mình đặt dòng lệnh đó lên trước 2 vòng for thì chạy được.
Chỉ còn vấn đề còn lại là chưa thể in loại giấy theo ý, nó cứ in 1 page (loại giấy 2 liên 2 giao - 1/2 giấy a4) bỏ 1 trang.
Theo đúng khổ giấy thì nó sẽ in 2 form (truy vấn 2 lần (2 lệnh in) in ra 1 trên cùng một trang A4 - được chia thành 2 form), hiện tại nó cứ hiểu 1 lần ra lệnh in thì nó in thành 1 trang A4 luôn nên máy in cứ load bỏ 1/2 page A4 còn lại,...cứ thế mà nó in...
Bạn có biết cách nào định dạng loại giấy đó không.
Xin cám ơn!

- Xem lại mặc định máy khổ giấy trong may in Printer chọn đó vs khổ giấy trong file excel setup có hợp lý không?
- Xem lại trong Option của Excel đã tắt mặc định Allow A4/Letter paper resizing chưa? xem tại đây http://office.microsoft.com/en-us/excel-help/resizing-a4-worksheets-for-printing-HA001034648.aspx HOẶC ở đây http://www.bettersolutions.com/excel/ekv963/LC849514511.htm

hoặc cách tạm là:
+ Là nhân 2 form giống hệt nhau trong trang trinh bày của Excel luôn (set up trong 1 trang) và phân cách có số dòng cách trắng hợp lý
Khi đó sẽ in được.
 
Lần chỉnh sửa cuối:
Upvote 0
Ok thank bạn mình sẽ thử và có gì sẽ thông báo sau.
 
Upvote 0
Mình đã thử nhưng khổ giấy continuous của mình là 210x14mm. Mình tìm cách setup nhưng mà nó vẫn chưa chịu ra đúng.
Nếu x2 form giống hệt nhau thì nó in bị trùng vì hàm truy vấn của mình chỉ truy vấn 1 lệnh và ra lệnh in ngay sau truy vấn đó. Nếu có cách nào cho truy vấn ra 2 form cùng một lúc thì lúc đó việc thiết lập cũng sẽ dễ dàng hơn nhiều.
Xin cám ơn!
 
Upvote 0

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

Back
Top Bottom