Excel VBA技巧 復制粘貼保留行高列寬等所有格式的方法


Excel VBACopy方法進行復制粘貼,往往會導致粘貼的數據沒有了行高和列寬。那么,當我們要進行復制粘貼時,如何保證粘貼的數據保留原有的格式(包括行高列寬都不能變)

筆者以一個模板設計為例進行說明。

模板表如圖1 所示。

Excel <wbr>VBA技巧 <wbr>復制粘貼保留行高列寬等所有格式的方法

1

根據模板表生成表格的效果如圖2所示。

Excel <wbr>VBA技巧 <wbr>復制粘貼保留行高列寬等所有格式的方法

2

使用Copy方法復制粘貼,代碼如下所示:

Sub Copy復制粘貼困惑()

    Dim x As Integer

   

    With Sheet2

        '清空數據

        .UsedRange.Clear

        '恢復標准列寬

        .Columns.ColumnWidth = .StandardWidth

        '恢復標准行高

        .Rows.RowHeight = .StandardHeight

    End With

   

    For x = 1 To 30 Step 15

        '復制大標題區

        Sheet1.Rows("3:4").Copy Sheet2.Rows(x)

       

        '小標題區

        '橫向復制1/縱向復制4---粘貼份數由擴展區域Resize(1, 12)決定

        Sheet1.Range("B5:D5").Copy Sheet2.Cells(x + 2, "B").Resize(1, 12)

       

        '正文區

        '橫向復制5/縱向復制4---粘貼份數由擴展區域Resize(10, 12)決定

        Sheet1.Range("B6:D7").Copy Sheet2.Cells(x + 3, "B").Resize(10, 12)

    Next x

End Sub

運行代碼效果如圖3所示。

Excel <wbr>VBA技巧 <wbr>復制粘貼保留行高列寬等所有格式的方法

3

粘貼時為了保證行高和列寬一同被復制,可以先整行使用Copy方法進行復制粘貼,這樣就可以保證行高一同被復制;使用PasteSpecial方法選擇性粘貼,參數Paste設置為xlPasteColumnWidths即可保證列寬一同被復制,參數Paste設置為xlPasteFormats則只粘貼格式而不粘貼數據。

為了能一次性復制多份,粘貼區域的選擇很重要,粘貼區域的行數=樣本區域行數×橫向份數,粘貼區域的列數=樣本區域列數×縱向份數。比如示例中正文區樣本為23列,現需要橫向5/縱向4份共20份粘貼正文區,則粘貼區域應為2×5=10行、3列×4=12列,即1012列的區域,所以示例粘貼區域為.Cells(x + 3, "B").Resize(10, 12)。如果粘貼區域設置不當將會出現不可意料的效果,請自行測試。

好了,按照上述方法將代碼修改成如下所示,運行后即可得到如圖2所示效果。

Sub 復制全部格式包括行高列寬()

    Dim x As Integer

   

    With Sheet2

        '清空數據

        .UsedRange.Clear

        '恢復標准列寬

        .Columns.ColumnWidth = .StandardWidth

        '恢復標准行高

        .Rows.RowHeight = .StandardHeight

    End With

   

    For x = 1 To 30 Step 15

        '復制大標題區

        Sheet1.Rows("3:4").Copy Sheet2.Rows(x)

       

        '小標題區

        '復制行高

        Sheet1.Rows(5).Copy Sheet2.Rows(x + 2)

        '縱向復制4

        Sheet1.Range("B5:D5").Copy Sheet2.Cells(x + 2, "B").Resize(1, 12)

       

        '正文區

        '橫向復制行高5

        Sheet1.Rows("6:7").Copy

        Sheet2.Rows(x + 3 & ":" & x + 12).PasteSpecial xlPasteFormats   '選擇性粘貼格式

        '橫向復制5/縱向復制4

        Sheet1.Range("B6:D7").Copy

        With Sheet2.Cells(x + 3, "B").Resize(10, 12)

            .PasteSpecial xlPasteFormats  '選擇性粘貼格式

            .PasteSpecial xlPasteColumnWidths '選擇性粘貼列寬

        End With

    Next x

End Sub


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM