我是VBA的新手,正在尝试做一些基本的事情,但是vba似乎没有让我为变量分配一个命名范围,然后再引用它。
该命名范围的作用域是整个工作簿,因此我不必事先参考该表。这是代码:
Sub my_function()
Sheets("TEST").Select
numRange = Range("num")
Range(numRange).Select
Selection.Copy
Selection.Insert shift:=xlToRight
End Sub
有人知道我在做什么错吗?
答案 0 :(得分:2)
您通常应该Avoid Using Select。请尝试以下代码:
module.min.css
您当然也可以跳过将其分配给单独的范围对象,并在Dim numRange As Range
Set numRange = Sheets("TEST").Range("num")
numRange.Copy
numRange.Offset(, numRange.Columns.Count).Insert xlShiftToRight
块内使用它的方法,如下所示:
With
答案 1 :(得分:1)
在不使变量变暗的情况下,VBA会尝试分配自己的变量。根据您命名的范围Num
所赋予的权利(单个单元格或(终止)范围),行为将有所不同。
我的猜测是您正在尝试使用位于num
中的单个单元格的间接单元格引用。在这种情况下,基本的VBA将如下所示:
Dim numRange As Range
With Sheets("TEST")
Set numRange = .Range(.Range("num"))
End With
因此,假设num
指向B1
,并且B1
中的值是对A1:A5
的书面引用,那么numRange
现在将保留地址为$A$1:$A$5
如果我的猜测是错误的,并且您只想将命名范围作为范围对象,则无需再次Set
,它已经是范围对象。只需将其称为(例如):
With Sheets("TEST")
.Range("num").Select
End With
但是,您应该避免使用.Select