Страницы: 1
RSS
Добавление столбца левее помеченного "!!!", ошибка в макросе Method Range of object '_Global' failed
 
Добрый день,
Помогите разобраться, в чем ошибка.
Есть простой код на добавление столбца левее помеченного "!!!" и копирование из столбца слева в новый.
Код
Sub Копия_столбца()
Dim Col1
Dim LastRow1

Col1 = Range("A1:XX1").Find("!!!").Column
'Col1 = Cells(1).Find("!!!").Column
        
    Columns(Col1).Select
    Selection.Insert Shift:=xlToRight

LastRow1 = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
    Range(Cells(1, Col1 - 1), Cells(LastRow1, Col1 - 1)).Select
    Selection.AutoFill Destination:=Range(Cells(1, Col1 - 1), Cells(LastRow1, Col1)), Type:=xlFillDefault  
End Sub

Применяется ко многим однотипным файлам. Иногда вызывает ошибку 1004 Method Range of object '_Global' failed
Если закомментить строку Range и использовать Cells, то: ошибка 91 Object Variable or With block variable not set

Пожалуйста, поясните, что я не верно обозначил.
Пример во вложении.
Изменено: zrbite - 16.03.2017 11:55:19
 
В любой книге будет ошибка, т.к. не найдёт эти "!!!"
Изменено: Hugo - 16.03.2017 11:42:10
 
Цитата
zrbite написал: в любой книге можно ввести "!!!" и протестировать
Создать книгу, записать в ячейку "!!!", копировать код. Или легче взять готовое из темы?
 
Добавлен пример в пост.
 
А откуда там XX1?
 
Ну это произвольный диапазон.
Грамотнее, конечно, взять строку Cells, наверное. Тем не менее тогда мы тоже получаем ошибку.

Или нужно обязательно определять последний столбец в активной области листа?
 
Произвольный? Почему тогда не XYZ1? Красивее имхо :)
 
Собственно обошел проблему с Range() задав диапазон поиска в столбцах активной областью.
Тем не менее причину ошибки в оригинале и возможно ли использовать вариант Cells(), я так и не понял.
Буду благодарен ответу.

Код
Sub Копия_Столбца()

Dim Col1
Dim LastRow1
Dim LastCol1

LastCol1 = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Column
Col1 = Range(Cells(1, 1), Cells(1, LastCol1)).Find("!!!").Column
    'Col1 = Cells(1).Find("!!!").Column
        
Columns(Col1).Select
Selection.Insert Shift:=xlToRight
    
LastRow1 = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
Range(Cells(1, Col1 - 1), Cells(LastRow1, Col1 - 1)).Select
Selection.AutoFill Destination:=Range(Cells(1, Col1 - 1), Cells(LastRow1, Col1)), Type:=xlFillDefault
    
End Sub
 
Причина в том, что в файле нет ячейки XX1!
Намёков не понимаете...
 
Но почему не работает вариант с Cells() то?

По Range() дело в формате файла, сразу не обратил внимания, оригинал, в котором писался код и работает макрос имеет .xlsm, поэтому там я с проблемой и не столкнулся.
 
Так и с Cells работает, и с Range (если ячейку существующую прописать).
 
А зачем Вам переменная LastRow?
Код
Sub Macro1()
Dim LastColumn As Long, i As Long
    LastColumn = Cells(1, Columns.Count).End(xlToLeft).Column
    For i = LastColumn To 1 Step -1
        If Cells(1, i) = "!!!" Then Columns(i).Insert
    Next
End Sub
 
Используйте
Код
Dim iCell As Range
  Set iCell = Rows(1).Find("!!!")
    Col1 = iCell.Column
Страницы: 1
Наверх