Страницы: 1
RSS
Вставка Range.Insert, Вставка Range.Insert
 
Здравствуйте, не могу разобраться, использую VBA метод вставки Range("").Copy Range("").Insert
в одном случае диапазон вставляется корректно на то количество строк, которое имеет сам,
в другом случае диапазон вставляется размером с диапазон конечный

в примере понятнее

мистика какая-то, в чем проблема может быть?
Изменено: papadulo - 09.11.2022 08:10:05
 
проблема может быть в  том, что вам нужен не .Insert
задачу опишите, которую решаете
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
написал:
проблема может быть в  том, что вам нужен не .Insert
задачу опишите, которую решаете
есть статичная таблица на 20000 строк и есть запрос PQ к интернет-ресурсу который загружает ежедневно при открытии файла 3-10 строк. Эти строки надо вставить в статичную таблицу. Знаю что можно использовать "добавить запросы" PQ и получить объединенную по строкам таблицу, но применение невозможно из-за хитрых фильтров дат, которые используются в запросе к интернет-ресурсу, поэтому нужна "грубая" вставка через VBA при нажатии кнопки. Все как в примере. Проблема в том что я используя .Insert на диапазон из 3-х полученных строчек и получаю статичную таблицу не на 20003 строки, а на 40003 строк, потому что эти 3 строчки вставились 20000 раз
Изменено: papadulo - 09.11.2022 09:05:45
 
Цитата
написал:
Проблема в том что я используя .Inser
да! именно в этом проблема))
1 проблема в том, что вы используете непригодный для решения задачи инструмент; вы решили носить воду решетом, как только возьмете ведро - сразу получится наносить воды
2 проблема в том, что я спрашиваю какую задачу вы решаете, а вы рассказываете как все не получается с Insertом

и... я больше в этом не участвую - я быстро устаю умоляя кого-то обьяснить задачу) сил на решение уже не остается
Изменено: Ігор Гончаренко - 09.11.2022 09:51:45
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ну например так:
Код
Range(Cells(4, 1), Cells(5, 3)).Copy Cells(Cells(Rows.Count, 5).End(xlUp).Row + 1, 5)
 
Цитата
написал:
Цитата
написал:
Проблема в том что я используя .Inser
да! именно в этом проблема))
1 проблема в том, что вы используете непригодный для решения задачи инструмент; вы решили носить воду решетом, как только возьмете ведро - сразу получится наносить воды
2 проблема в том, что я спрашиваю какую задачу вы решаете, а вы рассказываете как все не получается с Insertом

и... я больше в этом не участвую - я быстро устаю умоляя кого-то обьяснить задачу) сил на решение уже не остается
типичный завсегдатай, максимум флуда 0 ответов)
задача конкретная, в примере максимально понятно и упрощенно расписана, из таблички А скопировать строки в табличку Б, ошибки есть? Есть. Где и как применяется не имеет разницы, не знаешь ответ - листай дальше, умные люди ответят
Цитата
написал:
Ну например так:
Код
    [URL=#]?[/URL]       1      Range(Cells(4, 1), Cells(5, 3)).Copy Cells(Cells(Rows.Count, 5).  End  (xlUp).Row + 1, 5)   
 
из вашего примера строки вставляются не в именованный диапазон, а рядом, это можно исправить?
 
Эта "мистика какая-то" происходит, если число строк в исходном и конечном диапазонах кратное. У лист1таблица1 - 2 строки, лист1таблица2 - 20: значения кратные, поэтому вставляется 20 строк вместо 2. А у лист2таблица1 - 4 строки, лист2таблица2 - 11 строк: некратное, поэтому вставляется правильно. И если в лист2таблица2 добавить строку, т.е. будет 12, то опять вставится 12 строк вместо 4. И это не зависит от того, таблица это или именованный диапазон.
Почему так происходит - ХЗ! В интернетах причину не нашёл (плохо искал). Сейчас настоящие спецы придут и, возможно, пояснят.
Но такого рода "мистики" можно попробовать обойти. Например, так работает:
Код
Range("лист1таблица2").Cells(1, 1).Insert
 
Цитата
papadulo написал:
из вашего примера строки вставляются не в именованный диапазон, а рядом
у меня добавляются ячейки к именованному диапазону
 
Цитата
написал:
Эта "мистика какая-то" происходит, если число строк в исходном и конечном диапазонах кратное. У лист1таблица1 -  2  строки, лист1таблица2 -  20 : значения кратные, поэтому вставляется 20 строк вместо 2. А у лист2таблица1 -  4  строки, лист2таблица2 -  11  строк: некратное, поэтому вставляется правильно. И если в лист2таблица2 добавить строку, т.е. будет 12, то опять вставится 12 строк вместо 4. И это не зависит от того, таблица это или именованный диапазон.
Почему так происходит -    ХЗ!    В интернетах причину не нашёл (плохо искал). Сейчас настоящие спецы придут и, возможно, пояснят.
Но такого рода "мистики" можно попробовать обойти. Например, так работает:  
Код
    [URL=#]?[/URL]       1      Range(  "лист1таблица2"  ).Cells(1, 1).Insert   
 
Отлично, то что надо, спасибо!
Действительно ошибка вставки из-за размера конечной таблицы, кто бы мог подумать. В оф. документации по методу ни слова про это
Изменено: papadulo - 09.11.2022 13:53:05
Страницы: 1
Наверх