Kẻ viền sổ nhật ký chung bằng VBA (1 người xem)

Liên hệ QC

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

ketoan100

Thành viên bị đình chỉ hoạt động
Thành viên bị đình chỉ hoạt động
Tham gia
13/10/07
Bài viết
90
Được thích
13
Xin nhờ các anh chị biết rành về VBA thì xem và giúp em kẻ viền sổ nhật ký chung như mẫu em đã làm sẵn trong sheet của excel.
Em không biết VBA.
Xin chân thành cảm ơn anh chị rất nhiều !
 

File đính kèm

Xin nhờ các anh chị biết rành về VBA thì xem và giúp em kẻ viền sổ nhật ký chung như mẫu em đã làm sẵn trong sheet của excel.
Em không biết VBA.
Xin chân thành cảm ơn anh chị rất nhiều !
ý bạn là kẻ từ hàng 11 tới cuối dữ liệu (động) - cuối dữ liệu là hàng mà nơi đó cộ A không có và cột H;I có giá trị phải không????
 
Upvote 0
ý bạn là kẻ từ hàng 11 tới cuối dữ liệu (động) - cuối dữ liệu là hàng mà nơi đó cộ A không có và cột H;I có giá trị phải không????
Căn cứ theo sheet bảng mẫu thì:
Bảng có đường kẻ dọc là đường liền.
Dòng cuối cùng (kết) thì kẻ liền cả trên lẫn dưới nó.
Các dòng khác:
- Dòng có một trong 3 dữ liệu tại A,B,C là dòng phát sinh, kẻ liền trên nó.
- Dòng không có là dòng chi tiết tài khoản, kẻ đứt trên nó.
 
Upvote 0
Kẻ từ hàng 11 trở xuống đến hết. khi nghiệp vụ phát sinh bao nhiêu dòng thì nó kẻ bấy nhiêu vòng, kết thúc 1 nghiệp vụ là nó sẽ kẻ 1 đường viền đậm như MẪU NHẬT KÝ CHUNG trong sheet kế bên ấy.
Ở đó mình hạng chế cho nó chưa đến 2000 dòng.
Cảm ơn bạn đã xem qua!
Bài đã được tự động gộp:

Thêm đường viền đậm kết thúc 1 nghiệp vụ là ok. Chỉ yêu cầu như thế thôi. cảm ơn bạn rất nhiều !
 

File đính kèm

  • hinh nkc.png
    hinh nkc.png
    268.9 KB · Đọc: 20
Lần chỉnh sửa cuối:
Upvote 0
Mình tạm nghĩ nháp: Tìm dòng đầu, tìm dòng cuối, cho kẻ nét đứt từ dòng đầu +3 đến dòng cuối -1, rồi sau đó chạy vòng lặp dựa vào ô cột A có chứa dữ liệu ngày để kẻ nét liền.
 
Lần chỉnh sửa cuối:
Upvote 0
Kẻ từ hàng 11 trở xuống đến hết. khi nghiệp vụ phát sinh bao nhiêu dòng thì nó kẻ bấy nhiêu vòng, kết thúc 1 nghiệp vụ là nó sẽ kẻ 1 đường viền đậm như MẪU NHẬT KÝ CHUNG trong sheet kế bên ấy.
Ở đó mình hạng chế cho nó chưa đến 2000 dòng.
Cảm ơn bạn đã xem qua!
Bài đã được tự động gộp:

Thêm đường viền đậm kết thúc 1 nghiệp vụ là ok. Chỉ yêu cầu như thế thôi. cảm ơn bạn rất nhiều !
Bạn tham khảo thử: Click chuật phải chọn vào cái ô màu đỏ
1591331212041.png
 

File đính kèm

Upvote 0

File đính kèm

Upvote 0
Bạn xem thử
Mình cho Macro vào Nút Xem Sổ của bạn luôn rồi đó
Ý tưởng Quá hay luôn bạn ơi...
Mình xin mạn phép chỉnh lại code của bạn một tí cho nó nhẹ và gọn hơn nha....
Mã:
   With Sheet8
        lr1 = .Cells(.Rows.Count, "I").End(xlUp).Row
        For i = 11 To lr1
            If IsDate(.Cells(i, 3)) = True Then
               With .Range("A" & i & ":I" & i)
                   .Borders(xlEdgeTop).LineStyle = xlContinuous
                   .Borders(xlEdgeTop).Weight = xlThin
               End With
            End If
        Next i
        MsgBox ("complete!!!")
    End With
 

File đính kèm

Upvote 0
Mình Record Macro mới được cái này nữa. Bạn Chủ Topic tham khảo thử xem nó có bất tiện nữa không nhoé
PHP:
Sub Macro1()
'
' Macro1 Macro
'
    Dim LastRow As Long, sRng As Range, I As Long
Application.ScreenUpdating = False
LastRow = Range("I" & Rows.Count).End(xlUp).Row
Set sRng = Range("A11:A" & LastRow)
With sRng.Resize(, 9)
    .Borders.LineStyle = 1
    .Borders(xlInsideHorizontal).Weight = xlHairline
End With
With sRng.SpecialCells(xlCellTypeConstants, 23)
    For I = 0 To 8
        With .Offset(, I).Borders(xlEdgeTop)
            .LineStyle = 1
            .Weight = xlThin
        End With
    Next I
End With
Application.ScreenUpdating = True
End Sub
 
Upvote 0
Ý tưởng Quá hay luôn bạn ơi...
Mình xin mạn phép chỉnh lại code của bạn một tí cho nó nhẹ và gọn hơn nha....
Mã:
   With Sheet8
        lr1 = .Cells(.Rows.Count, "I").End(xlUp).Row
        For i = 11 To lr1
            If IsDate(.Cells(i, 3)) = True Then
               With .Range("A" & i & ":I" & i)
                   .Borders(xlEdgeTop).LineStyle = xlContinuous
                   .Borders(xlEdgeTop).Weight = xlThin
               End With
            End If
        Next i
        MsgBox ("complete!!!")
    End With
Bạn chu đáo ghê, Code nhìn gọn hơn hẳn cái nùi Macro nguyên bản của excel
 
Upvote 0
Mình Record Macro mới được cái này nữa. Bạn Chủ Topic tham khảo thử xem nó có bất tiện nữa không nhoé
PHP:
Sub Macro1()
'
' Macro1 Macro
'
    Dim LastRow As Long, sRng As Range, I As Long
Application.ScreenUpdating = False
LastRow = Range("I" & Rows.Count).End(xlUp).Row
Set sRng = Range("A11:A" & LastRow)
With sRng.Resize(, 9)
    .Borders.LineStyle = 1
    .Borders(xlInsideHorizontal).Weight = xlHairline
End With
With sRng.SpecialCells(xlCellTypeConstants, 23)
    For I = 0 To 8
        With .Offset(, I).Borders(xlEdgeTop)
            .LineStyle = 1
            .Weight = xlThin
        End With
    Next I
End With
Application.ScreenUpdating = True
End Sub
Bác chỉ mình nhấn cái nút record nào mà dc vậy nha... mỗi hàng là 1 lon!!!!
 
Lần chỉnh sửa cuối:
Upvote 0
Mình Record Macro mới được cái này nữa. Bạn Chủ Topic tham khảo thử xem nó có bất tiện nữa không nhoé
Cảm ơn bạn đã góp ý . Chân thành cảm ơn.
Bài đã được tự động gộp:

Bạn xem thử
Mình cho Macro vào Nút Xem Sổ của bạn luôn rồi đó
Xin cảm ơn bạn rất nhiều.
Bài đã được tự động gộp:

Đã bất tiện mà sao hay được :p:p:p
Nó hay hơn mình phải tự làm tay, nó tốn rất nhiều thời gian. Lâu lắm bạn ạ. Cảm ơn bạn đã góp ý.
Bài đã được tự động gộp:

Coi thử file nha bạn
Xin cảm ơn bạn đã giúp đỡ.
 
Upvote 0
Vầy đi cho gọn.
Mã:
With Sheet8.Range("A10:A" & Sheet8.Range("I" & Rows.Count).End(xlUp).Row)
    .Resize(, 9).Borders.LineStyle = 1
    .Resize(, 9).Borders(12).Weight = 1
    Intersect(.Resize(, 9), Union(.SpecialCells(2), .Cells(.Rows.Count, 1)).EntireRow).Borders(8).Weight = 2
End With
 
Upvote 0
Vầy đi cho gọn.
Mã:
With Sheet8.Range("A10:A" & Sheet8.Range("I" & Rows.Count).End(xlUp).Row)
    .Resize(, 9).Borders.LineStyle = 1
    .Resize(, 9).Borders(12).Weight = 1
    Intersect(.Resize(, 9), Union(.SpecialCells(2), .Cells(.Rows.Count, 1)).EntireRow).Borders(8).Weight = 2
End With
Rút quá đi thôi
 
Upvote 0
Ý tưởng Quá hay luôn bạn ơi...
Mình xin mạn phép chỉnh lại code của bạn một tí cho nó nhẹ và gọn hơn nha....
Mã:
   With Sheet8
        lr1 = .Cells(.Rows.Count, "I").End(xlUp).Row
        For i = 11 To lr1
            If IsDate(.Cells(i, 3)) = True Then
               With .Range("A" & i & ":I" & i)
                   .Borders(xlEdgeTop).LineStyle = xlContinuous
                   .Borders(xlEdgeTop).Weight = xlThin
               End With
            End If
        Next i
        MsgBox ("complete!!!")
    End With
Bạn cho mình hỏi, Nếu trường hợp này mà bỏ luôn những đường viền nét đứt, chỉ còn lại đường viền đậm khi kết thúc 1 nghiệp vụ thì mình sẽ bỏ câu lệnh nào để được như thế vậy bạn? (Có nghĩa là ỡ giữa những dòng không có đường viền, chỉ có đường viền đậm trên và dưới thôi.
Cảm ơn bạn rất nhiều!!!
 
Upvote 0
Bạn cho mình hỏi, Nếu trường hợp này mà bỏ luôn những đường viền nét đứt, chỉ còn lại đường viền đậm khi kết thúc 1 nghiệp vụ thì mình sẽ bỏ câu lệnh nào để được như thế vậy bạn? (Có nghĩa là ỡ giữa những dòng không có đường viền, chỉ có đường viền đậm trên và dưới thôi.
Cảm ơn bạn rất nhiều!!!

Thử code:
Mã:
Sub TaoViengMot()
    Application.ScreenUpdating = False
    Dim CellCuoi, i As Long
    CellCuoi = Cells(Rows.Count, 1).End(xlUp).Row
    Sheet8.Range("A7").CurrentRegion.Offset(6).BorderAround xlContinuous, xlThick
    With Sheet8.Range("A10:A" & CellCuoi).SpecialCells(xlCellTypeConstants, 23)
    For i = 0 To 8
        With .Offset(, i).Borders(xlEdgeTop)
            .LineStyle = xlContinuous: .Weight = xlThick
        End With
    Next i
    End With
    Application.ScreenUpdating = True
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn bạn rất nhiều, để mình chạy thử.
Cảm ơn!
 
Upvote 0
Bạn cho mình hỏi, Nếu trường hợp này mà bỏ luôn những đường viền nét đứt, chỉ còn lại đường viền đậm khi kết thúc 1 nghiệp vụ thì mình sẽ bỏ câu lệnh nào để được như thế vậy bạn? (Có nghĩa là ỡ giữa những dòng không có đường viền, chỉ có đường viền đậm trên và dưới thôi.
Cảm ơn bạn rất nhiều!!!
Ý bạn là sao? gởi file cho minh coi ah
 
Upvote 0
Upvote 0
Bài 22 thêm 1 dòng code là xong.
Không cần thêm ah...
Sửa dòng thành Sheet8.[A11:I11].Resize(j - 1).Borders(xlInsideHorizontal).LineStyle = xlNone và kết hợp code bạn @be09 là xong!
ah, code bạn @be09 thì dư 1 border, chỉnh lại CellCuoi = Cells(Rows.Count, 9).End(xlUp).Row (đổi 1 thành 9) thì không dư nữa!

Phải vậy không bạn @be09 ....
 

File đính kèm

Upvote 0
Cảm ơn bạn rất nhiều !!!
Bài đã được tự động gộp:

Không cần thêm ah...
Sửa dòng thành Sheet8.[A11:I11].Resize(j - 1).Borders(xlInsideHorizontal).LineStyle = xlNone và kết hợp code bạn @be09 là xong!
ah, code bạn @be09 thì dư 1 border, chỉnh lại CellCuoi = Cells(Rows.Count, 9).End(xlUp).Row (đổi 1 thành 9) thì không dư nữa!

Phải vậy không bạn @be09 ....
Cảm ơn bạn rất nhiều !!!!!
 
Upvote 0
Không cần thêm ah...
Sửa dòng thành Sheet8.[A11:I11].Resize(j - 1).Borders(xlInsideHorizontal).LineStyle = xlNone và kết hợp code bạn @be09 là xong!
ah, code bạn @be09 thì dư 1 border, chỉnh lại CellCuoi = Cells(Rows.Count, 9).End(xlUp).Row (đổi 1 thành 9) thì không dư nữa!

Phải vậy không bạn @be09 ....
1/ Code duyệt dữ liệu từ dưới lên và 1 là dựa vào cột A bạn sửa 9 là dựa vào cột I, 1 hay 9 nó đều như nhau. Vì cột I từ dưới lên đến Cell I2001 không có dữ liệu nên bạn thay 9 thì không thấy viền trên Cell I2000.
2/ Để xóa viền thì sử dụng dòng code sau:

Sheet8.Range("A7").CurrentRegion.Borders.LineStyle = xlNone
 
Lần chỉnh sửa cuối:
Upvote 0

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

Back
Top Bottom