簡體   English   中英

有沒有辦法使用字符串引用范圍變量?

[英]Is there a way to reference a range variable using strings?

我已經使用Set來創建名稱為rng1a格式的rng1a 然后,我使用循環遍歷i (整數)值,並希望將最終范圍設置為以'rng' & i & "a"形式命名的范圍

我最初的想法是與Range("rng" & i & "a") ,但這會導致錯誤。

Set rng1a = Range("B2", Range("B2").End(xlDown))
Set rng2a = Range("D2", Range("E2").End(xlDown))
i = 1
Do
    ("rng" & i & "a").Copy                      'this is the problem
    Range("A2").End(xlDown).Offset(1,0).PasteSpecial xlPasteValues
    i = i + 1
Loop Until i = 3

我不斷收到錯誤消息

運行時錯誤“ 1004”:
對象“ _Global”的方法“范圍”失敗

我的想法是,我需要將范圍名稱格式化為字符串,以便可以將其識別為范圍名稱。 有沒有辦法做到這一點?

我沒有測試過任何一個,但是我認為它們應該起作用。

小心使用End(xldown) ,就好像在第一個單元格下面沒有任何東西一樣,您將直接進入最后一個單元格。 最好從底部開始工作(請參見Damian的答案)。

Sub x1()

'Array

Dim rng(1 To 2) As Range, i As Long

Set rng(1) = Range("B2", Range("B2").End(xlDown))
Set rng(2) = Range("D2", Range("E2").End(xlDown))

For i = 1 To 2
    rng(i).Copy
    Range("A2").End(xlDown).Offset(1, 0).PasteSpecial xlPasteValues
Next i

End Sub

Sub x2()

'Named ranges

Dim i As Long

Range("B2", Range("B2").End(xlDown)).Name = "rng1a"
Range("D2", Range("E2").End(xlDown)).Name = "rng2a"

For i = 1 To 2
    Range("rng" & i & "a").Copy
    Range("A2").End(xlDown).Offset(1, 0).PasteSpecial xlPasteValues
Next i

End Sub

應該這樣做:

Option Explicit
Sub Test()

    Dim i As Long, LastRow As Long
    Dim arrRanges(1 To 2) As Range

    With ThisWorkbook.Sheets("NameYourSheet") 'change the sheet name
        Set arrRanges(1) = .Range("B2", .Range("B2").End(xlDown))
        Set arrRanges(2) = .Range("D2", .Range("E2").End(xlDown))
        For i = LBound(arrRanges) To UBound(arrRanges)
            LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
            arrRanges(i).Copy .Range("A" & LastRow)
        Next i
    End With

End Sub

記住要始終聲明所有變量,並引用工作簿和工作表。

您實際上想要做的(我認為)是將B,CD等列的內容復制到彼此下面的A列中。

Sub CopyStuff
Dim i as integer
dim r as range
for i = 1 to 6
    set r = range(cells(1,i),cells(1,i).end(xldown))
    r.copy 
    range("a1").end(xldown).offset(1,0).pastespecial xlpastevalues
next i

End sub

您可以具有范圍數組:

Set rng1a = Range("B2", Range("B2").End(xlDown))
Set rng2a = Range("D2", Range("E2").End(xlDown))

For Each rng in Array(rng1a, rng2a)
    rng.Copy
    Range("A2").End(xlDown).Offset(1,0).PasteSpecial xlPasteValues
Next

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM