2015-05-19 18 views
0

У меня возникли проблемы с вставкой новых столбцов и вставкой значений последних столбцов в этих новых столбцах.Найти и скопировать/вставить последние колонки

код я получил до сих пор это

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 

Я хочу, чтобы вставить три новых colums в передней части последних трех существующих столбцов и вставить значения последних трех существующих столбцов в трех новых столбцах. В этих областях нет объединенных ячеек.

ответ

0

Спасибо всем, я не знал об этом

Оба Копировать и PasteSpecial методы должны быть использованы на Range> ссылки/объекта. Вы пытаетесь использовать копии на Columns ссылки

я переставить свой код следующим образом, и это работает

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 
+0

Так как 3-х колонок вставляются точно так же, как в прошлом 3 уже существующих. _ Я хочу вставить три новых столбца перед последними тремя существующими столбцами и вставить значения трех последних существующих столбцов в трех новых столбцах. Если в данных не указано определенное «Имя» _. Это любой? Почему бы не копировать последние 3 столбца после последнего столбца вместо того, чтобы вставлять новые столбцы? – EEM

+0

Вы правы. Я понятия не имею, почему я не думал об этом раньше – user4373888

0

Методы Copy и PasteSpecial должны использоваться на объекте Range. Вы пытаетесь использовать Copy по ссылке Columns. Попробуйте вместо этого:

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 не изменяется при вставке столбцов, чтобы оно стало вводить в заблуждение.

0

Попробуйте это:

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 
Смежные вопросы