2014-12-15 10 views
1

Я написал макрос для копирования и вставки строк или столбцов в разных местах в зависимости от входной строки. Место расположения копий и вставки определяется в поле «Именованные диапазоны» в электронной таблице.Excel VBA Macro - метод копирования класса диапазона не удалось и метод Insert класса класса диапазона не удалось

Если я хочу добавить несколько столбцов в том же разделе, все будет отлично. Если добавить еще один столбец в одной секции, то нужно добавить столбец в другой секции, я получаю один из двух ошибок: метода копирования класса Range неудавшихся ИЛИ Вставить метод класса Range не удался

I убежища не удалось выяснить, почему иногда метод копирования вызывает ошибку, а иногда и нет. Любая помощь будет принята с благодарностью.

Код:

Sheets("TL Master").Range("Insert" & strAddType).Copy 

     'Offset for row/column 
     If strRowColumn = "row" Then 
      'Row = add value above 
      Range("Insert" & strAddType).Insert Shift:=xlDown 
      Range("Add" & strAddType & "ButtonCell").Offset(-4, 0).Value = strNewName 
     Else 
      'Column = add value left 
      Sheets("TL Master").Range("Insert" & strAddType).Insert Shift:=xlToRight 
      Range("Add" & strAddType & "ButtonCell").Offset(0, -4).Value = strNewName 
      If strAddType = "Machine" Then Range("Add" & strAddType & "ButtonCell").Offset(0, -4).Interior.Color = clrComplexityColor 

     End If 

ответ

2

Вы код отсутствует имя листа. Например -

Sheets("TL Master").Range("Insert" & strAddType).Copy 

    'Offset for row/column 
    If strRowColumn = "row" Then 
     'Row = add value above 
     Sheets("TL Master").Range("Insert" & strAddType).Insert Shift:=xlDown 
     Sheets("TL Master").Range("Add" & strAddType & "ButtonCell").Offset(-4, 0).Value = strNewName 
    Else 
     'Column = add value left 
     Sheets("TL Master").Range("Insert" & strAddType).Insert Shift:=xlToRight 
     Sheets("TL Master").Range("Add" & strAddType & "ButtonCell").Offset(0, -4).Value = strNewName 
     If strAddType = "Machine" Then Range("Add" & strAddType & "ButtonCell").Offset(0, -4).Interior.Color = clrComplexityColor 

    End If 

Другая вещь, которую я хотел бы сделать к сведению, если ваши данные Offset силы должны быть наклеены снаружи листа это вызовет ошибку. Например, если ваш именованный диапазон равен A1: A10, и вы делаете, а Offset (0, -1), это отключено от листа и вызывает ошибку.

Надеюсь, это поможет.

+0

Или если вы не будете писать имя листа столько раз, сколько можете использовать с инструкцией. Это будет: 'С Sheets ("TL Master")' ' Если ... затем' ' .Range ("вставить" ...) ... '' Else ... '' End Если ... ' ' End With ... ' – Liniel

+0

Я внес изменения, которые вы предложили, и я все равно получаю те же ошибки. Я также периодически получаю новую ошибку. ** Ошибка автоматизации Отключенный объект отключился от своих клиентов. ** – John

+0

Я рассмотрел возможность, которую вы упомянули о склеивании за пределами листа, и мне тоже не повезло. Как я упоминал в своем оригинальном посте, все работает, когда я открываю лист; Я могу добавить строки или столбцы в любом месте. После того, как я добавлю свою первую строку или столбец, я могу продолжить добавление большего количества в тот же раздел электронной таблицы, используя тот же именованный диапазон, но я получаю ошибку, если я попытаюсь добавить в другой раздел. – John

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