Excel的VBA:不能定义范围,得到错误的对象与块变量未设置

问题描述:

我试图确定在Excel中使用VBA的Range,Excel的VBA:不能定义范围,得到错误的对象与块变量未设置

Sub convertePerc() 
Dim separador As String 
Dim linhaInicial, linhaFinal, colunaInicial, colunaFinal, numAnos As Integer 
Dim origem, destino As Range 

    separador = "DRES(G)" 

    colunaFinal = Sheets(separador).Cells(6, 5).End(xlToRight).Column 
    linhaFinal = 40 
    numAnos = 10 
    origem = Sheets(separador).Range(Cells(10, 4), Cells(linhaFinal, colunaFinal)) 

    colunaInicial = CInt(4 + numAnos + 1) 
    colunaFinal = CInt(numAnos + colunaFinal + 1) 
    destino = Sheets(separador).Range(Cells(10, 4), Cells(11, 5)) 


End Sub 

第一个范围origem是否正确没有错误定义,但第二destino抛出错误:

Object with block variable not set 

在线:

destino = Sheets(separador).Range(Cells(10, 4), Cells(11, 5)) 

有人可以解释我为什么,以及如何解决这个问题?

在此先感谢!

+3

添加'set'盈方?另外'origem'被声明为变量类型变体fyi。 – findwindow

+0

用低于 – shg

+0

的响应替换'Dim origem,destino As Range'仅将'destino'定义为Range类型对象。 **与你的声明一起明确**。否则,在分配给对象变量时需要使用'Set'关键字。 –

范围是对象变量,对象变量需要Set。此外,对范围或单元格的非限定引用是活动工作表。所以

With Sheets(separador) 
    Set destino = Range(.Cells(10, 4), .Cells(11, 5)) 
End With 
+0

啊!不要忘记'Range'前面的'.'''设置destino = .Range(.Cells(10,4),。Cells(11,5))''。 – BruceWayne

+1

除非第一个参数是一个字符串,否则没有必要,例如“D10” – shg

+0

嗯 - 那是因为(并且对于缺乏词汇表示歉意),'Range()'查看'()'内部的内容确定'Range'的位置(工作表)?所以,既然我们指定我们在'Sheets(separador)'中使用'Cells()',那么'Range'部分理解?而使用'Range(“A10”)'不指定表格的任何地方,它会默认为活动表格? – BruceWayne