你如何使变量成为活跃的细胞?

时间:2018-01-09 20:55:58

标签: vba excel-vba excel

我使用输入框将变体定义为单元格值

sub practice()

Dim Value1 as Variant

'Get Input Values
Value1 = Application.InputBox(prompt:="Click Cell Value", Title:="Specify 
Range", Type:=8)

'Select Variable as the ActiveCell
Value.Select

End Sub

当我尝试选择变量作为activecell时,会发生错误。我有什么想法可以做到这一点吗?

1 个答案:

答案 0 :(得分:1)

Range是一种对象类型。在VBA中分配对象引用时,需要Set关键字。

Value1 = ...

这是有效的,只是因为Value1被声明为Variant(因此可以字面上任何) - 发生的事情是它' s被分配给所选单元格的

这是因为Range类的默认属性基本上指向其Value成员。

默认属性生成此代码:

Debug.Print ActiveSheet.Range("A1")

相当于此代码:

Debug.Print ActiveSheet.Range("A1").Value

因此,如果您在没有Variant关键字的情况下分配Set,则不会指定对象引用,因此您需要分配的。如果类型(Range)没有默认成员,则该语句会引发运行时错误。

换句话说,您正在查看Variant/StringVariant/DoubleVariant/Error,具体取决于单元格的内容。你不能在其中任何一个上调用.Select

因此,解决方案是Set Value1参考:

Set Value1 = ...

这样您就可以分配对象引用,而不是默认属性的值。

声明变量As Excel.Range会让VBA更好地理解你的意图:

Dim Value1 As Excel.Range
Value1 = ...

这会引发运行时错误91"对象引用(或使用块变量)而不是Set",因为您无法分配对象引用的默认成员' s设置为Nothing(这是未设置的对象引用)。​​