Trang 1/9 1 2 3 4 5 ... cuốicuối
Hiển thị kết quả tìm kiếm từ 1 đến 10 trên tổng số: 84
  1. #1
    Tham gia ngày
    05 2006
    Nơi Cư Ngụ
    TP HCM
    Bài gởi
    1,467
    Cảm ơn
    1,217
    Được cảm ơn 16,292 lần trong 1,305 bài viết

    Tạo ra dòng 'tổng đến hết trang' và 'số mang sang' cho bảng tính nhiều trang

    Vọng Phúc


    Khi in bảng tính trong Exel, làm thế nào để khi in ra các trang trong 1 sheet đều có dòng cuối trang của sheet đó ( dòng này là dòng tổng cộng do mình tạo ra không phải footer) ?

    Ví dụ như trên sổ quỹ tiền mặt, cuối mỗi trang ta phải có dòng tổng, và sang đầu trang sau phải có số dư mang sang từ trang trước

    Dòng tổng cộng này là rất cần thiết với thủ quỹ hay kế toán bằng tay trong việc cộng sổ hay kiểm tra sai sót. Đối với kế toán máy thì có thể bỏ qua

    Muốn tạo ra dòng tổng cộng này, và cả dòng mang sang từ trang trước, ta thực hiện một macro đặt page setup và cố định độ cao dòng, mục đích là để có số dòng cố định trên 1 trang giấy in. Sau đó ta thực hiện insert dòng tổng phía dưới trang, insert dòng tiêu đề của trang sau, insert dòng mang sang từ trang trước, và đặt công thức tính toán vào các ô tương ứng

    Trong trường hợp ta cần tính toán lại, hoặc thêm bớt dòng dữ liệu, nên ta cũng cần làm một cái macro ngược lại, tức là xóa đi những dòng dữ liệu đã thêm vào

  2. Có 7 thành viên cảm ơn handung107 về bài viết này:


  3. #2
    Tham gia ngày
    05 2006
    Nơi Cư Ngụ
    TP HCM
    Bài gởi
    1,467
    Cảm ơn
    1,217
    Được cảm ơn 16,292 lần trong 1,305 bài viết

    KKBS Post



    Trong trường hợp cần kiểm tra từng bút toán như vậy, tôi nghĩ là ta có thể tạo một cột phụ thay cho macro bằng cách sau (không biết có đúng với yêu cầu của bạn không) :

    Giả sử cột A là cột chứa các số tiền trong các bút toán, cột B là cột phụ dùng để kiểm tra, ta tạo công thức cho cột B để cộng dồn như sau :

    B1 = A1
    B2 = A2 + B1
    copy công thức ô B2 cho B3, B4....
    Như vậy ở cuối mỗi trang ta có số luỹ kế đến cuối trang đó. Dùng kỹ thuật này lần nữa nếu bạn muốn số luỹ kế trang trước được in ở trang sau.

  4. #3
    Tham gia ngày
    05 2006
    Nơi Cư Ngụ
    TP HCM
    Bài gởi
    1,467
    Cảm ơn
    1,217
    Được cảm ơn 16,292 lần trong 1,305 bài viết
    OverAC


    Có một ý tưởng cho việc viết VBA cho chuyên này:
    1. Dùng worksheet_BeforePrint để chèn thêm các dòng cộng mang sang trang sau và trang trước mang sang.
    2. Vấn đề là đếm số dòng mang trước khi in được ra giấy

  5. #4
    Tham gia ngày
    05 2006
    Nơi Cư Ngụ
    TP HCM
    Bài gởi
    1,467
    Cảm ơn
    1,217
    Được cảm ơn 16,292 lần trong 1,305 bài viết

    Ngân Giang Post

    Ngân Giang - www.webketoan.com


    Trích Nguyên văn bởi OverAC
    Có một ý tưởng cho việc viết VBA cho chuyên này:
    1. Dùng worksheet_BeforePrint để chèn thêm các dòng cộng mang sang trang sau và trang trước mang sang.
    2. Vấn đề là đếm số dòng mang trước khi in được ra giấy.
    OverAC
    Giống như ý tưởng của OverAC, chương trình chỗ mình họ (đội thiết kế BC) cũng cộng cuối mỗi trang in, rồi in số mang sang ở đầu trang sau. Giải pháp này khó đấy nhé. Mình đã phải test nhiều lần, thế mà khi người dùng thay đổi thông số in lại bị lỗi (Cộng dồn chẳng giống ai)
    Thế thì trong Excel dùng giải pháp:
    Trích Nguyên văn bởi KKBS
    Giả sử cột A là cột chứa các số tiền trong các bút toán, cột B là cột phụ dùng để kiểm tra, ta tạo công thức cho cột B để cộng dồn như sau :

    B1 = A1
    B2 = A2 + B1
    copy công thức ô B2 cho B3, B4....
    Như vậy ở cuối mỗi trang ta có số luỹ kế đến cuối trang đó. Dùng kỹ thuật này lần nữa nếu bạn muốn số luỹ kế trang trước được in ở trang sau.

    Thân,
    KKBS.
    Theo mình nhìn bản in như thế không được đẹp nhưng chính xác.
    Làm sao để che không in tất cả các số liệu của cột B nhỉ (Chỉ in những ô xuất hiện ở đầu trang với cuối trang ấy mà)
    Ai tìm ra giải pháp hay cho mình học với nhé.

  6. #5
    Tham gia ngày
    05 2006
    Nơi Cư Ngụ
    TP HCM
    Bài gởi
    1,467
    Cảm ơn
    1,217
    Được cảm ơn 16,292 lần trong 1,305 bài viết

    Adam_tran Post :

    Theo tớ đã dùng kế toán máy thì cần gì phải in dòng cộng cuối trang chi cho mệt. Nhưng tớ cũng có ý tưởng như thế này:

    - Tính toán xem 1 trang chừng bao nhiêu dòng.
    - Đầu sheet để 1 dòng số mang sang. Cuối sheet để 2 dòng: Subtotal chứa số cuối trang và grandtotal chứa số mang sang cộng số đầu trang. Trên 2 dòng này, cột STT đặt 2 công thức tính Subtotal Max và Min của STT.
    - Tạo 1 macro căn cứ vào tổng số dòng để tính số trang. Mỗi trang chỉ cho in tối đa bấy nhiêu dòng, trừ trang đầu. In từng trang 1 bằng lệnh Advanced Filter. Tính số đầu trang, cuối trang dựa vào giá trị Min (dòng đầu của trang) và Max (dòng cuối của trang). Trang cuối cho in các thứ linh tinh chữ ký...
    Diễn giải khó, để mai có thời gian làm thử!

  7. #6
    Tham gia ngày
    05 2006
    Nơi Cư Ngụ
    TP HCM
    Bài gởi
    1,467
    Cảm ơn
    1,217
    Được cảm ơn 16,292 lần trong 1,305 bài viết

    Đào Việt Cường Post :

    Bác cho em hỏi, trong VBA làm thế nào để biết được dấu ngắt trang của excel nhỉ? Nếu có dấu hiệu này thì ta có thể điều khiển được điểm cuối cùng một trang đấy bác nhỉ, chẳng hạn như là tính tổng cuối trang chẳng hạn!

  8. Thành viên sau cảm ơn handung107 về bài viết này:


  9. #7
    Tham gia ngày
    05 2006
    Nơi Cư Ngụ
    TP HCM
    Bài gởi
    1,467
    Cảm ơn
    1,217
    Được cảm ơn 16,292 lần trong 1,305 bài viết

    Paulsteigel Post :

    Paulsteigel


    Cái ông Excel nhiều khi cũng làm chúng ta ốm, cụ thể là trong trường hợp với các dấu ngắt trang.
    + Nếu bạn ở chế độ view normal - chắc đếm số dấu ngắt trang sẽ chẳng bao giờ chính xác cả.
    + Nếu bạn chưa đặt PrintArea, bạn cũng chẳng đếm được dấu ngắt trang.
    Nguyên nhân thì có lẽ phải hỏi ông Microsoft - chắc là trong một số bài tiếp tớ sẽ giải thích về cơ chế hiển thị print preview trong excel.
    Quay lại vấn đề của Cường. Để đặt được dấu ngắt trang chính xác, ta cần phải nói rõ cho Excel vùng in là khoảng nào, như thế thì không cần bật sang chế độ Print Preview, Excel cũng tự động xếp trang chính xác cho ta được.
    Tuy nhiên kể cũng có lắm rắc rối khi thực hiện điều này:
    [Cường có 5 trang, có các dòng có độ cao khác nhau, 4 trang đầu khi in ở chế độ preview thì đầy trang còn trang sau lửng lơ nửa chừng xuân. Excel sẽ đặt dấu ngắt trang ở cuối vùng in (và nó nằm ở đó đấy ạ). Dấu ngắt này sẽ không giãn xuống cuối trang đâu, vì thế nếu muốn in dòng chữ cám ơn nào đó vào cuối trang, bạn phải giãn vùng in đến sát cuối trang rồi mới thêm chữ ...]
    Với cách đặt vấn đề này, tớ đề xuất một cách củ chuối như sau:
    1. Thiết lập vùng in với vùng dữ liệu hiện thời (UsedRange). Ghi lại số dấu ngắt trang hiện thời.
    2. Giãn vùng in 20 dòng một lần, sau mỗi lần giãn, đếm số Hpagebreak (dấu ngắt trang ngang)
    3. Khi số dấu ngắt trang mới lớn hơn số dấu ngắt trang cũ thì dừng lại và sử dụng dấu ngắt trang ngay sau dấu ngắt trang cũ làm mốc (Vì có thể ta thêm 20 dòng làm phát sinh 2 trang mới thì sao... hihi.
    4. Co vùng in về đúng sát vị trí của dấu ngắt trang mới liền kề dấu cũ này.
    5. Đưa đoạn text chào mừng vào ô ngay trên ô dính với dấu ngắt trang cuối cùng. Thuộc tính location của dấu ngắt trang trả về đối tượng Cell ngay dưới nó mà.
    Và kết thúc.
    Sau đây là thủ tục
    PHP Code:
    Sub test()
    ' Cái này chạy hơi chậm tẹo
    Dim OldPageCount As Long
    Dim NewPageCount As Long
    Dim tSheet As Worksheet, LastPage As HPageBreak

    Tắt chế độ làm tươi màn hình quan trọng lắm đấy không thì bạn có thể làm màn hình nhảy disco liên tục và căn bản là nó sẽ chậm đáng kể thủ tục đã chạy chậm nay còn chạy chậm hơn
    Application
    .ScreenUpdating False
    ' Đưa chế độ view về chế độ PageBreak
    ActiveWindow.View = xlPageBreakPreview
    Ví dụ trang tính của ta có tên là php chẳng hạn
    Set tSheet 
    Worksheets("php")
    ' Nào gán vùng in vào vùng tính toán
    tSheet.PageSetup.PrintArea = IncrementPrintArea(tSheet.UsedRange.Address)
    Đếm số dấu ngắt trang hiện thời
    OldPageCount 
    tSheet.HPageBreaks.Count
    While tSheet.HPageBreaks.Count OldPageCount
    ' Giãn vùng in để tìm dấu ngắt trang mới
    tSheet.PageSetup.PrintArea = IncrementPrintArea(tSheet.PageSetup.PrintArea)
    Wend
    Set LastPage = tSheet.HPageBreaks(tSheet.HPageBreaks.Count)
    Gán giá trị của ô cuối cùngtrang cuối cùng
    LastPage
    .Location.Offset(-1).Value "Hi there!"
    ' Và co vùng in về đến ô này thôi
    tSheet.PageSetup.PrintArea = tSheet.UsedRange.Address
    Set tSheet = Nothing
    Đưa excel về trạng thái bình thường như không có gì xảy ra... hih
    ActiveWindow
    .View xlNormalView
    Application
    .ScreenUpdating True
    End Sub

    Private Function IncrementPrintArea(LastArea As StringOptional numRow As Long 20) As String
    Hàm này thực hiện việc tăng vùng in lên bằng vùng in cũ 
    20 dòng mới 
    Dim i 
    As Long
    For Len(LastAreaTo 1 Step -1
    If Mid(LastAreai1) = "$" Then
    IncrementPrintArea 
    Left(LastAreai) & Val(Mid(LastArea1)) + numRow
    Exit For
    End If
    Next
    End 
    Function 
    Để thử nghiệm, bạn đặt một nút bấm vào trang tính nhé, gắn cho nó macro là Test và thử xem nào ... hihi
    thay đổi nội dung bởi: Pansy_flower, 07-12-07 lúc 10:02 PM

  10. Có 5 thành viên cảm ơn handung107 về bài viết này:


  11. #8
    Tham gia ngày
    05 2006
    Nơi Cư Ngụ
    TP HCM
    Bài gởi
    1,467
    Cảm ơn
    1,217
    Được cảm ơn 16,292 lần trong 1,305 bài viết

    Đào Việt Cường Post :

    Cám ơn bác đã đưa ra giải pháp. Để vấn đề thảo luận rõ ràng hơn, em xin được mô tả lại yêu cầu cụ thể như sau:
    Do yêu cầu công việc, em phải in một loạt báo giá sản phẩm vật liệu xây dựng, mỗi sản phẩm có nhiều mức giá cho mỗi đối tượng khác nhau.
    Dữ liệu được xử lý trên Excel.
    Trên mỗi báo giá, tại dòng cuối cùng của trang cuối cùng phải có dòng chữ "Cám ơn Quý khách hàng đã quan tâm đến sản phẩm của chúng tôi!". Nếu ít thì sẽ không đáng bàn, nhưng đây có đến mấy chục báo giá, mà lại in thành nhiều đợt khác nhau. Em có một thủ tục mà khi mỗi lần chọn nhãn hiệu sản phẩm, thì in luôn báo giá nhãn hiệu đó. Vấn đề là không thể xác định được dòng cuối cùng của trang cuối cùng để đưa dòng chữ đó vào.
    Em đã chạy thử chương trình của bác và thấy có thể áp dụng được. Nhưng em thấy có vẻ nó chưa được tối ưu lắm. Em chờ version mới của bác nhé!

  12. #9
    Tham gia ngày
    05 2006
    Nơi Cư Ngụ
    TP HCM
    Bài gởi
    1,467
    Cảm ơn
    1,217
    Được cảm ơn 16,292 lần trong 1,305 bài viết
    Trích Nguyên văn bởi Đào Việt Cường
    Em đã chạy thử chương trình của bác và thấy có thể áp dụng được. Nhưng em thấy có vẻ nó chưa được tối ưu lắm. Em chờ version mới của bác nhé!
    Dưng mà cậu phải cho tớ yêu cầu chứ - và cần nêu ra những cái bất tiện của đoạn mã tớ giới thiệu.. nếu không thì làm sao viết được phiên bản mới chứ .. hihi
    Đây, tớ gửi theo file làm ví dụ nhé/..../
    Ở đây có 2 ví dụ -
    file 1 là thể hiện ví dụ tìm ra điếm cuối cùng của trang in (Nếu trang cuối lơ lửng vài dòng thì dòng text vẫn in ở dòng cuối cùng trang đó).
    File 2 là ví dụ thêm dòng tổng trang vào mỗi trang. Hiện tại còn lỗi liên quan đến việc xác định dòng chính xác của cuối trang, tôi tìm cách sửa sau, các cao thủ xem giùm nhá. Và ... cái ví dụ này của tôi chạy khá chậm, các bác có cao kiến gì thì xin đăng tải.

  13. Thành viên sau cảm ơn handung107 về bài viết này:


  14. #10
    Tham gia ngày
    05 2006
    Nơi Cư Ngụ
    TP HCM
    Bài gởi
    1,467
    Cảm ơn
    1,217
    Được cảm ơn 16,292 lần trong 1,305 bài viết

    Đào Việt Cường Post :

    Trích Nguyên văn bởi Đào Việt Cường
    Tôi xin được mô tả lại yêu cầu cụ thể như sau:
    Do yêu cầu công việc, tôi phải in một loạt báo giá sản phẩm vật liệu xây dựng, mỗi sản phẩm có nhiều mức giá cho mỗi đối tượng khác nhau.
    Dữ liệu được xử lý trên Excel.
    Trên mỗi báo giá, tại dòng cuối cùng của trang cuối cùng phải có dòng chữ "Cám ơn Quý khách hàng đã quan tâm đến sản phẩm của chúng tôi!". Nếu ít thì sẽ không đáng bàn, nhưng đây có đến mấy chục báo giá, mà lại in thành nhiều đợt khác nhau. Tôi muốn có một thủ tục mà khi mỗi lần chọn nhãn hiệu sản phẩm, thì in luôn báo giá nhãn hiệu đó. Vấn đề là cần xác định được dòng cuối cùng của trang cuối cùng để đưa dòng chữ đó vào.
    Dear all,
    --------
    Xuất phát từ yêu cầu, để giải quyết một công việc nào đó buộc chúng ta phải tìm hiểu và cải tiến các thủ tục. Bài toán của tôi như đã nêu trên có thể được coi là một ví dụ. Sau khi giải quyết được, ngoài niềm vui là công việc được giải quyết, niềm vui lớn hơn là hiểu được vấn đề và vận dụng. Cũng từ "bài tập" này có thể giải quyết được các "bài tập" khác, như cộng tổng cuối trang.
    Tôi muốn nói đến dòng tổng cộng cuối trang của sổ kế toán. Ý nghĩa của dòng này đã có dịp được bàn luận ở chủ đề khác (Hoàn thiện hình thức kế toán). Ở đây, nếu thực sự nó vẫn cần thiết đối với kết toán - đặc biệt là kế toán bằng MS Excel thì vấn đề này cũng đáng bàn lắm!
    Không phải đến đây mới bàn luận, các giải pháp đưa ra đều rất hay và thoả đáng. Song tôi vẫn cảm thấy giải pháp đưa ra dường như hoặc thiếu đi tính linh động (NHATKYCHUNG.xls của Adamtran chỉ thực hiện khi view và chỉ thực hiện cho 1 trang) hoặc phải qua nhiều khâu xử lý trung gian (TEST.xls của Paulsteigel) (?).
    Trước khi bàn bạc sâu đến giải pháp tính tổng cuối trang, tôi xin phép được minh hoạ cách mà tôi thực hiện rất hiệu với dòng cuối cùng của trang cuối cùng như đã mô tả như sau:
    Một số quy ước:
    - Độ cao của các dòng phải được cố định.
    - Một trang tiêu chuẩn (Standard Page)là trang được tạo ra bởi 2 dấu ngắt trang (HPageBreaks)
    - Nếu báo cáo chỉ có dưới 3 trang (tức là không có trang tiêu chuẩn) thì việc tạo dòng cuối cùng được xác định theo địa chỉ tuyệt đối.
    Sau đây là mã lệnh:
    Trích Nguyên văn bởi Thủ tục xử lý cuối báo cáo Đào Việt Cường
    With wshBAOGIA_XLS 'Worksheet hiện hành để in
    Dim lngPageRowCount As Long ' Lưu trữ số trang đếm được của một trang tiêu chuẩn
    Dim strThanksRange As String ' Tham chiếu cho vùng đặt lời cảm ơn
    Select Case .HPageBreaks.Count ' Đếm dấu ngắt trang
    Case 0 ' Chỉ có 1 trang
    strThanksRange = IIf(.Range("B53") = "", "B53", "B54")
    Case 1 ' Chỉ có 2 trang
    strThanksRange = IIf(.Range("B107") = "", "B107", "B108")
    Case Else ' Nhiều hơn 2 trang ---> có trang tiêu chuẩn
    lngPageRowCount = .HPageBreaks.Item
    (.HPageBreaks.Count).Location.Row - .HPageBreaks.Item(.HPageBreaks.Count - 1).Location.Row ' Tính số dòng của một trang tiêu chuẩn
    strThanksRange = "B" & .HPageBreaks.Item(.HPageBreaks.Count).Location.Row + lngPageRowCount - 4 ' Dòng cuối cùng sau khi đã trừ hao phần đầu của báo cáo (Header Report)
    End Select
    .Range(strThanksRange) = "Rất mong nhận được sự quan tâm của Quý khách hàng các bạn!"

    End with

    Vận dụng:

    Từ ví dụ này có thể thấy lngPageRowCount là tham số quan trọng trong thủ tục xử lý (cho đến bây giờ 3/11/2006 nó không còn là giải pháp tối ưu nữa). Tham số này chỉ ra số dòng của một trang tiêu chuẩn. Chúng ta có thể dùng một vòng để duyệt qua các trang in. Qua mỗi bước nhảy chúng ta có thể xác định được dòng cuối cùng của mỗi trang. Kết hợp một vài xử lý cộng luỹ tích địa chỉ dòng, chúng ta hoàn toàn điều khiển được điểm cuối cùng của mỗi trang in.
    Hi vọng rằng giải pháp trên có thể giúp ích cho công việc kết toán bằng excel - trong những trường hợp bắt buộc và cũng rất mong sớm nhận được đoạn mã chương trình xử lý tính tổng cuối trang của các bạn.
    Chúc thành công!
    thay đổi nội dung bởi: Đào Việt Cường, 03-11-06 lúc 12:53 PM

  15. Có 2 thành viên cảm ơn handung107 về bài viết này:


Trang 1/9 1 2 3 4 5 ... cuốicuối

Thông tin về chủ đề này

Users Browsing this Thread

Hiện có 1 người đang xem đề tài này. (0 thành viên và 1 khách)

Đề tài tương tự

  1. Trả lời: 5
    Bài mới gởi: 19-11-12, 08:42 AM
  2. "Trang điểm" cho User Form
    Viết bởi tuanfkt trong chuyên mục Excel và các ngôn ngữ lập trình khác
    Trả lời: 32
    Bài mới gởi: 08-10-10, 04:27 PM
  3. Tạo nhãn "In trang này" trong Excel để in văn bản?
    Viết bởi huytuna trong chuyên mục Lập Trình với Excel
    Trả lời: 6
    Bài mới gởi: 06-05-10, 10:49 PM

Bookmarks

Bookmarks

Quyền Sử Dụng Ở Diễn Ðàn

  • Bạn không thể đăng đề tài mới
  • Bạn không thể đăng trả lời
  • Bạn không thể đăng file đính kèm.
  • Bạn không thể sửa bài viết.
  •  

Mudim v0.8 Tắt VNI Telex Viqr Tổng hợp
Chính tả Bỏ dấu kiểu mới  [Bật/Tắt (F9)]