2016-05-25 3 views
0

вот моя проблема. У меня есть два объекта Range. Например,excel vba комплект один диапазон объект другой другой диапазон объект

Set rg3 = Range("B2") 
    Set rg4 = Range("B3000") 

Я хочу сделать это

Range("rg3:rg4").PasteSpecial (xlPasteAll) 

Но это показывает ошибку. Как выбрать область с помощью двух объектов диапазона. Диапазон («B2: B3000») неверен в моем случае, потому что эти два диапазона всегда будут обновляться функцией смещения.

Спасибо за помощь!

+0

Пожалуйста, не могли бы вы пояснить, что вы подразумеваете под «этими двумя диапазонами всегда будут обновляться функцией смещения»? В противном случае вы можете попробовать: 'Range (rg3.Address &": "& rg4.Address) .PasteSpecial (xlPasteAll)', но я думаю, вы говорите, что это не то, что вы хотите. –

+0

Попробуйте функцию объединения, как в [это Q + A] (http://stackoverflow.com/q/9903792/1490783). –

ответ

1

Когда вы введете Range(, intellisense покажет Range(Cell1, Cell2) as Range, указав, что объект Range ожидает две ячейки.

Итак, видя, что rg3 и rg4 - две ячейки, вы можете использовать Range(rg3, rg4).

Вы используете xlPasteAll так что вы могли бы просто использовать RangeBeingCopiedReference.Copy Destination:=Range(rg3,rg4)

Edit - и, как говорит @Robin, что вы имеете в виду возмещающая?

Edit 2:
Если вы хотите, чтобы петли через ряд, то с помощью Cells проще, как она принимает номер столбца, а не букву столбца.

В этом примере будут скопированы столбцы A: J в U: AD по одной колонке за раз.

Sub Test() 

    Dim rg3 As Range, rg4 As Range 
    Dim x As Long 

    With ThisWorkbook.Worksheets("Sheet1") 
     For x = 1 To 10 
      .Range(.Cells(2, x), .Cells(3000, x)).Copy _ 
       Destination:=.Range(.Cells(2, x + 20), .Cells(3000, x + 20)) 
     Next x 
    End With 

End Sub 

Также - посмотреть ссылки на WITH... END WITH - https://msdn.microsoft.com/en-us/library/wc500chb.aspx

+0

rg3 и rg4 находятся внутри цикла for, каждый раз, когда он переместится на следующий colmn по смещению (0, 1) –

+0

Возможно, вам лучше использовать 'Cells', а не' Range', если вы хотите увеличить ссылку на диапазон в цикле , Я добавлю пример к моему ответу. –

1

Я хотел бы, чтобы лучше понять ваши потребности лучше помочь

как начала, так как ваше использование .PasteSpecial xlPasteAll я верю тебе 'задайте диапазон источника вне цикла и вставьте его несколько раз в этот последний диапазон смещения смещения

вы также пояснили «rg3 и rg4 находятся внутри цикла цикла, каждый раз, когда он будет двигаться к следующему colmn по смещению (0, 1)»

так что это приводит первоначально к:

Option Explicit 

Sub main() 
    Dim copyRng As Range, rg3 As Range, rg4 As Range 
    Dim i As Long 

    Set rg3 = Range("B2") '<~~ your rg3 range setting 
    Set rg4 = Range("B3000") '<~~ your rg4 range setting 
    Set copyRng = ... '<~~ your setting of the "source" range to be copied once and pasted many 
    copyRng.Copy '<~~ copy "source" Range once ... 
    With Range(rg3, rg4) '<~~ ... set your initial "target" range ... 
     For i = 1 To 10 
      .Offset(, i).PasteSpecial xlPasteAll '<~~ ... and paste "source" range offseting "target" once 
     Next i 
    End With 

End Sub 

, но это также будет бесцельно долго и медленно, так как вы могли бы просто написать :

Option Explicit 

Sub main() 
    Dim copyRng As Range, rg3 As Range 

    Set rg3 = Range("B2") '<~~ just set the "beginning" of the target range 
    Set copyRng = ... '<~~ your setting of the "source" range to be copied once and pasted many 
    copyRng.Copy copyRng.Copy Destination:=rg3.Resize(, 10) 
End Sub 

так что вы в действительности нуждаетесь?

Смежные вопросы