2016-03-17 7 views
0

Я пытаюсь вставить столбец в лист и скопировать формулы в него из соседнего столбца вправо.Excel Macro: вставка столбца и копирование формулы в него из соседнего столбца

Место для вставки колонки считывается из самого рабочего листа. E.G Столбец S (колонка 19).

Поэтому мне нужно вставить новый столбец в Column «S» и скопировать формулы из «старого» Колонка S, в настоящее время Колонка Т.

Я использую следующий код, но он дает мне ошибку 1004 ,

Sub Insert_Rows_Loop() 
     Dim CurrentSheet As Object 
     'MsgBox "ghj" & Sheet16.Range("H2").Value 
     Sheet2.Cells(1, Sheet16.Range("H2").Value).EntireColumn.Select 
     Selection.Copy 
     Selection.Insert Shift:=xlToLeft 
     Application.CutCopyMode = False 

     Sheet2.Cells(1, Sheet16.Range("G2").Value).EntireColumn.Select 
     Selection.Copy 
     Selection.Insert Shift:=xlToLeft 
     Application.CutCopyMode = False 

     Sheet2.Cells(1, Sheet16.Range("F2").Value).EntireColumn.Select 
     Selection.Copy 
     Selection.Insert Shift:=xlToLeft 
     Application.CutCopyMode = False 
End Sub 
+1

Добро пожаловать в Stackoverflow. Пожалуйста, не то, что это не сайт для написания кода, где люди просят разработать код для них. Вы просите, это довольно просто. Попробуйте использовать Macro-рекордер и вставьте «Столбец» перед «S», а затем скопируйте данные, а затем разместите этот код здесь и посмотрите, где мы можем помочь. Таким образом, вы избегаете подавать голоса за отсутствие кода с вашим вопросом. Удачи и наслаждайтесь Stackoverflow! –

ответ

0

ниже код будет делать следующее:

Вставьте новый столбец слева от текущего столбца S
Установить Формулы в колонке S в формулах в столбце Т (Старый столбец S) в колонке S

Dim CurrentSheet As Worksheet 
    Set CurrentSheet = ThisWorkbook.Sheets("Sheet1") 

With CurrentSheet 
     'Inserting the Column before Column S 
     .Range("S1").EntireColumn.Insert 
     'Copying the Formulas from the T(Old S) to S 
     .Range("S1").EntireColumn.Formula = .Range("T1").EntireColumn.Formula 
End With 

Вы должны установить значение в Range, чтобы удовлетворить ваши требования и вы Sheet Ссылка будет отличаться.

Надеюсь, у вас возникнет идея.

0

Ваш пример кода указывает на проблемы, с которыми сталкиваются, опираясь на методы поиска и ссылки на различные ячейки и рабочие листы в рабочей книге, используя методы .Select и .Activate. Избегайте .Выберите и .Activate в пользу прямой ссылки со ссылками¹.

Вторая проблема не является предопределенным порядком для ввода столбца. Пока вы можете вставить столбцы в случайном порядке, если есть восходящий шаблон к номерам столбцов, последние столбцы изменят положение, когда столбец будет вставлен справа от него. «Лучшая практика» заключается в том, чтобы вставить столбцы, начиная с правой стороны, и работать в направлении столбца A.

Ниже приведено описание вашего примера кода, поскольку оно не соответствует тому же потоку, что и ваш рассказ.

Sub Insert_Rows_Loop() 
    Dim c As Long, arr As Variant 

    With Sheet16 
     ReDim arr(2) 
     'get them in descending order so that inserting 1 does not change the position of 2 or 3 
     arr(0) = Application.Large(.Range("F2:H2"), 1) 
     arr(1) = Application.Large(.Range("F2:H2"), 2) 
     arr(2) = Application.Large(.Range("F2:H2"), 3) 
    End With 

    With Sheet2 
     For c = LBound(arr) To UBound(arr) 
      With .Columns(arr(c)) 
       .Copy 
       .Insert Shift:=xlToLeft 
      End With 
     Next c 
    End With 

    Application.CutCopyMode = False 
End Sub 

¹ См How to avoid using Select in Excel VBA macros для более методов на получение от полагаться на выбор и активировать для достижения ваших целей.

Смежные вопросы