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

我不确定这是否可以开始。

我正在遍历一些单元格,并且在某个时刻我想要定义一个这样的范围:

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

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

c是我目前的细胞(因为我遍历所有细胞)。 范围总是空的,我不明白为什么。

f.column比g.column小

使用Cells来引用单个单元格。 然后你可以join这些范围:

 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 

请注意,由于With...End With块, .Range.Cells将引用Sheet1。
https://msdn.microsoft.com/en-us/library/wc500chb.aspx

您可以使用.Cells()属性 。

 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属性才能使用整数构build范围。

编辑:

正如@ 斯科特·霍尔茨曼所说的,你必须首先通过。然后, .Column放入.Cells (与你在问题中显示的方式相反)。

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

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

尝试一些沿线的东西

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

当然你需要参考工作表和单元格等等