Trong Excel 2016, làm cách nào để chèn một hàng của bảng mà không phân đoạn định dạng có điều kiện?


0

Để nhân đôi một hàng của bảng, tôi đang sử dụng một chút mã macro tuyệt vời này (đã học ở đây) được gắn với một phím nóng:

Public Sub InsRow()
    ActiveCell.Offset(1, 0).EntireRow.Insert
    ActiveCell.EntireRow.Copy ActiveCell.Offset(1, 0).EntireRow    
    ActiveCell.Offset(1, 0).EntireRow.ClearFormats ' suggested by RajeshS below
End Sub

Nhưng điều này phân đoạn định dạng có điều kiện (CF), vì nó chèn định dạng cũng như phá vỡ thông tin "áp dụng cho" CF. Trước khi chèn, CF trông giống như:

    Applies to: =$A$3:$U$100

Sau khi một hàng mới được chèn ở hàng 10 bởi macro ở trên, nó sẽ trở thành:

    Applies to: =$A$11:$U:$11
    Applies to: =$A$3:$U$10,$A$12:$U$101

Làm cách nào tôi có thể sao chép các công thức và giá trị mà không phân đoạn định dạng có điều kiện này?


Bạn cần cái này để thêm vào mã, ActiveCell.Offset(1, 0).EntireRow.ClearFormats@ hàng 4.
Rajesh S

Cảm ơn bạn, @RajeshS. Macro vẫn sao chép thành công, nhưng CF vẫn bị phân mảnh ở hàng được chèn.
Keith Howington

Hãy xem câu trả lời này bạn có thể thấy nó hữu ích.
angelofdev

@KeithHowington, bạn đã chèn dòng lệnh gợi ý ở hàng sai, nó sẽ nằm sau hàng, ActiveCell.EntireRow.Copy ActiveCell. Offerset (1, 0) .EntireRow đối phó giá trị. Nếu bạn cho phép tôi, tôi có thể chỉnh sửa OP.
Rajesh S

Mã của bạn phải theo trình tự này ,, Row1: ActiveCell.Offset(1, 0).EntireRow.Insert Row 2: ActiveCell.EntireRow.Copy ActiveCell.Offset(1, 0).EntireRow Row 3: ActiveCell.Offset(1, 0).EntireRow.ClearFormats
Rajesh S

Câu trả lời:


0

Vâng, tôi cố gắng tìm ra nó. Mã macro sau (mà tôi sử dụng mọi lúc với Shift-Ctrl-Chèn) thêm các hàng ngay cả trong các bảng mà không phân đoạn định dạng có điều kiện.

    Public Sub InsRow()
        Dim cellActive As Range
        Application.ScreenUpdating = False      ' Kill screen flicker
        Set cellActive = ActiveCell             ' Hold the entry cell for later
        ActiveCell.EntireRow.Insert             ' Make the new row
        ActiveCell.Offset(1, 0).EntireRow.Copy  ' Grab the original row now up 1
        ' Handle earlier versions of Excel 
        If Application.Version => 16 Then
            ' xlPasteAllMergingConditionalFormats is defined as 14
            ActiveCell.EntireRow.PasteSpecial Paste:=14 ' 
        Else
            ActiveCell.EntireRow.PasteSpecial 
        End If
        Application.CutCopyMode = False         ' Release the selected row
        cellActive.Offset(-1, 0).Select         ' Pick the original cell position
        Application.ScreenUpdating = True       ' and release the screen
    End Sub

Tôi đã thấy vô số lời phàn nàn về sự phân mảnh định dạng CF và không thể tìm ra giải pháp nào hiệu quả. Điều này dường như là nó, và tôi chắc chắn hoan nghênh các đề xuất và cải tiến.

(Sau này) Một lợi ích mà tôi vừa lưu ý: Các lần lặp trước của sao chép hàng sẽ có vấn đề ở hàng đầu tiên của phạm vi được đặt tên. Nó nhân đôi hàng, nhưng hàng đầu tiên mới thực sự nằm ngoài phạm vi. Trong các triển khai khác, đó là hàng cuối cùng cần phải tránh. Mã này dường như hoạt động tốt trên hàng đầu tiên và cuối cùng.

(Sau này) Đã chỉnh sửa để thêm xử lý các phiên bản Excel trước Excel 2016. Hiện tại có vẻ như nó hoạt động trở lại Excel 2007.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.