ใน Excel 2016 ฉันจะแทรกแถวของตารางโดยไม่แยกส่วนการจัดรูปแบบตามเงื่อนไขได้อย่างไร


0

ในการทำสำเนาแถวของตารางฉันใช้รหัสแมโครที่ยอดเยี่ยม (เรียนรู้ที่นี่) ที่เชื่อมโยงกับฮอตคีย์:

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

แต่สิ่งนี้จะแยกส่วนการจัดรูปแบบตามเงื่อนไข (CF) ตามที่แทรกการจัดรูปแบบและการแบ่ง CF "ใช้กับ" ข้อมูล ก่อนการแทรก CF จะมีลักษณะดังนี้:

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

หลังจากแทรกแถวใหม่ที่แถว 10 โดยแมโครด้านบนมันจะกลายเป็น:

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

ฉันจะทำซ้ำสูตรและค่าโดยไม่แยกส่วนการจัดรูปแบบตามเงื่อนไขนี้ได้อย่างไร


คุณต้องใช้รหัสนี้เพื่อเพิ่มรหัสActiveCell.Offset(1, 0).EntireRow.ClearFormats@ row 4
Rajesh S

ขอบคุณ @RajeshS แมโครยังคงคัดลอกได้สำเร็จ แต่ CF ยังแยกส่วนที่แถวที่แทรก
Keith Howington

ดูคำตอบนี้คุณอาจพบว่ามีประโยชน์
angelofdev

@KeithHowington คุณได้แทรกบรรทัดคำสั่งที่แนะนำไว้ในแถวที่ไม่ถูกต้องมันควรจะอยู่หลังแถว ActiveCell.EntireRow.Copy ActiveCell.Offset (1, 0) .EntireRow จัดการกับค่า หากคุณอนุญาตให้ฉันฉันสามารถแก้ไข OP
Rajesh S

รหัสของคุณควรจะอยู่ในลำดับนี้ ,, 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

คำตอบ:


0

เอาล่ะฉันคิดออก รหัสแมโครต่อไปนี้ (ซึ่งฉันใช้ตลอดเวลากับ Shift-Ctrl-Insert) เพิ่มแถวแม้ในตารางโดยไม่ต้องแยกส่วนการจัดรูปแบบตามเงื่อนไข

    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

ฉันเห็นข้อร้องเรียนมากมายนับไม่ถ้วนเกี่ยวกับการแตกแฟรกเมนต์รูปแบบ CF และไม่สามารถหาวิธีแก้ปัญหาที่ใช้งานได้ ดูเหมือนว่าจะเป็นแบบนี้และฉันยินดีรับข้อเสนอแนะและการปรับปรุงอย่างแน่นอน

(ต่อมา) ผลประโยชน์ด้านเดียวที่ฉันเพิ่งสังเกตเห็น: การทำซ้ำแถวก่อนหน้าของการทำซ้ำจะมีปัญหากับแถวแรกของช่วงที่มีชื่อ มันทำซ้ำแถว แต่แถวแรกใหม่นั้นอยู่นอกช่วง ในการใช้งานอื่น ๆ มันเป็นแถวสุดท้ายที่จำเป็นต้องหลีกเลี่ยง รหัสนี้ดูเหมือนว่าจะทำงานได้ดีในแถวแรกและแถวสุดท้าย

(ภายหลัง) แก้ไขเพื่อเพิ่มการจัดการเวอร์ชัน Excel ก่อนหน้า Excel 2016 ตอนนี้ดูเหมือนว่าจะกลับไปใช้ Excel 2007

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.