Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.05.2011, 03:46   #1
Trimbl
Форумчанин
 
Регистрация: 11.08.2009
Сообщений: 135
По умолчанию Строки, строки

Здавствуйте Все!
Столько о них(строках)говорено и все равно возник вопрос.
В прилагаемом файле есть кнопка "Новый участок" запускающая макрос "NewUshastok".
Вопрос: 1. Как в вновь созданном блоке удалить диапазон строк с 17 по 19 включительно(количество строк не постоянно). В столбцах А и В ячейки объеденены(что меня и тупит).
2.Будьте добры, объясните почему в моем примере такой код копирования и вставки строк не работает

Sub NewUshastok()

Dim i As Long, j As Long
Application.ScreenUpdating = False

i = Cells(Rows.Count, 1).End(xlUp).Row
j = i - Cells(i - 2, 1).MergeArea.Rows.Count
Rows(i + 1 & ":" & j).Copy 'Копирует диапазонстрок не с 10 а, с 11 строки в приведенном примере
Rows(i).Insert 'Выдает ошибку Run-time error 1004
Application.ScreenUpdating = True
End Sub
Спасибо.
Вложения
Тип файла: rar АмзФ.rar (36.8 Кб, 17 просмотров)
Trimbl вне форума Ответить с цитированием
Старый 05.05.2011, 09:39   #2
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Так попробуйте:
Код:
Sub NewUshastok()
Dim i As Long, j As Long, rng As Range
Application.ScreenUpdating = False
i = Cells(Rows.Count, 1).End(xlUp).Row
Set rng = Range(Cells(i - 2, 1).MergeArea, Cells(i + 1, 1))
rng.EntireRow.Copy Cells(i, 1)
j = Cells(Rows.Count, 1).End(xlUp).Row
Cells(j - 4, 3) = 1: Cells(j - 3, 3) = 2
If rng.Count > 6 Then Range(Cells(j - 5, 1), Cells(i, 1)).EntireRow.Delete
Application.ScreenUpdating = True
End Sub
Оставляем две строки, чтобы формулы не сбились.
nilem вне форума Ответить с цитированием
Старый 05.05.2011, 14:18   #3
Trimbl
Форумчанин
 
Регистрация: 11.08.2009
Сообщений: 135
По умолчанию

Цитата:
Сообщение от nilem Посмотреть сообщение
Так попробуйте:
Код:
Sub NewUshastok()
Dim i As Long, j As Long, rng As Range
Application.ScreenUpdating = False
i = Cells(Rows.Count, 1).End(xlUp).Row
Set rng = Range(Cells(i - 2, 1).MergeArea, Cells(i + 1, 1))
rng.EntireRow.Copy Cells(i, 1)
j = Cells(Rows.Count, 1).End(xlUp).Row
Cells(j - 4, 3) = 1: Cells(j - 3, 3) = 2
If rng.Count > 6 Then Range(Cells(j - 5, 1), Cells(i, 1)).EntireRow.Delete
Application.ScreenUpdating = True
End Sub
Оставляем две строки, чтобы формулы не сбились.
nilem, попробовал, все ОК. Извиняюсь за долгое отсутствие,- был в пути. Спасибо.
Trimbl вне форума Ответить с цитированием
Старый 06.05.2011, 12:22   #4
Trimbl
Форумчанин
 
Регистрация: 11.08.2009
Сообщений: 135
По умолчанию

Цитата:
Сообщение от Trimbl Посмотреть сообщение
nilem, попробовал, все ОК. Извиняюсь за долгое отсутствие,- был в пути. Спасибо.
Уважаемый nilem, извиняюсь, но самоуверенность подвела. Добавил в Ваш код две строки с целью нумерации участков(столбец А). В подобных кодах работает, а тут хоть плачь и не туды и не сюды. Будьте добры, - посмотрите.
Sub NewUshastok()
Dim i As Long, j As Long, n As Long, rng As Range
Application.ScreenUpdating = False
i = Cells(Rows.Count, 1).End(xlUp).Row
Set rng = Range(Cells(i - 2, 1).MergeArea, Cells(i + 1, 1))
rng.EntireRow.Copy Cells(i, 1)
n = Cells(i - 2, 1)
j = Cells(Rows.Count, 1).End(xlUp).Row
Cells(j - 4, 3) = 1: Cells(j - 3, 3) = 2
If rng.Count > 6 Then Range(Cells(j - 5, 1), Cells(i, 1)).EntireRow.Delete
Cells(i, 1) = n + 1
Application.ScreenUpdating = True
End Sub
Trimbl вне форума Ответить с цитированием
Старый 06.05.2011, 13:44   #5
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

С объединенными ячейками всегда проблемы. Пробуйте так:
Код:
Sub NewUshastok()
Dim i As Long, j As Long, n As Long, rng As Range
Application.ScreenUpdating = False
i = Cells(Rows.Count, 1).End(xlUp).Row
n = Cells(i - 2, 1).MergeArea.Cells(1, 1).Value
Set rng = Range(Cells(i - 2, 1).MergeArea, Cells(i + 1, 1))
rng.EntireRow.Copy Cells(i, 1)
j = Cells(Rows.Count, 1).End(xlUp).Row
If rng.Count > 6 Then Range(Cells(j - 5, 1), Cells(i, 1)).EntireRow.Delete
Cells(i, 3) = 1: Cells(i + 1, 3) = 2: Cells(i, 1) = n + 1
Application.ScreenUpdating = True
End Sub
nilem вне форума Ответить с цитированием
Старый 07.05.2011, 00:24   #6
Trimbl
Форумчанин
 
Регистрация: 11.08.2009
Сообщений: 135
По умолчанию

Цитата:
Сообщение от nilem Посмотреть сообщение
С объединенными ячейками всегда проблемы. Пробуйте так:
Код:
Sub NewUshastok()
Dim i As Long, j As Long, n As Long, rng As Range
Application.ScreenUpdating = False
i = Cells(Rows.Count, 1).End(xlUp).Row
n = Cells(i - 2, 1).MergeArea.Cells(1, 1).Value
Set rng = Range(Cells(i - 2, 1).MergeArea, Cells(i + 1, 1))
rng.EntireRow.Copy Cells(i, 1)
j = Cells(Rows.Count, 1).End(xlUp).Row
If rng.Count > 6 Then Range(Cells(j - 5, 1), Cells(i, 1)).EntireRow.Delete
Cells(i, 3) = 1: Cells(i + 1, 3) = 2: Cells(i, 1) = n + 1
Application.ScreenUpdating = True
End Sub
nilem, благодаря Вам, сделан еще один шаг в познании необходимого минимума, для создания документов Excel средствами VBA. Спасибо
Trimbl вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Даны строки S и S0. Удалить из строки S все подстроки, совпадающие с S0 . Если совпадающих подстрок нет, Шпунюся Помощь студентам 1 16.12.2010 21:02
Создание пустой строки и копирование в неё содержимое предыдущей строки Gvaridos Microsoft Office Excel 2 29.10.2010 13:33
Дбавление новой строки, после строки с подходящими параметрами RailOS Microsoft Office Excel 5 18.08.2010 10:12
Определять максимальную длину той части строки s, которая не содержит символы из строки s1. Александе еть я Общие вопросы C/C++ 5 13.04.2010 20:54
Перенести символа с начала строки в место перед запятой этой же строки. Zhiltsov Microsoft Office Excel 4 05.06.2009 13:10