Всем привет. Затерялся мой пост на планете, спрошу еще здесь. Если что кросс: здесь
Прошу помочь добить макрос копирования со вставкой новых строк. Файл с тем что хочу получить вложил, там есть наброски макросов, но до конца они работу не доводят (новые строки вставляются как нужно, а как перенести скопированное пока не соображу)
Поясню суть зачем это нужно: - часто приходится вставлять в готовые таблицы некие статичные данные, которые с двух сторон окружены ВПР-ами и после вставки формулы просто протягиваются. Не добавляем в конец, потому что так проще потом протянуть и не надо менять диапазоны в формулах и сводных.
Пытаюсь сделать универсальное решение - из любого места скопировал, в любое вставил. Решение делится на два этапа - одним макросом скопировал, другим вставил. Если можно обойтись без спец. копирования - будет круто.
Всем привет. Затерялся мой пост на планете, спрошу еще здесь. Если что кросс: здесь
Прошу помочь добить макрос копирования со вставкой новых строк. Файл с тем что хочу получить вложил, там есть наброски макросов, но до конца они работу не доводят (новые строки вставляются как нужно, а как перенести скопированное пока не соображу)
Поясню суть зачем это нужно: - часто приходится вставлять в готовые таблицы некие статичные данные, которые с двух сторон окружены ВПР-ами и после вставки формулы просто протягиваются. Не добавляем в конец, потому что так проще потом протянуть и не надо менять диапазоны в формулах и сводных.
Пытаюсь сделать универсальное решение - из любого места скопировал, в любое вставил. Решение делится на два этапа - одним макросом скопировал, другим вставил. Если можно обойтись без спец. копирования - будет круто.IgorStorm
Dim CntS, rn As Range Dim rCopyRange As Range Dim CnA
Sub Копировать() If Selection.Count > 1 Then Set rCopyRange = Selection.Cells Else: Set rCopyRange = ActiveCell End If CntS = Selection.Rows.Count End Sub
Sub Вставить() On Error Resume Next Dim rCell As Range, li As Long, le As Long, lCount As Long, iCol As Integer Dim sA As String Cntt = ActiveCell.Row sA = ActiveCell.Address ActiveSheet.Rows(Cntt).Resize(CntS).Insert For iCol = 1 To rCopyRange.Columns.Count li = 0: lCount = 0: le = iCol - 1 For Each rCell In rCopyRange.Columns(iCol).Cells Do rCell.Copy ActiveCell.Offset(li, le): lCount = lCount + 1 li = li + 1 Loop While lCount <= 0 Next rCell Next iCol End Sub
[/vba]
Что-то такое получилось. Вроде работает.
[vba]
Код
Dim CntS, rn As Range Dim rCopyRange As Range Dim CnA
Sub Копировать() If Selection.Count > 1 Then Set rCopyRange = Selection.Cells Else: Set rCopyRange = ActiveCell End If CntS = Selection.Rows.Count End Sub
Sub Вставить() On Error Resume Next Dim rCell As Range, li As Long, le As Long, lCount As Long, iCol As Integer Dim sA As String Cntt = ActiveCell.Row sA = ActiveCell.Address ActiveSheet.Rows(Cntt).Resize(CntS).Insert For iCol = 1 To rCopyRange.Columns.Count li = 0: lCount = 0: le = iCol - 1 For Each rCell In rCopyRange.Columns(iCol).Cells Do rCell.Copy ActiveCell.Offset(li, le): lCount = lCount + 1 li = li + 1 Loop While lCount <= 0 Next rCell Next iCol End Sub
Пытаюсь сделать универсальное решение - из любого места скопировал, в любое вставил
Ну вот так, мне нравится. [vba]
Код
Dim CntS as Integer Dim rn As Range Dim rd As Range
Sub Копирование() 'выбираем диапазон-источник Set rn = Selection ' Диапазон-источник CntS = Selection.Rows.Count 'кол-во строк UserForm1.Show 'диалог для выбора места вставки End Sub
Sub Вставка() ' после выбора диапазона-приёмника Application.CutCopyMode = False ActiveCell.Resize(CntS).EntireRow.Insert 'вставляет нужное кол. строк Set rd = Selection 'диапазон-приёмник rn.Copy Destination:=rd 'Копирует диапазон-источник в диапазон-приёмник End Sub
[/vba] Еще диалог вставил для удобства, в файле посмотри. кнопку "Копирование" в ленте еще сделаешь и ОК.
Пытаюсь сделать универсальное решение - из любого места скопировал, в любое вставил
Ну вот так, мне нравится. [vba]
Код
Dim CntS as Integer Dim rn As Range Dim rd As Range
Sub Копирование() 'выбираем диапазон-источник Set rn = Selection ' Диапазон-источник CntS = Selection.Rows.Count 'кол-во строк UserForm1.Show 'диалог для выбора места вставки End Sub
Sub Вставка() ' после выбора диапазона-приёмника Application.CutCopyMode = False ActiveCell.Resize(CntS).EntireRow.Insert 'вставляет нужное кол. строк Set rd = Selection 'диапазон-приёмник rn.Copy Destination:=rd 'Копирует диапазон-источник в диапазон-приёмник End Sub
[/vba] Еще диалог вставил для удобства, в файле посмотри. кнопку "Копирование" в ленте еще сделаешь и ОК.al-Ex