【问题标题】:Find and copy/paste last columns查找并复制/粘贴最后一列
【发布时间】:2015-07-31 01:57:32
【问题描述】:

我在插入新列并将最后一列的值粘贴到这些新列中时遇到问题。

目前我得到的代码是这样的

Sub Macro1()
Dim ws As Worksheet
Dim LC As Long

Set ws = ActiveWorkbook.Worksheets("TOT")
LC = ws.Cells(3, Columns.Count).End(xlToLeft).Column

ws.Columns(LC - 2).Insert
ws.Columns(LC - 2).Insert
ws.Columns(LC - 2).Insert
ws.Columns(LC + 1 & ":" & LC + 3).Copy
ws.Range(LC + 1 & "1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

End Sub

我想在最后三个现有列的前面插入三个新列,并将最后三个现有列的值粘贴到三个新列中。这些区域中没有合并的单元格。

【问题讨论】:

    标签: vba excel range paste


    【解决方案1】:

    CopyPasteSpecial 方法都必须用于 Range 引用/对象。您正在尝试在 Columns 引用上使用 Copy。试试这个:

    Sub Macro1()
        Dim ws As Worksheet
        Dim lastColumn As Long
    
        Set ws = ActiveWorkbook.Worksheets("TOT")
        lastColumn = ws.Cells(3, Columns.Count).End(xlToLeft).Column
    
        ws.Columns(lastColumn - 2).Insert
        ws.Columns(lastColumn - 2).Insert
        ws.Columns(lastColumn - 2).Insert
        ws.Cells(RowIndex:=1, ColumnIndex:=lastColumn + 1).Resize(ColumnSize:=3).EntireColumn.Copy
        ws.Cells(RowIndex:=1, ColumnIndex:=lastColumn -2).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    
    End Sub
    

    您需要小心使用此类代码,因为插入列时 lastColumn 的值不会改变,因此可能会产生误导。

    【讨论】:

      【解决方案2】:

      试试这个:

      Sub insertNew3Col()
      
      Dim ws As Worksheet
      Dim LK As Long
      
      Set ws = ActiveWorkbook.Worksheets("TOT")
      lc = ws.Cells(3, Columns.Count).End(xlToLeft).Column
      
      
      ws.Range(Columns(lc - 2), Columns(lc)).Copy
      ws.Columns(lc + 1).Insert Shift:=xlToRight
      Application.CutCopyMode = False
      
      End Sub
      

      【讨论】:

        【解决方案3】:

        谢谢大家,我不知道这个

        必须在 Range >reference/object 上使用 Copy 和 PasteSpecial 方法。您正在尝试在 Columns 引用上使用 Copy

        我已经重新安排了我的代码如下,结果成功了

        Sub Macro1()
        Dim ws As Worksheet
        Dim LC As Long
        
        Set ws = ActiveWorkbook.Worksheets("TOT")
        LC = ws.Cells(3, Columns.Count).End(xlToLeft).Column
        
        ws.Columns(LC - 2).Insert
        ws.Columns(LC - 2).Insert
        ws.Columns(LC - 2).Insert
        ws.Range(Columns(LC + 1), Columns(LC + 3)).Copy
        ws.Range(Columns(LC - 2), Columns(LC)).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        ws.Range(Columns(LC - 2), Columns(LC)).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
                SkipBlanks:=False, Transpose:=False
        
        
        End Sub
        

        【讨论】:

        • 由于插入的 3 列与已经存在的最后 3 列完全相同。 我想在最后三个现有列的前面插入三个新列,并将最后三个现有列的值粘贴到三个新列中除非有定义的“名称” i> 在数据中。有吗?为什么不在最后一列之后复制最后三列,而不是插入新列?
        • 你是对的。我不知道为什么我没有早点想到这一点
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多