Вставить диапазон как переменную с одного листа на другой - PullRequest
0 голосов
/ 05 ноября 2018

Я сейчас ищу решение, которое дольше, чем я готов, поэтому вот моя проблема.

Мне нужно вставить динамический диапазон столбцов, состоящий в основном из 2 строк, на другой лист после первого столбца. Я не могу жестко закодировать столбцы, поэтому я создал Application.InputBox, где пользователь должен выбрать диапазон и затем подтвердить свой выбор. Теперь, если я возьму диапазон и сделаю текстовое поле с адресом rng.address, он покажет диапазон e.G. A $ B $.

Теперь, когда я пытаюсь вставить диапазон, я получаю всевозможные ошибки в зависимости от того, как я пытаюсь.

Мой текущий подход следующий:

dim rng as Range
         retry:
Set rng = Application.InputBox("Do that and that", "Obtain Range Object", Type:=8)

 If MsgBox("Your choice " & rng.Address & " ?", vbYesNo, "Confirm") = vbYes Then
    GoTo continue:
    Else
    GoTo retry:
    End If

         continue:

'#1) i tried this:
Worksheets(templateold).Range(rng).Insert Shift:=xlToRight Worksheets(templatenew).Range(rng)

'#2) and i tried that:
Worksheets(templateold).Range(rng).Copy Worksheets(templatenew).Range(rng)

Я пробовал выбрать кулак, а затем скопировать, но ничего не работает. (

Как использовать диапазон, сохраненный в переменной, для вставки диапазона в другой лист? Извините, если мой фрагмент кода плохой, я пробовал больше вещей на работе, но у меня нет всего дома.

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Следующая команда скопирует выбранный пользователем диапазон, а затем вставит его на другой лист в столбце B, сдвинув все остальное вправо:

Sub foo()
Application.ScreenUpdating = False

Dim templateold As Worksheet: Set templateold = ThisWorkbook.Worksheets("Sheet1")
Dim templatenew As Worksheet: Set templatenew = ThisWorkbook.Worksheets("Sheet2")
'declare and set the worksheets you are working with, amend as required.
Dim rng As Range

retry:
Set rng = Application.InputBox("Do that and that", "Obtain Range Object", Type:=8)

If MsgBox("Your choice " & rng.Address & " ?", vbYesNo, "Confirm") = vbYes Then
    rng.Copy
    templateold.Range("B:B").Insert Shift:=xlToRight
Else
    GoTo retry:
End If

Application.ScreenUpdating = True
End Sub
0 голосов
/ 05 ноября 2018

Предположим, у нас есть два листа: Лист1 (Источник копирования) и Лист2 (Цель вставки). Мы знаем, где начинаются данные (A1 на wsSource), но данные могут иметь 4 столбца или 40 столбцов (то же самое со строками).

Когда вы хотите найти последнюю строку или последний столбец в определенном диапазоне, мы используем CurrentRegion.Rows / Columns.Count, который будет возвращать последнюю строку / столбец как длинный.

Sub DuplicateRange()
Dim wsSource As Worksheet, wsTarget As Worksheet
Dim lRow As Long, lCol As Long

Set wsSource = ThisWorkbook.Sheets("Sheet1")
Set wsTarget = ThisWorkbook.Sheets("Sheet2")

' We know A1 is the starting (top-left) cell. _
using CurrentRegion.Rows/Columns.Count we can _
find the range of data without hardcoding the columns
lRow = wsSource.Range("A1").CurrentRegion.Rows.Count
lCol = wsSource.Range("A1").CurrentRegion.Columns.Count

' Range(A1:lCol,lRow)
With wsSource.Range(Cells(1, 1), Cells(lRow, lCol))
    .Copy wsTarget.Cells(1, 1)
End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...