Страницы: 1
RSS
Ошибка во время вставки столбцов(Range.Insert)
 
Всем привет.

Возникла проблема при попытке вставить столбцы.
Если с нуля запустить Excel и потом запускать этот макрос (код ниже), то все проходит на ура. Книга создается, заполняется и столбцы вставляются.
Если же включить BreakMode (Ctrl+Pause Break) и запустить макрос, то при вставке столбцов выдает
Цитата
Run-time error '1004': application-defined or object-defined error
Код
Sub testinsert()
    Dim RWS As Object
    Dim RngInsert As String
    
    Set RWS = Workbooks.Add.ActiveSheet 'Создание новой книги и сет листа
    RngInsert = "G:G,H:H" 'Столбцы, которые нужно вставить
    
    RWS.[a1:m10] = "test" 'Внесение данных
    RWS.Range(RngInsert).Insert 'Вставка столбцов
    
    Set RWS = Nothing 'Чистка переменной    
End Sub

Как с этим бороться? Или хотя бы есть этому какое-то объяснение?
Заранее спасибо.

P.s. Юнион уже пробовал, да, как вариант, но слишком туговат да и RngInsert всегда генерируется.
 
Создаете дубли тем на других ресурсах - давайте ссылки.
 
Здесь указать на дублирующуюся тему или там указать на оригинальную? Сори, просто не видел тут такого т.к. редко захожу.
 
Pierre Dunn, да где задаете одни и те же темы с одним и тем же вопросом нужно ссылки писать, что бы люди не тратили время если там уже окажут помощь.

вообще не понял когда макрос не работает
Изменено: Mershik - 07.10.2020 20:16:05
Не бойтесь совершенства. Вам его не достичь.
 
Код
Sub testinsert()
    Dim RWS As Worksheet
    
    Set RWS = Workbooks.Add.ActiveSheet 'Создание новой книги и сет лист
    RWS.[A1:M10] = "test" 'Внесение данных
    RWS.Columns("G:H").Insert 'Вставка столбцов
End Sub
 
New, к сожалению эффект от "G:H" значительно отличается от эффекта "G:G,H:H".
 
Забавно, если при включенном (ctrl + pause break) сделать так:
Код
RngInsert = "G:G;H:H"
То всё работает без ошибок
Но тогда эта ошибка возникает когда впервые открываешь
Походу дело в региональных настройках?
Изменено: Александр П. - 08.10.2020 05:04:49
 
Александр П.,Ты чертовски прав. Спасибо за наводку. Улетаю дальше разносить вба.

Кстати, очень забавный факт. Даже после Break, свойство Address возвращает значения через запятую, а не через точку с запятой
Изменено: Pierre Dunn - 08.10.2020 10:24:22
 
Цитата
Pierre Dunn написал:
Как с этим бороться?
Например так:
Код
Sub testinsert()
    Dim RWS As Object
    Dim RngInsert As String
     
    Set RWS = Workbooks.Add.ActiveSheet 'Создание новой книги и сет листа
    RngInsert = "G:G,H:H" 'Столбцы, которые нужно вставить
     
    RWS.[a1:m10] = "test" 'Внесение данных
    a = Split(RngInsert, ",")
    For i = UBound(a) To 0 Step -1
        RWS.Range(a(i)).Insert 'Вставка столбцов
    Next i
    Set RWS = Nothing 'Чистка переменной
End Sub
 
Александр П., да как раз вчера так и сделал, пока не увидел твой ответ. Сейчас реализовал так

Код
Public Sub InsertMultiColumns(ByRef WS As Object, ByRef Rng As String)
''''Вставка столбцов в несколько диапазонов
    On Error GoTo TryTwo 'если выпадает на ошибку, то попытка еще раз, только уже с разделением диапазонов через точку с запятой
    
    Dim ArrRng As Variant
    Dim i As Long
    
'   формирование массива с диапазонами двух видов
    ReDim ArrRng(1 To 2)
    ArrRng(1) = Replace(Rng, ";", ","): ArrRng(2) = Replace(Rng, ",", ";")
TryTwo:

'   вставка диапазона

    i = i + 1
    WS.Range(ArrRng(i)).EntireColumn.Insert
    On Error GoTo 0

End Sub
Изменено: Pierre Dunn - 08.10.2020 11:38:51
Страницы: 1
Наверх