从其他单元格生成范围excel vba

时间:2016-02-26 13:14:18

标签: excel vba excel-vba range

我不确定是否可以这样做。

我正在迭代一些单元格,在某些时候我想要定义这样的范围:

Set rngtmp = Range(f.Column & c.Row & ":" & g.Column & c.Row)

f和g指向单个单元格并且它们没问题(我的意思是它们工作正常)因为我也在做一些操作,将它们作为参考并且它们可以工作。

c是我目前所在的单元格(因为我正在迭代所有单元格)。范围总是空的,我不明白为什么。

f.column小于g.column

3 个答案:

答案 0 :(得分:3)

您可以使用.Cells() property

Dim wb As Workbook, ws As Worksheet
Dim rngTmp As Range

Set wb = ThisWorkbook
Set ws = wb.Sheets(1)

With ws
    Set rngTmp = .Range(.Cells(c.Row, f.Column), .Cells(c.Row, g.Column))
End With

您不能使用整数来确定范围对象的大小;您需要使用.Cells属性才能使用整数来构建范围。

修改:

提及@ Scott Holtzman时,您必须首先将.Row然后.Column传递到.Cells(与您在问题中显示的方式相反)。

提到@ eirikdaude,您可以使用.Range,然后使用.Resize property;这允许您使用范围的整数,而不必使用.Cells属性。这是我在将数组写入工作表时通常使用的方法。

答案 1 :(得分:1)

使用Cells来引用单个单元格。然后,您可以在以下范围内加入这些:

Sub Test()
    Dim rngtmp As Range
    Dim f As Range
    Dim c As Range
    Dim g As Range

    With ThisWorkbook.Worksheets("Sheet1")
        Set f = .Range("A1")
        Set c = .Range("D8")
        Set g = .Range("L22")
        Set rngtmp = .Range(.Cells(c.Row, f.Column), .Cells(g.Column, c.Row))
    End With
End Sub

请注意,由于.Range阻止,.CellsWith...End With会引用Sheet1。 https://msdn.microsoft.com/en-us/library/wc500chb.aspx

答案 2 :(得分:0)

您不能使用.Column,因为它返回列的整数索引,而不是字母。

尝试一下

的内容

set rngtmp = Range(Cells(f.Row, c.Column), Cells(g.Row, c.Column))

当然,您需要引用工作表和单元格,例如必需的