我使用输入框将变体定义为单元格值
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时,会发生错误。我有什么想法可以做到这一点吗?
答案 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/String
,Variant/Double
或Variant/Error
,具体取决于单元格的内容。你不能在其中任何一个上调用.Select
!
因此,解决方案是Set
Value1
参考:
Set Value1 = ...
这样您就可以分配对象引用,而不是默认属性的值。
声明变量As Excel.Range
会让VBA更好地理解你的意图:
Dim Value1 As Excel.Range
Value1 = ...
这会引发运行时错误91"对象引用(或使用块变量)而不是Set",因为您无法分配对象引用的默认成员' s设置为Nothing
(这是未设置的对象引用)。