excel vba通过其他两个范围对象设置一个范围对象

时间:2016-05-25 08:22:17

标签: excel vba excel-vba

这是我的问题。我有两个Range对象。例如,

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

我想这样做

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

但它显示错误。如何通过两个范围对象选择区域。 范围(" B2:B3000")在我的情况下是不正确的,因为这两个范围总是由偏移函数更新。

感谢您的帮助!!!

2 个答案:

答案 0 :(得分:1)

当您输入Range(时,intellisense将显示Range(Cell1, Cell2) as Range,表示Range对象需要两个单元格。

因此,看到rg3和rg4是两个单元格,您可以使用Range(rg3, rg4)

您正在使用xlPasteAll,因此您可以使用RangeBeingCopiedReference.Copy Destination:=Range(rg3,rg4)

编辑 - 正如@Robin所说,抵消时你的意思是什么?

编辑2:
如果您想循环遍历某个范围,那么使用Cells会更容易,因为它接受列号而不是列字母。

此示例将A:A列一次复制到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

上查找参考

答案 1 :(得分:1)

我希望更好地了解您对更好帮助的需求

首先,因为您使用 mySkypeUri="xyz@gmail.com" Uri skypeUri = Uri.parse("sip:" + mySkypeUri); Intent skypeIntent = new Intent(Intent.ACTION_VIEW, skypeUri); startActivity(skypeIntent); 我相信您在循环外设置了一个源范围,并在后一个移动粘贴范围内多次粘贴

你还解释了" rg3和rg4在for循环中,每次它将通过offset(0,1)"

移动到下一个colmn

所以这最初会导致:

.PasteSpecial xlPasteAll

但这也是无用的长而慢,因为你可以简单地写:

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

那么您的真正需求是什么?